From 35aaffcc238173a8f03a1bedc644bf21a5016554 Mon Sep 17 00:00:00 2001 From: Thomas Morgner Date: Wed, 6 Feb 2019 11:52:07 +0000 Subject: [PATCH 01/24] Initial code drop --- Assets/Plugins/LICENSE.txt | 21 + Assets/Plugins/LICENSE.txt.meta | 7 + Assets/Plugins/Scenes.meta | 8 + Assets/Plugins/Scenes/ContentList.prefab | 511 ++ Assets/Plugins/Scenes/ContentList.prefab.meta | 8 + .../Scenes/DemonstrationEventLogger.asset | 16 + .../DemonstrationEventLogger.asset.meta | 8 + .../Scenes/DemonstrationEventStream.asset | 141 + .../DemonstrationEventStream.asset.meta | 8 + Assets/Plugins/Scenes/Material A.mat | 77 + Assets/Plugins/Scenes/Material A.mat.meta | 8 + Assets/Plugins/Scenes/Material B.mat | 77 + Assets/Plugins/Scenes/Material B.mat.meta | 8 + Assets/Plugins/Scenes/Material C.mat | 77 + Assets/Plugins/Scenes/Material C.mat.meta | 8 + Assets/Plugins/Scenes/Material D.mat | 77 + Assets/Plugins/Scenes/Material D.mat.meta | 8 + Assets/Plugins/Scenes/Material E.mat | 77 + Assets/Plugins/Scenes/Material E.mat.meta | 8 + Assets/Plugins/Scenes/Player.prefab | 342 ++ Assets/Plugins/Scenes/Player.prefab.meta | 8 + Assets/Plugins/Scenes/Scripts.meta | 8 + .../Scenes/Scripts/CharacterBehaviour.cs | 106 + .../Scenes/Scripts/CharacterBehaviour.cs.meta | 3 + Assets/Plugins/Scenes/TutorialAssembly.unity | 4376 +++++++++++++++++ .../Scenes/TutorialAssembly.unity.meta | 7 + Assets/Plugins/Scenes/piano.wav | Bin 0 -> 768328 bytes Assets/Plugins/Scenes/piano.wav.meta | 22 + Assets/Plugins/Scenes/slam.wav | Bin 0 -> 619352 bytes Assets/Plugins/Scenes/slam.wav.meta | 22 + Assets/Plugins/Scenes/tada3.mp3 | Bin 0 -> 37951 bytes Assets/Plugins/Scenes/tada3.mp3.meta | 22 + Assets/Plugins/Scripts.meta | 8 + Assets/Plugins/Scripts/Aggregators.meta | 3 + .../Aggregators/EventMessageAggregator.cs | 118 + .../EventMessageAggregator.cs.meta | 3 + .../Aggregators/EventMessageCounter.cs | 74 + .../Aggregators/EventMessageCounter.cs.meta | 3 + .../Aggregators/EventSequenceAggregator.cs | 143 + .../EventSequenceAggregator.cs.meta | 3 + .../Scripts/Aggregators/EventSetAggregator.cs | 119 + .../Aggregators/EventSetAggregator.cs.meta | 3 + .../Aggregators/IEventMessageAggregator.cs | 44 + .../IEventMessageAggregator.cs.meta | 3 + .../Aggregators/OneOfEventSetAggregator.cs | 78 + .../OneOfEventSetAggregator.cs.meta | 3 + Assets/Plugins/Scripts/Events.meta | 3 + .../Scripts/Events/BasicEventStream.cs | 150 + .../Scripts/Events/BasicEventStream.cs.meta | 11 + .../Events/BasicEventStreamEditorSupport.cs | 87 + .../BasicEventStreamEditorSupport.cs.meta | 3 + .../Scripts/Events/BasicEventStreamMessage.cs | 32 + .../Events/BasicEventStreamMessage.cs.meta | 3 + .../Plugins/Scripts/Events/LogEventStream.cs | 35 + .../Scripts/Events/LogEventStream.cs.meta | 3 + .../Scripts/Events/NextEventSelector.cs | 32 + .../Scripts/Events/NextEventSelector.cs.meta | 3 + .../Scripts/Events/NextEventSelectorBase.cs | 236 + .../Events/NextEventSelectorBase.cs.meta | 3 + .../Scripts/Events/PublishStreamEvent.cs | 37 + .../Scripts/Events/PublishStreamEvent.cs.meta | 3 + .../Scripts/Events/StaticStreamEventSource.cs | 15 + .../Events/StaticStreamEventSource.cs.meta | 3 + .../Scripts/Events/StreamEventSource.cs | 9 + .../Scripts/Events/StreamEventSource.cs.meta | 3 + Assets/Plugins/Scripts/Helpers.meta | 3 + .../Scripts/Helpers/MouseEventPublisher.cs | 27 + .../Helpers/MouseEventPublisher.cs.meta | 3 + .../Helpers/NextEventAggregationActivator.cs | 38 + .../NextEventAggregationActivator.cs.meta | 3 + .../Scripts/Helpers/TutorialEventMessage.cs | 51 + .../Helpers/TutorialEventMessage.cs.meta | 3 + .../Scripts/Helpers/TutorialEventStateData.cs | 156 + .../Helpers/TutorialEventStateData.cs.meta | 3 + .../Helpers/TutorialEventStatePublisher.cs | 87 + .../TutorialEventStatePublisher.cs.meta | 3 + .../Scripts/Helpers/TutorialEventStream.cs | 19 + .../Helpers/TutorialEventStream.cs.meta | 3 + .../Helpers/TutorialEventStreamManager.cs | 322 ++ .../TutorialEventStreamManager.cs.meta | 3 + .../Helpers/TutorialEventTreeItemRenderer.cs | 207 + .../TutorialEventTreeItemRenderer.cs.meta | 3 + .../Scripts/Helpers/TutorialEventTreeView.cs | 55 + .../Helpers/TutorialEventTreeView.cs.meta | 3 + Assets/Plugins/Scripts/SharedMethods.cs | 117 + Assets/Plugins/Scripts/SharedMethods.cs.meta | 3 + Assets/Plugins/Scripts/UI.meta | 3 + Assets/Plugins/Scripts/UI/EventStreamState.cs | 77 + .../Scripts/UI/EventStreamState.cs.meta | 3 + Assets/Plugins/Scripts/UI/Trees.meta | 3 + .../Scripts/UI/Trees/DefaultTreeModel.cs | 83 + .../Scripts/UI/Trees/DefaultTreeModel.cs.meta | 11 + .../Scripts/UI/Trees/DefaultTreeNode.cs | 200 + .../Scripts/UI/Trees/DefaultTreeNode.cs.meta | 11 + .../UI/Trees/DefaultTreeNodeComparer.cs | 57 + .../UI/Trees/DefaultTreeNodeComparer.cs.meta | 11 + .../UI/Trees/DefaultTreeSelectionModel.cs | 146 + .../Trees/DefaultTreeSelectionModel.cs.meta | 11 + Assets/Plugins/Scripts/UI/Trees/ITreeModel.cs | 19 + .../Scripts/UI/Trees/ITreeModel.cs.meta | 11 + .../Scripts/UI/Trees/ITreeSelectionModel.cs | 18 + .../UI/Trees/ITreeSelectionModel.cs.meta | 11 + .../Plugins/Scripts/UI/Trees/ListTreeModel.cs | 50 + .../Scripts/UI/Trees/ListTreeModel.cs.meta | 3 + .../Plugins/Scripts/UI/Trees/SelectionMode.cs | 9 + .../Scripts/UI/Trees/SelectionMode.cs.meta | 11 + .../Scripts/UI/Trees/TreeItemRenderer.cs | 60 + .../Scripts/UI/Trees/TreeItemRenderer.cs.meta | 3 + Assets/Plugins/Scripts/UI/Trees/TreeModel.cs | 75 + .../Scripts/UI/Trees/TreeModel.cs.meta | 3 + .../Scripts/UI/Trees/TreeModelEventArgs.cs | 54 + .../UI/Trees/TreeModelEventArgs.cs.meta | 11 + .../Scripts/UI/Trees/TreeNodeExtensions.cs | 24 + .../UI/Trees/TreeNodeExtensions.cs.meta | 3 + Assets/Plugins/Scripts/UI/Trees/TreePath.cs | 242 + .../Plugins/Scripts/UI/Trees/TreePath.cs.meta | 11 + Assets/Plugins/Scripts/UI/Trees/TreeView.cs | 160 + .../Plugins/Scripts/UI/Trees/TreeView.cs.meta | 3 + .../Plugins/Scripts/UI/VisibleDuringEdit.cs | 22 + .../Scripts/UI/VisibleDuringEdit.cs.meta | 3 + Assets/Plugins/Sound-License.txt | 17 + Assets/Plugins/Sound-License.txt.meta | 7 + Assets/Plugins/package.json | 12 + Packages/manifest.json | 41 + ProjectSettings/AudioManager.asset | 17 + ProjectSettings/ClusterInputManager.asset | 6 + ProjectSettings/DynamicsManager.asset | 30 + ProjectSettings/EditorBuildSettings.asset | 11 + ProjectSettings/EditorSettings.asset | 21 + ProjectSettings/GraphicsSettings.asset | 62 + ProjectSettings/InputManager.asset | 295 ++ ProjectSettings/NavMeshAreas.asset | 91 + ProjectSettings/NetworkManager.asset | 8 + ProjectSettings/Physics2DSettings.asset | 38 + ProjectSettings/PresetManager.asset | 27 + ProjectSettings/ProjectSettings.asset | 621 +++ ProjectSettings/ProjectVersion.txt | 1 + ProjectSettings/QualitySettings.asset | 190 + ProjectSettings/TagManager.asset | 43 + ProjectSettings/TimeManager.asset | 9 + ProjectSettings/UnityConnectSettings.asset | 34 + ProjectSettings/VFXManager.asset | 11 + 142 files changed, 11471 insertions(+) create mode 100644 Assets/Plugins/LICENSE.txt create mode 100644 Assets/Plugins/LICENSE.txt.meta create mode 100644 Assets/Plugins/Scenes.meta create mode 100644 Assets/Plugins/Scenes/ContentList.prefab create mode 100644 Assets/Plugins/Scenes/ContentList.prefab.meta create mode 100644 Assets/Plugins/Scenes/DemonstrationEventLogger.asset create mode 100644 Assets/Plugins/Scenes/DemonstrationEventLogger.asset.meta create mode 100644 Assets/Plugins/Scenes/DemonstrationEventStream.asset create mode 100644 Assets/Plugins/Scenes/DemonstrationEventStream.asset.meta create mode 100644 Assets/Plugins/Scenes/Material A.mat create mode 100644 Assets/Plugins/Scenes/Material A.mat.meta create mode 100644 Assets/Plugins/Scenes/Material B.mat create mode 100644 Assets/Plugins/Scenes/Material B.mat.meta create mode 100644 Assets/Plugins/Scenes/Material C.mat create mode 100644 Assets/Plugins/Scenes/Material C.mat.meta create mode 100644 Assets/Plugins/Scenes/Material D.mat create mode 100644 Assets/Plugins/Scenes/Material D.mat.meta create mode 100644 Assets/Plugins/Scenes/Material E.mat create mode 100644 Assets/Plugins/Scenes/Material E.mat.meta create mode 100644 Assets/Plugins/Scenes/Player.prefab create mode 100644 Assets/Plugins/Scenes/Player.prefab.meta create mode 100644 Assets/Plugins/Scenes/Scripts.meta create mode 100644 Assets/Plugins/Scenes/Scripts/CharacterBehaviour.cs create mode 100644 Assets/Plugins/Scenes/Scripts/CharacterBehaviour.cs.meta create mode 100644 Assets/Plugins/Scenes/TutorialAssembly.unity create mode 100644 Assets/Plugins/Scenes/TutorialAssembly.unity.meta create mode 100644 Assets/Plugins/Scenes/piano.wav create mode 100644 Assets/Plugins/Scenes/piano.wav.meta create mode 100644 Assets/Plugins/Scenes/slam.wav create mode 100644 Assets/Plugins/Scenes/slam.wav.meta create mode 100644 Assets/Plugins/Scenes/tada3.mp3 create mode 100644 Assets/Plugins/Scenes/tada3.mp3.meta create mode 100644 Assets/Plugins/Scripts.meta create mode 100644 Assets/Plugins/Scripts/Aggregators.meta create mode 100644 Assets/Plugins/Scripts/Aggregators/EventMessageAggregator.cs create mode 100644 Assets/Plugins/Scripts/Aggregators/EventMessageAggregator.cs.meta create mode 100644 Assets/Plugins/Scripts/Aggregators/EventMessageCounter.cs create mode 100644 Assets/Plugins/Scripts/Aggregators/EventMessageCounter.cs.meta create mode 100644 Assets/Plugins/Scripts/Aggregators/EventSequenceAggregator.cs create mode 100644 Assets/Plugins/Scripts/Aggregators/EventSequenceAggregator.cs.meta create mode 100644 Assets/Plugins/Scripts/Aggregators/EventSetAggregator.cs create mode 100644 Assets/Plugins/Scripts/Aggregators/EventSetAggregator.cs.meta create mode 100644 Assets/Plugins/Scripts/Aggregators/IEventMessageAggregator.cs create mode 100644 Assets/Plugins/Scripts/Aggregators/IEventMessageAggregator.cs.meta create mode 100644 Assets/Plugins/Scripts/Aggregators/OneOfEventSetAggregator.cs create mode 100644 Assets/Plugins/Scripts/Aggregators/OneOfEventSetAggregator.cs.meta create mode 100644 Assets/Plugins/Scripts/Events.meta create mode 100644 Assets/Plugins/Scripts/Events/BasicEventStream.cs create mode 100644 Assets/Plugins/Scripts/Events/BasicEventStream.cs.meta create mode 100644 Assets/Plugins/Scripts/Events/BasicEventStreamEditorSupport.cs create mode 100644 Assets/Plugins/Scripts/Events/BasicEventStreamEditorSupport.cs.meta create mode 100644 Assets/Plugins/Scripts/Events/BasicEventStreamMessage.cs create mode 100644 Assets/Plugins/Scripts/Events/BasicEventStreamMessage.cs.meta create mode 100644 Assets/Plugins/Scripts/Events/LogEventStream.cs create mode 100644 Assets/Plugins/Scripts/Events/LogEventStream.cs.meta create mode 100644 Assets/Plugins/Scripts/Events/NextEventSelector.cs create mode 100644 Assets/Plugins/Scripts/Events/NextEventSelector.cs.meta create mode 100644 Assets/Plugins/Scripts/Events/NextEventSelectorBase.cs create mode 100644 Assets/Plugins/Scripts/Events/NextEventSelectorBase.cs.meta create mode 100644 Assets/Plugins/Scripts/Events/PublishStreamEvent.cs create mode 100644 Assets/Plugins/Scripts/Events/PublishStreamEvent.cs.meta create mode 100644 Assets/Plugins/Scripts/Events/StaticStreamEventSource.cs create mode 100644 Assets/Plugins/Scripts/Events/StaticStreamEventSource.cs.meta create mode 100644 Assets/Plugins/Scripts/Events/StreamEventSource.cs create mode 100644 Assets/Plugins/Scripts/Events/StreamEventSource.cs.meta create mode 100644 Assets/Plugins/Scripts/Helpers.meta create mode 100644 Assets/Plugins/Scripts/Helpers/MouseEventPublisher.cs create mode 100644 Assets/Plugins/Scripts/Helpers/MouseEventPublisher.cs.meta create mode 100644 Assets/Plugins/Scripts/Helpers/NextEventAggregationActivator.cs create mode 100644 Assets/Plugins/Scripts/Helpers/NextEventAggregationActivator.cs.meta create mode 100644 Assets/Plugins/Scripts/Helpers/TutorialEventMessage.cs create mode 100644 Assets/Plugins/Scripts/Helpers/TutorialEventMessage.cs.meta create mode 100644 Assets/Plugins/Scripts/Helpers/TutorialEventStateData.cs create mode 100644 Assets/Plugins/Scripts/Helpers/TutorialEventStateData.cs.meta create mode 100644 Assets/Plugins/Scripts/Helpers/TutorialEventStatePublisher.cs create mode 100644 Assets/Plugins/Scripts/Helpers/TutorialEventStatePublisher.cs.meta create mode 100644 Assets/Plugins/Scripts/Helpers/TutorialEventStream.cs create mode 100644 Assets/Plugins/Scripts/Helpers/TutorialEventStream.cs.meta create mode 100644 Assets/Plugins/Scripts/Helpers/TutorialEventStreamManager.cs create mode 100644 Assets/Plugins/Scripts/Helpers/TutorialEventStreamManager.cs.meta create mode 100644 Assets/Plugins/Scripts/Helpers/TutorialEventTreeItemRenderer.cs create mode 100644 Assets/Plugins/Scripts/Helpers/TutorialEventTreeItemRenderer.cs.meta create mode 100644 Assets/Plugins/Scripts/Helpers/TutorialEventTreeView.cs create mode 100644 Assets/Plugins/Scripts/Helpers/TutorialEventTreeView.cs.meta create mode 100644 Assets/Plugins/Scripts/SharedMethods.cs create mode 100644 Assets/Plugins/Scripts/SharedMethods.cs.meta create mode 100644 Assets/Plugins/Scripts/UI.meta create mode 100644 Assets/Plugins/Scripts/UI/EventStreamState.cs create mode 100644 Assets/Plugins/Scripts/UI/EventStreamState.cs.meta create mode 100644 Assets/Plugins/Scripts/UI/Trees.meta create mode 100644 Assets/Plugins/Scripts/UI/Trees/DefaultTreeModel.cs create mode 100644 Assets/Plugins/Scripts/UI/Trees/DefaultTreeModel.cs.meta create mode 100644 Assets/Plugins/Scripts/UI/Trees/DefaultTreeNode.cs create mode 100644 Assets/Plugins/Scripts/UI/Trees/DefaultTreeNode.cs.meta create mode 100644 Assets/Plugins/Scripts/UI/Trees/DefaultTreeNodeComparer.cs create mode 100644 Assets/Plugins/Scripts/UI/Trees/DefaultTreeNodeComparer.cs.meta create mode 100644 Assets/Plugins/Scripts/UI/Trees/DefaultTreeSelectionModel.cs create mode 100644 Assets/Plugins/Scripts/UI/Trees/DefaultTreeSelectionModel.cs.meta create mode 100644 Assets/Plugins/Scripts/UI/Trees/ITreeModel.cs create mode 100644 Assets/Plugins/Scripts/UI/Trees/ITreeModel.cs.meta create mode 100644 Assets/Plugins/Scripts/UI/Trees/ITreeSelectionModel.cs create mode 100644 Assets/Plugins/Scripts/UI/Trees/ITreeSelectionModel.cs.meta create mode 100644 Assets/Plugins/Scripts/UI/Trees/ListTreeModel.cs create mode 100644 Assets/Plugins/Scripts/UI/Trees/ListTreeModel.cs.meta create mode 100644 Assets/Plugins/Scripts/UI/Trees/SelectionMode.cs create mode 100644 Assets/Plugins/Scripts/UI/Trees/SelectionMode.cs.meta create mode 100644 Assets/Plugins/Scripts/UI/Trees/TreeItemRenderer.cs create mode 100644 Assets/Plugins/Scripts/UI/Trees/TreeItemRenderer.cs.meta create mode 100644 Assets/Plugins/Scripts/UI/Trees/TreeModel.cs create mode 100644 Assets/Plugins/Scripts/UI/Trees/TreeModel.cs.meta create mode 100644 Assets/Plugins/Scripts/UI/Trees/TreeModelEventArgs.cs create mode 100644 Assets/Plugins/Scripts/UI/Trees/TreeModelEventArgs.cs.meta create mode 100644 Assets/Plugins/Scripts/UI/Trees/TreeNodeExtensions.cs create mode 100644 Assets/Plugins/Scripts/UI/Trees/TreeNodeExtensions.cs.meta create mode 100644 Assets/Plugins/Scripts/UI/Trees/TreePath.cs create mode 100644 Assets/Plugins/Scripts/UI/Trees/TreePath.cs.meta create mode 100644 Assets/Plugins/Scripts/UI/Trees/TreeView.cs create mode 100644 Assets/Plugins/Scripts/UI/Trees/TreeView.cs.meta create mode 100644 Assets/Plugins/Scripts/UI/VisibleDuringEdit.cs create mode 100644 Assets/Plugins/Scripts/UI/VisibleDuringEdit.cs.meta create mode 100644 Assets/Plugins/Sound-License.txt create mode 100644 Assets/Plugins/Sound-License.txt.meta create mode 100644 Assets/Plugins/package.json create mode 100644 Packages/manifest.json create mode 100644 ProjectSettings/AudioManager.asset create mode 100644 ProjectSettings/ClusterInputManager.asset create mode 100644 ProjectSettings/DynamicsManager.asset create mode 100644 ProjectSettings/EditorBuildSettings.asset create mode 100644 ProjectSettings/EditorSettings.asset create mode 100644 ProjectSettings/GraphicsSettings.asset create mode 100644 ProjectSettings/InputManager.asset create mode 100644 ProjectSettings/NavMeshAreas.asset create mode 100644 ProjectSettings/NetworkManager.asset create mode 100644 ProjectSettings/Physics2DSettings.asset create mode 100644 ProjectSettings/PresetManager.asset create mode 100644 ProjectSettings/ProjectSettings.asset create mode 100644 ProjectSettings/ProjectVersion.txt create mode 100644 ProjectSettings/QualitySettings.asset create mode 100644 ProjectSettings/TagManager.asset create mode 100644 ProjectSettings/TimeManager.asset create mode 100644 ProjectSettings/UnityConnectSettings.asset create mode 100644 ProjectSettings/VFXManager.asset diff --git a/Assets/Plugins/LICENSE.txt b/Assets/Plugins/LICENSE.txt new file mode 100644 index 0000000..4031813 --- /dev/null +++ b/Assets/Plugins/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018-2019 Thomas Morgner + +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/Plugins/LICENSE.txt.meta b/Assets/Plugins/LICENSE.txt.meta new file mode 100644 index 0000000..b02d5ea --- /dev/null +++ b/Assets/Plugins/LICENSE.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f8e734814ea2e0d41a0a79bd7f8b0486 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scenes.meta b/Assets/Plugins/Scenes.meta new file mode 100644 index 0000000..8cfcdbd --- /dev/null +++ b/Assets/Plugins/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 41671983d3817d84d82d3559c411e23a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scenes/ContentList.prefab b/Assets/Plugins/Scenes/ContentList.prefab new file mode 100644 index 0000000..25c0b1d --- /dev/null +++ b/Assets/Plugins/Scenes/ContentList.prefab @@ -0,0 +1,511 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 0} + m_RootGameObject: {fileID: 1415598103615636} + m_IsPrefabAsset: 1 +--- !u!1 &1119027821575648 +GameObject: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 224930166395689530} + - component: {fileID: 222869044883501650} + - component: {fileID: 114312059845659162} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1316549419527978 +GameObject: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 224995421561536330} + - component: {fileID: 114551943447470984} + m_Layer: 5 + m_Name: Toggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1415598103615636 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 224528275417451060} + - component: {fileID: 114821739908165324} + - component: {fileID: 114400973501864318} + m_Layer: 5 + m_Name: ContentList + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1472719709801288 +GameObject: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 224554747877605170} + - component: {fileID: 222743336091278658} + - component: {fileID: 114741211279708708} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1574653218349702 +GameObject: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 224432365767571276} + - component: {fileID: 222190762113586452} + - component: {fileID: 114720927400143124} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1843578962797072 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 224160305383547462} + - component: {fileID: 114931892990545888} + m_Layer: 5 + m_Name: _Template + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114312059845659162 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1119027821575648} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114400973501864318 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1415598103615636} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5dabfd477c564c518af7ad4e2362742a, type: 3} + m_Name: + m_EditorClassIdentifier: + showRootNode: 0 + template: {fileID: 114931892990545888} + showAllNodes: 0 +--- !u!114 &114551943447470984 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1316549419527978} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114312059845659162} + toggleTransition: 1 + graphic: {fileID: 114741211279708708} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_IsOn: 1 +--- !u!114 &114720927400143124 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1574653218349702} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_text: 'Test + +' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 + m_fontSize: 14 + m_fontSizeBase: 14 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_textAlignment: 257 + m_isAlignmentEnumConverted: 1 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_firstOverflowCharacterIndex: -1 + m_linkedTextComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_firstVisibleCharacter: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 114720927400143124} + characterCount: 5 + spriteCount: 0 + spaceCount: 1 + wordCount: 1 + linkCount: 0 + lineCount: 1 + pageCount: 1 + materialCount: 1 + m_havePropertiesChanged: 0 + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} + m_isInputParsingRequired: 0 + m_inputSource: 0 + m_hasFontAssetChanged: 0 + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &114741211279708708 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1472719709801288} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114821739908165324 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1415598103615636} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 0 +--- !u!114 &114931892990545888 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1843578962797072} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bcf2b234f7c645128d79667d27a38161, type: 3} + m_Name: + m_EditorClassIdentifier: + toggle: {fileID: 114551943447470984} + label: {fileID: 114720927400143124} + indentPerLevel: 20 +--- !u!222 &222190762113586452 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1574653218349702} + m_CullTransparentMesh: 0 +--- !u!222 &222743336091278658 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1472719709801288} + m_CullTransparentMesh: 0 +--- !u!222 &222869044883501650 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1119027821575648} + m_CullTransparentMesh: 0 +--- !u!224 &224160305383547462 +RectTransform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1843578962797072} + 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_Children: + - {fileID: 224995421561536330} + m_Father: {fileID: 224528275417451060} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 30} + m_Pivot: {x: 0, y: 0} +--- !u!224 &224432365767571276 +RectTransform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1574653218349702} + 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_Children: [] + m_Father: {fileID: 224995421561536330} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 2, y: 0} + m_SizeDelta: {x: -44, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224528275417451060 +RectTransform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1415598103615636} + 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_Children: + - {fileID: 224160305383547462} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!224 &224554747877605170 +RectTransform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1472719709801288} + 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_Children: [] + m_Father: {fileID: 224930166395689530} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224930166395689530 +RectTransform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1119027821575648} + 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_Children: + - {fileID: 224554747877605170} + m_Father: {fileID: 224995421561536330} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 10, y: -10} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224995421561536330 +RectTransform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1316549419527978} + 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_Children: + - {fileID: 224930166395689530} + - {fileID: 224432365767571276} + m_Father: {fileID: 224160305383547462} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 10} + m_SizeDelta: {x: 0, y: 20} + m_Pivot: {x: 0, y: 1} diff --git a/Assets/Plugins/Scenes/ContentList.prefab.meta b/Assets/Plugins/Scenes/ContentList.prefab.meta new file mode 100644 index 0000000..d9fe8b4 --- /dev/null +++ b/Assets/Plugins/Scenes/ContentList.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 154207b2fe8edf6469479d563d3e8e59 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scenes/DemonstrationEventLogger.asset b/Assets/Plugins/Scenes/DemonstrationEventLogger.asset new file mode 100644 index 0000000..ce7ce73 --- /dev/null +++ b/Assets/Plugins/Scenes/DemonstrationEventLogger.asset @@ -0,0 +1,16 @@ +%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: eb241ac2c5a447599a51649ca12e622f, type: 3} + m_Name: DemonstrationEventLogger + m_EditorClassIdentifier: + stream: {fileID: 11400000, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + enabled: 1 diff --git a/Assets/Plugins/Scenes/DemonstrationEventLogger.asset.meta b/Assets/Plugins/Scenes/DemonstrationEventLogger.asset.meta new file mode 100644 index 0000000..77c1122 --- /dev/null +++ b/Assets/Plugins/Scenes/DemonstrationEventLogger.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c633d558de1a6ab4b97eabaf09b08b31 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scenes/DemonstrationEventStream.asset b/Assets/Plugins/Scenes/DemonstrationEventStream.asset new file mode 100644 index 0000000..c7e5342 --- /dev/null +++ b/Assets/Plugins/Scenes/DemonstrationEventStream.asset @@ -0,0 +1,141 @@ +%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: 0efa5601f9e59ab4990baf4ac245a6dc, type: 3} + m_Name: DemonstrationEventStream + m_EditorClassIdentifier: + messageTypes: + - Button A + - Button B + - Button C + - Button D + - Button E + - Melody Complete + - Button Pressed + - Button Pressed Complete + - Tasks Complete +--- !u!114 &114087278996602626 +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: 83707740ea9a4854b2b1651e53c42c0b, type: 3} + m_Name: Button A + m_EditorClassIdentifier: + stream: {fileID: 11400000} +--- !u!114 &114237395628351686 +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: 83707740ea9a4854b2b1651e53c42c0b, type: 3} + m_Name: Button D + m_EditorClassIdentifier: + stream: {fileID: 11400000} +--- !u!114 &114295595302332938 +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: 83707740ea9a4854b2b1651e53c42c0b, type: 3} + m_Name: Melody Complete + m_EditorClassIdentifier: + stream: {fileID: 11400000} +--- !u!114 &114453565588672230 +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: 83707740ea9a4854b2b1651e53c42c0b, type: 3} + m_Name: Tasks Complete + m_EditorClassIdentifier: + stream: {fileID: 11400000} +--- !u!114 &114505920661840866 +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: 83707740ea9a4854b2b1651e53c42c0b, type: 3} + m_Name: Button C + m_EditorClassIdentifier: + stream: {fileID: 11400000} +--- !u!114 &114531965955044376 +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: 83707740ea9a4854b2b1651e53c42c0b, type: 3} + m_Name: Button B + m_EditorClassIdentifier: + stream: {fileID: 11400000} +--- !u!114 &114683655999235588 +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: 83707740ea9a4854b2b1651e53c42c0b, type: 3} + m_Name: Button Pressed + m_EditorClassIdentifier: + stream: {fileID: 11400000} +--- !u!114 &114969602861105628 +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: 83707740ea9a4854b2b1651e53c42c0b, type: 3} + m_Name: Button Pressed Complete + m_EditorClassIdentifier: + stream: {fileID: 11400000} +--- !u!114 &114979598298759166 +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: 83707740ea9a4854b2b1651e53c42c0b, type: 3} + m_Name: Button E + m_EditorClassIdentifier: + stream: {fileID: 11400000} diff --git a/Assets/Plugins/Scenes/DemonstrationEventStream.asset.meta b/Assets/Plugins/Scenes/DemonstrationEventStream.asset.meta new file mode 100644 index 0000000..c1fe6b5 --- /dev/null +++ b/Assets/Plugins/Scenes/DemonstrationEventStream.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c01cc92f4088c6e4abcd3830c0002c24 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scenes/Material A.mat b/Assets/Plugins/Scenes/Material A.mat new file mode 100644 index 0000000..95fce92 --- /dev/null +++ b/Assets/Plugins/Scenes/Material A.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Material A + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 0.6925462, b: 0.48584908, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Plugins/Scenes/Material A.mat.meta b/Assets/Plugins/Scenes/Material A.mat.meta new file mode 100644 index 0000000..1a68cab --- /dev/null +++ b/Assets/Plugins/Scenes/Material A.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2d0f2f374d40b044cad99564f6499b66 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scenes/Material B.mat b/Assets/Plugins/Scenes/Material B.mat new file mode 100644 index 0000000..830b863 --- /dev/null +++ b/Assets/Plugins/Scenes/Material B.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Material B + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 0.90372217, b: 0.48627448, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Plugins/Scenes/Material B.mat.meta b/Assets/Plugins/Scenes/Material B.mat.meta new file mode 100644 index 0000000..4128aca --- /dev/null +++ b/Assets/Plugins/Scenes/Material B.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 613e8da578a66c94f8d7dd6e9c35cfef +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scenes/Material C.mat b/Assets/Plugins/Scenes/Material C.mat new file mode 100644 index 0000000..2ec952c --- /dev/null +++ b/Assets/Plugins/Scenes/Material C.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Material C + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.69889736, g: 1, b: 0.48627448, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Plugins/Scenes/Material C.mat.meta b/Assets/Plugins/Scenes/Material C.mat.meta new file mode 100644 index 0000000..c527e98 --- /dev/null +++ b/Assets/Plugins/Scenes/Material C.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cdcd9310224fa424bb696b3a16069566 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scenes/Material D.mat b/Assets/Plugins/Scenes/Material D.mat new file mode 100644 index 0000000..a5b465f --- /dev/null +++ b/Assets/Plugins/Scenes/Material D.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Material D + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 0.48627448, b: 0.62796795, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Plugins/Scenes/Material D.mat.meta b/Assets/Plugins/Scenes/Material D.mat.meta new file mode 100644 index 0000000..11c92c1 --- /dev/null +++ b/Assets/Plugins/Scenes/Material D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 254da5f51648fba4c9a58e4aa28b91de +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scenes/Material E.mat b/Assets/Plugins/Scenes/Material E.mat new file mode 100644 index 0000000..af25c09 --- /dev/null +++ b/Assets/Plugins/Scenes/Material E.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Material E + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.48627448, g: 0.9159756, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Plugins/Scenes/Material E.mat.meta b/Assets/Plugins/Scenes/Material E.mat.meta new file mode 100644 index 0000000..86409c8 --- /dev/null +++ b/Assets/Plugins/Scenes/Material E.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 156bb662bf805ff4293c7bedc3c3082d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scenes/Player.prefab b/Assets/Plugins/Scenes/Player.prefab new file mode 100644 index 0000000..5dc0765 --- /dev/null +++ b/Assets/Plugins/Scenes/Player.prefab @@ -0,0 +1,342 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 0} + m_RootGameObject: {fileID: 1244723767573728} + m_IsPrefabAsset: 1 +--- !u!1 &1070021465145296 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4628888185422042} + - component: {fileID: 33440364477968484} + - component: {fileID: 23621741914110926} + - component: {fileID: 135733888523515464} + m_Layer: 0 + m_Name: Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1244723767573728 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4100914089427470} + - component: {fileID: 143371818348401776} + - component: {fileID: 114571473726663984} + m_Layer: 0 + m_Name: Player + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1631203309818378 +GameObject: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4348443926274028} + - component: {fileID: 20170485882131438} + - component: {fileID: 81224396187494474} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1687002603152750 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4114957474629024} + - component: {fileID: 33539184950781672} + - component: {fileID: 23016541972173176} + - component: {fileID: 136889383682470836} + m_Layer: 0 + m_Name: Body + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4100914089427470 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1244723767573728} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 7.8787584, y: 1.1831524, z: -1.7996497} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4628888185422042} + - {fileID: 4114957474629024} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4114957474629024 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1687002603152750} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.75, z: 0} + m_LocalScale: {x: 0.75, y: 0.75, z: 0.75} + m_Children: [] + m_Father: {fileID: 4100914089427470} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4348443926274028 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1631203309818378} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.262, z: -0.044} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4628888185422042} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4628888185422042 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1070021465145296} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1.7, z: 0} + m_LocalScale: {x: 0.6, y: 0.6, z: 0.6} + m_Children: + - {fileID: 4348443926274028} + m_Father: {fileID: 4100914089427470} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &20170485882131438 +Camera: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1631203309818378} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!23 &23016541972173176 +MeshRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1687002603152750} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23621741914110926 +MeshRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1070021465145296} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33440364477968484 +MeshFilter: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1070021465145296} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33539184950781672 +MeshFilter: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1687002603152750} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!81 &81224396187494474 +AudioListener: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1631203309818378} + m_Enabled: 1 +--- !u!114 &114571473726663984 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1244723767573728} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 874752e98bdb4ccd8f8377e539e3529e, type: 3} + m_Name: + m_EditorClassIdentifier: + strafeKey: 306 + strafeKey2: 305 + forwardMovementSpeed: 2 + reverseMovementSpeed: 1 + strafeSpeed: 1 + movementThreshold: 0.1 + rotationSpeed: 180 + independentHeadMovement: 0 + invertHeadLook: 0 + head: {fileID: 0} + MovementBlocked: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + Moving: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!135 &135733888523515464 +SphereCollider: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1070021465145296} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!136 &136889383682470836 +CapsuleCollider: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1687002603152750} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!143 &143371818348401776 +CharacterController: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1244723767573728} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Height: 2 + m_Radius: 0.5 + m_SlopeLimit: 45 + m_StepOffset: 0.3 + m_SkinWidth: 0.08 + m_MinMoveDistance: 0.001 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/Scenes/Player.prefab.meta b/Assets/Plugins/Scenes/Player.prefab.meta new file mode 100644 index 0000000..d642bc3 --- /dev/null +++ b/Assets/Plugins/Scenes/Player.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f124838f11137ef4fade04d0ac972bc6 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scenes/Scripts.meta b/Assets/Plugins/Scenes/Scripts.meta new file mode 100644 index 0000000..680a7ec --- /dev/null +++ b/Assets/Plugins/Scenes/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2e105fa76f47ed64cbf37dcb36f6ae42 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scenes/Scripts/CharacterBehaviour.cs b/Assets/Plugins/Scenes/Scripts/CharacterBehaviour.cs new file mode 100644 index 0000000..75ae52b --- /dev/null +++ b/Assets/Plugins/Scenes/Scripts/CharacterBehaviour.cs @@ -0,0 +1,106 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace TutorialSystem.Scenes.Scripts +{ + [RequireComponent(typeof(CharacterController))] + public class CharacterBehaviour : MonoBehaviour + { + [SerializeField] KeyCode strafeKey; + [SerializeField] KeyCode strafeKey2; + [SerializeField] float forwardMovementSpeed; + [SerializeField] float reverseMovementSpeed; + [SerializeField] float strafeSpeed; + [SerializeField] float movementThreshold; + [SerializeField] float rotationSpeed; + [SerializeField] bool independentHeadMovement; + [SerializeField] bool invertHeadLook; + CharacterController characterController; + [SerializeField] Transform head; + public UnityEvent MovementBlocked; + public UnityEvent Moving; + + public CollisionFlags MovementResult { get; set; } + + void Reset() + { + strafeKey = KeyCode.LeftControl; + strafeKey2 = KeyCode.RightControl; + forwardMovementSpeed = 2; + reverseMovementSpeed = 1; + strafeSpeed = 1; + movementThreshold = 0.1f; + rotationSpeed = 5f; + } + + void Awake() + { + characterController = GetComponent(); + } + + void OnEnable() + { + } + + void OnDisable() + { + } + + void FixedUpdate() + { + var h = Input.GetAxis("Horizontal"); + if (!independentHeadMovement) + { + h += Input.GetAxis("Mouse X"); + } + + var v = Input.GetAxis("Vertical"); + var velocity = Vector3.zero; + if (v < 0) + { + velocity += transform.forward * v * reverseMovementSpeed * Time.fixedDeltaTime; + } + else + { + velocity += transform.forward * v * forwardMovementSpeed * Time.fixedDeltaTime; + } + + if (Input.GetKey(strafeKey) || Input.GetKey(strafeKey2)) + { + velocity += transform.right * h * strafeSpeed * Time.fixedDeltaTime; + } + else + { + transform.Rotate(Vector3.up, h * rotationSpeed * Time.fixedDeltaTime); + } + + HandleMouseLook(); + + MovementResult = characterController.Move(velocity); + + if (MovementResult != 0) + { + MovementBlocked?.Invoke(); + } + + if (characterController.velocity.magnitude > movementThreshold) + { + Moving?.Invoke(); + } + } + + void HandleMouseLook() + { + var mouseLookAxisX = independentHeadMovement ? Input.GetAxis("Mouse X") : 0; + var mouseLookAxisY = Input.GetAxis("Mouse Y") * (invertHeadLook ? 1 : -1); + var angleY = mouseLookAxisX * Time.fixedDeltaTime * rotationSpeed; + var angleX = mouseLookAxisY * Time.fixedDeltaTime * rotationSpeed; + + var eulers = head.localRotation.eulerAngles; + eulers.y += angleY; + eulers.x = Mathf.Clamp(Mathf.DeltaAngle(0, eulers.x + angleX), -45, 45); + + head.localRotation = Quaternion.Euler(eulers.x, eulers.y, 0); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scenes/Scripts/CharacterBehaviour.cs.meta b/Assets/Plugins/Scenes/Scripts/CharacterBehaviour.cs.meta new file mode 100644 index 0000000..7ec4bf7 --- /dev/null +++ b/Assets/Plugins/Scenes/Scripts/CharacterBehaviour.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 874752e98bdb4ccd8f8377e539e3529e +timeCreated: 1546096240 \ No newline at end of file diff --git a/Assets/Plugins/Scenes/TutorialAssembly.unity b/Assets/Plugins/Scenes/TutorialAssembly.unity new file mode 100644 index 0000000..657158c --- /dev/null +++ b/Assets/Plugins/Scenes/TutorialAssembly.unity @@ -0,0 +1,4376 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &121474007 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 121474008} + - component: {fileID: 121474009} + - component: {fileID: 121474010} + m_Layer: 0 + m_Name: CombinedStateHandler + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &121474008 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 121474007} + 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_Children: [] + m_Father: {fileID: 2005220181} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &121474009 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 121474007} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8f0a408106974c8d87c1327fb3471f9b, type: 3} + m_Name: + m_EditorClassIdentifier: + Messages: + - {fileID: 114969602861105628, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + - {fileID: 114295595302332938, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + matchComplete: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + matchFailed: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + matchMode: 0 +--- !u!114 &121474010 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 121474007} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7fb333aa63754b08a8a3c8327964d16b, type: 3} + m_Name: + m_EditorClassIdentifier: + stateChain: {fileID: 121474009} + successMessage: {fileID: 114453565588672230, guid: c01cc92f4088c6e4abcd3830c0002c24, + type: 2} +--- !u!1 &136464903 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 136464907} + - component: {fileID: 136464906} + - component: {fileID: 136464905} + - component: {fileID: 136464904} + - component: {fileID: 136464908} + - component: {fileID: 136464909} + - component: {fileID: 136464910} + m_Layer: 0 + m_Name: Cube D + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &136464904 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 136464903} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &136464905 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 136464903} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 2100000, guid: 254da5f51648fba4c9a58e4aa28b91de, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &136464906 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 136464903} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &136464907 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 136464903} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.705, y: 1, z: -4.827} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 638795628} + m_Father: {fileID: 1569524829} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!82 &136464908 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 136464903} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: b0fec8744b503ce47b10824d221e0727, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1.2 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!114 &136464909 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 136464903} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 707a12fe3b5f46afa91e26f91d81b0ef, type: 3} + m_Name: + m_EditorClassIdentifier: + message: {fileID: 114237395628351686, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} +--- !u!114 &136464910 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 136464903} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3c2f7fb44e844d968edd605a04aa2f80, type: 3} + m_Name: + m_EditorClassIdentifier: + Clicked: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 136464909} + m_MethodName: TriggerEvent + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 136464908} + m_MethodName: Play + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + MouseEntered: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + MouseExited: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!1 &141102406 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 141102407} + - component: {fileID: 141102410} + - component: {fileID: 141102409} + - component: {fileID: 141102408} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &141102407 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 141102406} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 0.19999999, y: 0.19999999, z: 0.19999999} + m_Children: [] + m_Father: {fileID: 159285980} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &141102408 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 141102406} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &141102409 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 141102406} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &141102410 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 141102406} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &146596266 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 146596267} + - component: {fileID: 146596270} + - component: {fileID: 146596269} + - component: {fileID: 146596268} + m_Layer: 5 + m_Name: Scrollbar Horizontal + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &146596267 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 146596266} + 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_Children: + - {fileID: 1087091968} + m_Father: {fileID: 165394804} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -17, y: 20} + m_Pivot: {x: 0, y: 0} +--- !u!114 &146596268 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 146596266} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1871891756} + m_HandleRect: {fileID: 1871891755} + m_Direction: 0 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &146596269 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 146596266} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &146596270 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 146596266} + m_CullTransparentMesh: 0 +--- !u!1 &159285979 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 159285980} + - component: {fileID: 159285981} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &159285980 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 159285979} + 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_Children: + - {fileID: 141102407} + m_Father: {fileID: 1471210924} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &159285981 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 159285979} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5e67e2cca44e86b9b488f72160885e, type: 3} + m_Name: + m_EditorClassIdentifier: + sources: + - {fileID: 168782044} + nextMessageSource: {fileID: 1471210926} + autoPopulate: 0 + enableForNextMessage: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 141102406} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + disableForNextMessage: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 141102406} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!1 &165394803 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 165394804} + - component: {fileID: 165394807} + - component: {fileID: 165394806} + - component: {fileID: 165394805} + m_Layer: 5 + m_Name: Scroll View + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &165394804 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 165394803} + 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_Children: + - {fileID: 491854709} + - {fileID: 146596267} + - {fileID: 385256436} + m_Father: {fileID: 375966259} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -480, y: 0} + m_SizeDelta: {x: 480, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &165394805 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 165394803} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &165394806 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 165394803} + m_CullTransparentMesh: 0 +--- !u!114 &165394807 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 165394803} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 2004723107} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 491854709} + m_HorizontalScrollbar: {fileID: 146596268} + m_VerticalScrollbar: {fileID: 385256437} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 0 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!1 &168782041 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 168782043} + - component: {fileID: 168782044} + - component: {fileID: 168782042} + m_Layer: 0 + m_Name: MelodyStateHandler + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &168782042 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 168782041} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7fb333aa63754b08a8a3c8327964d16b, type: 3} + m_Name: + m_EditorClassIdentifier: + stateChain: {fileID: 168782044} + successMessage: {fileID: 114295595302332938, guid: c01cc92f4088c6e4abcd3830c0002c24, + type: 2} +--- !u!4 &168782043 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 168782041} + 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_Children: + - {fileID: 1088321519} + - {fileID: 1079922267} + - {fileID: 536738628} + m_Father: {fileID: 2005220181} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &168782044 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 168782041} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dfb04f096c9c4ca387330c23be4262f1, type: 3} + m_Name: + m_EditorClassIdentifier: + Messages: + - {fileID: 114505920661840866, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + - {fileID: 114505920661840866, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + - {fileID: 114237395628351686, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + - {fileID: 114979598298759166, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + - {fileID: 114979598298759166, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + - {fileID: 114237395628351686, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + - {fileID: 114505920661840866, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + - {fileID: 114531965955044376, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + - {fileID: 114087278996602626, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + - {fileID: 114087278996602626, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + - {fileID: 114531965955044376, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + - {fileID: 114505920661840866, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + matchComplete: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1088321520} + m_MethodName: Play + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + matchFailed: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 168782044} + m_MethodName: ResetMatch + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1079922268} + m_MethodName: Play + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + strict: 1 +--- !u!1 &364011009 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 364011010} + - component: {fileID: 364011012} + - component: {fileID: 364011011} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &364011010 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 364011009} + 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_Children: [] + m_Father: {fileID: 1824248533} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &364011011 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 364011009} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &364011012 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 364011009} + m_CullTransparentMesh: 0 +--- !u!1 &375966258 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 375966259} + - component: {fileID: 375966261} + - component: {fileID: 375966260} + m_Layer: 5 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &375966259 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 375966258} + 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_Children: + - {fileID: 165394804} + m_Father: {fileID: 787784673} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 480, y: 0} + m_Pivot: {x: 1, y: 0} +--- !u!114 &375966260 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 375966258} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &375966261 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 375966258} + m_CullTransparentMesh: 0 +--- !u!1 &385256435 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 385256436} + - component: {fileID: 385256439} + - component: {fileID: 385256438} + - component: {fileID: 385256437} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &385256436 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 385256435} + 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_Children: + - {fileID: 1824248533} + m_Father: {fileID: 165394804} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!114 &385256437 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 385256435} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 364011011} + m_HandleRect: {fileID: 364011010} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &385256438 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 385256435} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &385256439 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 385256435} + m_CullTransparentMesh: 0 +--- !u!1 &491854708 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 491854709} + - component: {fileID: 491854712} + - component: {fileID: 491854711} + - component: {fileID: 491854710} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &491854709 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 491854708} + 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_Children: + - {fileID: 2004723107} + m_Father: {fileID: 165394804} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &491854710 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 491854708} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &491854711 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 491854708} + m_CullTransparentMesh: 0 +--- !u!114 &491854712 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 491854708} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!1 &492172209 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 492172210} + - component: {fileID: 492172213} + - component: {fileID: 492172212} + - component: {fileID: 492172211} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &492172210 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 492172209} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 0.19999999, y: 0.19999999, z: 0.19999999} + m_Children: [] + m_Father: {fileID: 638795628} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &492172211 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 492172209} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &492172212 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 492172209} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &492172213 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 492172209} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &536738627 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 536738628} + m_Layer: 0 + m_Name: Progress + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &536738628 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 536738627} + 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_Children: [] + m_Father: {fileID: 168782043} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &540661107 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 540661111} + - component: {fileID: 540661110} + - component: {fileID: 540661109} + - component: {fileID: 540661108} + - component: {fileID: 540661112} + - component: {fileID: 540661113} + - component: {fileID: 540661114} + m_Layer: 0 + m_Name: Cube A + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &540661108 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 540661107} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &540661109 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 540661107} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 2100000, guid: 2d0f2f374d40b044cad99564f6499b66, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &540661110 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 540661107} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &540661111 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 540661107} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1770791380} + m_Father: {fileID: 1569524829} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!82 &540661112 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 540661107} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: b0fec8744b503ce47b10824d221e0727, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 0.8 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!114 &540661113 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 540661107} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 707a12fe3b5f46afa91e26f91d81b0ef, type: 3} + m_Name: + m_EditorClassIdentifier: + message: {fileID: 114087278996602626, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} +--- !u!114 &540661114 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 540661107} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3c2f7fb44e844d968edd605a04aa2f80, type: 3} + m_Name: + m_EditorClassIdentifier: + Clicked: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 540661113} + m_MethodName: TriggerEvent + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 540661112} + m_MethodName: Play + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + MouseEntered: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + MouseExited: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!4 &606059359 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4628888185422042, guid: f124838f11137ef4fade04d0ac972bc6, + type: 2} + m_PrefabInternal: {fileID: 1838933567} +--- !u!1 &636989485 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 636989486} + - component: {fileID: 636989487} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &636989486 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 636989485} + 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_Children: + - {fileID: 1634999306} + m_Father: {fileID: 796071486} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &636989487 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 636989485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5e67e2cca44e86b9b488f72160885e, type: 3} + m_Name: + m_EditorClassIdentifier: + sources: + - {fileID: 168782044} + nextMessageSource: {fileID: 796071488} + autoPopulate: 0 + enableForNextMessage: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1634999305} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + disableForNextMessage: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1634999305} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!1 &638795627 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 638795628} + - component: {fileID: 638795629} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &638795628 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 638795627} + 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_Children: + - {fileID: 492172210} + m_Father: {fileID: 136464907} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &638795629 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 638795627} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5e67e2cca44e86b9b488f72160885e, type: 3} + m_Name: + m_EditorClassIdentifier: + sources: + - {fileID: 168782044} + nextMessageSource: {fileID: 136464909} + autoPopulate: 0 + enableForNextMessage: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 492172209} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + disableForNextMessage: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 492172209} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!1 &787784669 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 787784673} + - component: {fileID: 787784672} + - component: {fileID: 787784671} + - component: {fileID: 787784670} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &787784670 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 787784669} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &787784671 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 787784669} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 1 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1920, y: 1080} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &787784672 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 787784669} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &787784673 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 787784669} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 375966259} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &796071482 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 796071486} + - component: {fileID: 796071485} + - component: {fileID: 796071484} + - component: {fileID: 796071483} + - component: {fileID: 796071487} + - component: {fileID: 796071488} + - component: {fileID: 796071489} + m_Layer: 0 + m_Name: Cube E + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &796071483 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 796071482} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &796071484 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 796071482} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 2100000, guid: 156bb662bf805ff4293c7bedc3c3082d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &796071485 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 796071482} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &796071486 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 796071482} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.844, y: 1, z: -4.806} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 636989486} + m_Father: {fileID: 1569524829} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!82 &796071487 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 796071482} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: b0fec8744b503ce47b10824d221e0727, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1.4 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!114 &796071488 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 796071482} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 707a12fe3b5f46afa91e26f91d81b0ef, type: 3} + m_Name: + m_EditorClassIdentifier: + message: {fileID: 114979598298759166, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} +--- !u!114 &796071489 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 796071482} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3c2f7fb44e844d968edd605a04aa2f80, type: 3} + m_Name: + m_EditorClassIdentifier: + Clicked: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 796071488} + m_MethodName: TriggerEvent + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 796071487} + m_MethodName: Play + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + MouseEntered: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + MouseExited: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!1 &945075559 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 945075561} + - component: {fileID: 945075560} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &945075560 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 945075559} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &945075561 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 945075559} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1079922266 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1079922267} + - component: {fileID: 1079922268} + m_Layer: 0 + m_Name: Failure + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1079922267 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1079922266} + 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_Children: [] + m_Father: {fileID: 168782043} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!82 &1079922268 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1079922266} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: 1ad39a45585989f4bb1a2e1be5b5a46d, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &1087091967 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1087091968} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1087091968 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1087091967} + 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_Children: + - {fileID: 1871891755} + m_Father: {fileID: 146596267} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1088321518 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1088321519} + - component: {fileID: 1088321520} + m_Layer: 0 + m_Name: Success + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1088321519 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1088321518} + 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_Children: [] + m_Father: {fileID: 168782043} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!82 &1088321520 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1088321518} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: eea9c093ac8487942b9278ef0c512c40, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &1163547442 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1163547443} + - component: {fileID: 1163547444} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1163547443 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1163547442} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 0.19999999, y: 0.19999999, z: 0.19999999} + m_Children: + - {fileID: 1982592445} + m_Father: {fileID: 1299307874} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1163547444 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1163547442} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5e67e2cca44e86b9b488f72160885e, type: 3} + m_Name: + m_EditorClassIdentifier: + sources: + - {fileID: 168782044} + nextMessageSource: {fileID: 1299307876} + autoPopulate: 0 + enableForNextMessage: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1982592444} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + disableForNextMessage: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1982592444} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!1 &1202807401 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1202807407} + - component: {fileID: 1202807406} + - component: {fileID: 1202807405} + - component: {fileID: 1202807404} + - component: {fileID: 1202807403} + - component: {fileID: 1202807402} + m_Layer: 0 + m_Name: ButtonCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1202807402 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1202807401} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 707a12fe3b5f46afa91e26f91d81b0ef, type: 3} + m_Name: + m_EditorClassIdentifier: + message: {fileID: 114683655999235588, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} +--- !u!114 &1202807403 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1202807401} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3c2f7fb44e844d968edd605a04aa2f80, type: 3} + m_Name: + m_EditorClassIdentifier: + Clicked: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1202807402} + m_MethodName: TriggerEvent + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + MouseEntered: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + MouseExited: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!65 &1202807404 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1202807401} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1202807405 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1202807401} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1202807406 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1202807401} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1202807407 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1202807401} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 3.3839302, y: -0.35, z: -1.9372907} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1569524829} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1223395833 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 491854709} + m_Modifications: + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114720927400143124, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114720927400143124, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224160305383547462, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224160305383547462, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224160305383547462, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224160305383547462, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224160305383547462, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 154207b2fe8edf6469479d563d3e8e59, type: 2} + m_IsPrefabAsset: 0 +--- !u!1 &1299307870 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1299307874} + - component: {fileID: 1299307873} + - component: {fileID: 1299307872} + - component: {fileID: 1299307871} + - component: {fileID: 1299307875} + - component: {fileID: 1299307876} + - component: {fileID: 1299307877} + m_Layer: 0 + m_Name: Cube C + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &1299307871 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1299307870} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1299307872 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1299307870} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 2100000, guid: cdcd9310224fa424bb696b3a16069566, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1299307873 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1299307870} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1299307874 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1299307870} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5, y: 1, z: -4.734} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1163547443} + m_Father: {fileID: 1569524829} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!82 &1299307875 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1299307870} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: b0fec8744b503ce47b10824d221e0727, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!114 &1299307876 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1299307870} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 707a12fe3b5f46afa91e26f91d81b0ef, type: 3} + m_Name: + m_EditorClassIdentifier: + message: {fileID: 114505920661840866, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} +--- !u!114 &1299307877 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1299307870} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3c2f7fb44e844d968edd605a04aa2f80, type: 3} + m_Name: + m_EditorClassIdentifier: + Clicked: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1299307876} + m_MethodName: TriggerEvent + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1299307875} + m_MethodName: Play + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + MouseEntered: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + MouseExited: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!1 &1471210920 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1471210924} + - component: {fileID: 1471210923} + - component: {fileID: 1471210922} + - component: {fileID: 1471210921} + - component: {fileID: 1471210925} + - component: {fileID: 1471210926} + - component: {fileID: 1471210927} + m_Layer: 0 + m_Name: Cube B + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &1471210921 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1471210920} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1471210922 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1471210920} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 2100000, guid: 613e8da578a66c94f8d7dd6e9c35cfef, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1471210923 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1471210920} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1471210924 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1471210920} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5, y: 1, z: -2.097} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 159285980} + m_Father: {fileID: 1569524829} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!82 &1471210925 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1471210920} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: b0fec8744b503ce47b10824d221e0727, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 0.9 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!114 &1471210926 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1471210920} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 707a12fe3b5f46afa91e26f91d81b0ef, type: 3} + m_Name: + m_EditorClassIdentifier: + message: {fileID: 114531965955044376, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} +--- !u!114 &1471210927 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1471210920} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3c2f7fb44e844d968edd605a04aa2f80, type: 3} + m_Name: + m_EditorClassIdentifier: + Clicked: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1471210926} + m_MethodName: TriggerEvent + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1471210925} + m_MethodName: Play + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + MouseEntered: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + MouseExited: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!1 &1569524828 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1569524829} + m_Layer: 0 + m_Name: Scenery + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1569524829 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1569524828} + 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_Children: + - {fileID: 1202807407} + - {fileID: 540661111} + - {fileID: 1471210924} + - {fileID: 1299307874} + - {fileID: 136464907} + - {fileID: 796071486} + - {fileID: 1672648496} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1634999305 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1634999306} + - component: {fileID: 1634999309} + - component: {fileID: 1634999308} + - component: {fileID: 1634999307} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1634999306 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1634999305} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 0.19999999, y: 0.19999999, z: 0.19999999} + m_Children: [] + m_Father: {fileID: 636989486} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1634999307 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1634999305} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1634999308 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1634999305} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1634999309 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1634999305} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1672648492 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1672648496} + - component: {fileID: 1672648495} + - component: {fileID: 1672648494} + - component: {fileID: 1672648493} + m_Layer: 0 + m_Name: Floor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!64 &1672648493 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1672648492} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Convex: 0 + m_CookingOptions: 14 + m_SkinWidth: 0.01 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1672648494 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1672648492} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1672648495 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1672648492} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1672648496 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1672648492} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 100, y: 1, z: 100} + m_Children: [] + m_Father: {fileID: 1569524829} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1743168502 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1743168503} + - component: {fileID: 1743168506} + - component: {fileID: 1743168505} + - component: {fileID: 1743168504} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1743168503 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1743168502} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 0.2, y: 0.2, z: 0.2} + m_Children: [] + m_Father: {fileID: 1770791380} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1743168504 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1743168502} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1743168505 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1743168502} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1743168506 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1743168502} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1770791379 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1770791380} + - component: {fileID: 1770791381} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1770791380 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1770791379} + 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_Children: + - {fileID: 1743168503} + m_Father: {fileID: 540661111} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1770791381 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1770791379} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5e67e2cca44e86b9b488f72160885e, type: 3} + m_Name: + m_EditorClassIdentifier: + sources: + - {fileID: 168782044} + nextMessageSource: {fileID: 540661113} + autoPopulate: 0 + enableForNextMessage: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1743168502} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + disableForNextMessage: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1743168502} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!1 &1771014849 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1771014850} + - component: {fileID: 1771014851} + - component: {fileID: 1771014852} + m_Layer: 0 + m_Name: ButtonStateHandler + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1771014850 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1771014849} + 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_Children: + - {fileID: 1816184698} + - {fileID: 2089696630} + m_Father: {fileID: 2005220181} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1771014851 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1771014849} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8f0a408106974c8d87c1327fb3471f9b, type: 3} + m_Name: + m_EditorClassIdentifier: + Messages: + - {fileID: 114683655999235588, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + matchComplete: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1816184699} + m_MethodName: Play + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + matchFailed: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2089696631} + m_MethodName: Play + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + matchMode: 1 +--- !u!114 &1771014852 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1771014849} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7fb333aa63754b08a8a3c8327964d16b, type: 3} + m_Name: + m_EditorClassIdentifier: + stateChain: {fileID: 1771014851} + successMessage: {fileID: 114969602861105628, guid: c01cc92f4088c6e4abcd3830c0002c24, + type: 2} +--- !u!1 &1816184697 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1816184698} + - component: {fileID: 1816184699} + m_Layer: 0 + m_Name: Success + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1816184698 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1816184697} + 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_Children: [] + m_Father: {fileID: 1771014850} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!82 &1816184699 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1816184697} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: eea9c093ac8487942b9278ef0c512c40, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &1824248532 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1824248533} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1824248533 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1824248532} + 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_Children: + - {fileID: 364011010} + m_Father: {fileID: 385256436} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1001 &1838933567 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + propertyPath: m_LocalRotation.y + value: 0.9659258 + objectReference: {fileID: 0} + - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + propertyPath: m_LocalRotation.w + value: 0.2588191 + objectReference: {fileID: 0} + - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 1244723767573728, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + propertyPath: m_Name + value: Player + objectReference: {fileID: 0} + - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + propertyPath: m_LocalEulerAnglesHint.y + value: 150 + objectReference: {fileID: 0} + - target: {fileID: 114571473726663984, guid: f124838f11137ef4fade04d0ac972bc6, + type: 2} + propertyPath: head + value: + objectReference: {fileID: 606059359} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + m_IsPrefabAsset: 0 +--- !u!1 &1871891754 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1871891755} + - component: {fileID: 1871891757} + - component: {fileID: 1871891756} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1871891755 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1871891754} + 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_Children: [] + m_Father: {fileID: 1087091968} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1871891756 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1871891754} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &1871891757 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1871891754} + m_CullTransparentMesh: 0 +--- !u!1 &1909489377 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1909489380} + - component: {fileID: 1909489379} + - component: {fileID: 1909489378} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1909489378 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1909489377} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1909489379 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1909489377} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &1909489380 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1909489377} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1982592444 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1982592445} + - component: {fileID: 1982592448} + - component: {fileID: 1982592447} + - component: {fileID: 1982592446} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1982592445 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1982592444} + 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_Children: [] + m_Father: {fileID: 1163547443} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &1982592446 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1982592444} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1982592447 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1982592444} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1982592448 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1982592444} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!224 &2004723107 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + m_PrefabInternal: {fileID: 1223395833} +--- !u!114 &2004723108 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114400973501864318, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 2} + m_PrefabInternal: {fileID: 1223395833} + m_Script: {fileID: 11500000, guid: 5dabfd477c564c518af7ad4e2362742a, type: 3} +--- !u!1 &2005220180 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2005220181} + - component: {fileID: 2005220182} + m_Layer: 0 + m_Name: StateHandlers + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2005220181 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2005220180} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.3839302, y: -0.5588294, z: -1.9372907} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 168782043} + - {fileID: 1771014850} + - {fileID: 121474008} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2005220182 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2005220180} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 731ae49d9a7e44078b9e9300c6c829c2, type: 3} + m_Name: + m_EditorClassIdentifier: + tutorialStateTrackers: + - {fileID: 168782042} + - {fileID: 1771014852} + - {fileID: 121474010} + tutorialSteps: {fileID: 2004723108} +--- !u!1 &2089696629 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2089696630} + - component: {fileID: 2089696631} + m_Layer: 0 + m_Name: Failure + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2089696630 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2089696629} + 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_Children: [] + m_Father: {fileID: 1771014850} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!82 &2089696631 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2089696629} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: 1ad39a45585989f4bb1a2e1be5b5a46d, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 diff --git a/Assets/Plugins/Scenes/TutorialAssembly.unity.meta b/Assets/Plugins/Scenes/TutorialAssembly.unity.meta new file mode 100644 index 0000000..8f1a12c --- /dev/null +++ b/Assets/Plugins/Scenes/TutorialAssembly.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d8f8698187927e7458c0c8eb98a938eb +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scenes/piano.wav b/Assets/Plugins/Scenes/piano.wav new file mode 100644 index 0000000000000000000000000000000000000000..27a9fb735de389c04e7afef334c00c0b6cb86831 GIT binary patch literal 768328 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�^W5ao-tPCfwskjB6?u{5eD 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

WFD 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 JzbuYjVuVk_?Gi14OAVb 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%0A0sxfp(n?K=;KQ(-s*W;5Y6F~PC1Yc_J# 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�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 H{HOl_eaTWU literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Scenes/piano.wav.meta b/Assets/Plugins/Scenes/piano.wav.meta new file mode 100644 index 0000000..2e0606d --- /dev/null +++ b/Assets/Plugins/Scenes/piano.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: b0fec8744b503ce47b10824d221e0727 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scenes/slam.wav b/Assets/Plugins/Scenes/slam.wav new file mode 100644 index 0000000000000000000000000000000000000000..61a68e167980510bff734560310881c282294767 GIT binary patch literal 619352 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%0DJIS7pj64-L>LvAt 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

>dhqF|__O{haB1 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

aZlOt(fhetU8AK#pSqt( zRZ$DT+f~hx96)qI2|tUZq><7abE$$58q-LEo;~Av~|?Kb_AG*h_KJ zxi{fG?xWJWC!O!j_x4QhMcprLdS5=3LtN!T3uhaZb>0)k6THHw?8Q6`z|;7Tl1FoH z*i7=uPS}NTb3L+~uH7eZ^Fg-RBG+Bgh4dpGVmre0i@s$S*-4bX0$rxZ%`rmZ;}%f! zkA$K9RKyEAi_U%fkf5P>*M&>pyHM}(?IW@y@#T|kg8YMWWk<@Y+>j0NC3wST0zSr5 z{NB9PHXmx*3>mVA{BHVBC-SH1T0Z`L_g%7Pono#{^-cAU`l&ii9ao)>s$2cp|4f^w zHqvn)IBh6soE|kkA8jmOoUwY>+Fxjx*XDurPE@-Le7Ctis6XwD+5qZvWvG5`K8iA{ zOVzRJQFD**N!^+4;v;^tFTBQcwxXWNKGJ)>k6g*u+$-`=chg04<>+Di;B;18d*M8L zot|c%-DfR)=7M>WU@l&BCe4#HKd(8HQSs(On!ksdFIhVCETQ-He)IW4dlcCdsy&Lz zFZ;-@=)JNjBb`pK^Zoe=buE8FXY=jpE1n+xaek9OOb+ywY=Eq$u9{;+Uu#!sTg|ye zwe85CK4=@F$G?-ptbcPqKWS@A)((u;{`0Nb#%tb{e95OdQgm#aNwxhKpUxFun+|Os zJ36TB^zfPmyaIYyorjlvxH^(v;;}IOOh>Qe)A{!NO6{TM>*e?JInn9>KEL`rKgHiy z7l>;vqp*1BJKjepd@t}H;od)$Lp3$S(#*L>@I)%r0UOSs? zfGj|KvW$}347-+&ti_}BvM^d$I_Z0Vx}9H^w|w;sD@VvaP{_xlwKdS%4f(Ix7QoYh zm$j#AD@ZFI3P8kqqK1o9Z_cJMXtwzeCwLd#!HD zrqu`YH+yxJ`lI>;RnI_mmHMdpXy%TExwoi(ggN)q{6lg28HCM$bKktT($xoXoD0`` z^+|y5HP^BEam|OTzXGj3m2c&!PDJaIzzaUFy1U=Evrgp4_))qG`6hB84|1WS$%rl{ zyL66h$-QS2Y%D;%y);zX1`<)h5Cp~_^b-zuTx15j4 zH|0Cges`diBU{Nf=yyEeckl&&@Tz(XKk=0wS6>}}RE68)gJ z^o9PI>xeejF?~hFrJG$hH!>ZZ*WS~6eaAQZUhTJRCtakEfj+Xs+KlOBWu7{D)Jwj! zIyL`^uk@0y#A|#H)AtDH_xQWyNf+rM8P7U0-J^@udFdZYXVO8G{&k%$qT2G(3a4+y zi5GS+l%{KGz`N)7>1uT{D(|4)k187|t1{=)=_?`~ z@I=tUgTEQTM9<$_EqK$w1>A2!X@t9$uIp!=c5&VQ`~50} z7WP}yZ`uj>{JsUhKhb$+x_8Vo!~H%E<)QM(o8PQpJsPy&L9&~&!882Aqc8E>e^b+P~NRQRVHPv+^tz{ zFW&fMU2A*qS}$r}T70%<)U~y-tr>3psI{YH2iDVCL)!XUvbBzMBKfx_7q!kbYMpLt zbz6g4TIsq!<9w%h&!k)Q39R*<>wV=_{$c8r@+$w_`x&p&iFlg~rYu{NJ@?_YUc3F3 zt>tcC=I^@jT^H=R``ruQv(UQz_SdxrAKEhjedE4w>`$znWm{)|+~c)9aieoT-1fdL z&OQgN!*|a!$9;Hb++4#y*Y*py=6|krm(SL`SB}=cx1T_J3fqsMeGKpetcABnar+dv z2ev)2k89#zzxL2>U3|7kHrWZevES@Eo1V5o#@RzOyJ+3F>+~Z#;d9a(G?ea!d{Oqu zCl$_4TPNPko^y?|2k!;p0R-j1^2z9cllP|L*tqJ#3yBpSMh`mwC6|raj=iV?a#q>@(;q(ri9y*Bb!6n zA@CtTxxjy*?3JAg+p7ZDdA8nu(Wra*2hSBZeS!Gi-#5G;TtnCLQ@HzRe$M^&QK>A- zmhXrkXnSbnN7F5QPDh2wBiWNB*`aJCdtobcuZ{NHU{h>s*5lRP)xGWOkY8cH*)+

+ /// A simple example of an aggregator function. This behaviour listens for + /// incoming events that match the given message. + /// + public class EventMessageCounter : EventMessageAggregator + { + readonly HashSet messagePool; + [SerializeField] int targetCount; + + public EventMessageCounter() + { + messagePool = new HashSet(); + } + + public int Count { get; set; } + + protected override void RegisterValidMessage(BasicEventStreamMessage m) + { + messagePool.Add(m); + } + + public override void ResetMatch() + { + MatchResult = EventMessageMatcherState.Waiting; + Count = 0; + } + + public override List ListEvents(List buffer) + { + if (buffer == null) + { + buffer = new List(Messages.Count); + } + else + { + buffer.Clear(); + buffer.Capacity = Math.Max(buffer.Capacity, Messages.Count); + } + + var completed = MatchResult == EventMessageMatcherState.Success; + var expected = MatchResult == EventMessageMatcherState.Waiting; + foreach (var m in Messages) + { + buffer.Add(new EventMessageState(m, completed, expected)); + } + + return buffer; + } + + protected override bool OnEventReceived(BasicEventStreamMessage received) + { + if (messagePool.Contains(received)) + { + Count += 1; + if (targetCount == Count) + { + MatchResult = EventMessageMatcherState.Success; + MatchComplete?.Invoke(); + } + + return true; + } + + return false; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Aggregators/EventMessageCounter.cs.meta b/Assets/Plugins/Scripts/Aggregators/EventMessageCounter.cs.meta new file mode 100644 index 0000000..4c73b81 --- /dev/null +++ b/Assets/Plugins/Scripts/Aggregators/EventMessageCounter.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 681f3afe2d0a4d42ac2722dbbb129213 +timeCreated: 1546191297 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Aggregators/EventSequenceAggregator.cs b/Assets/Plugins/Scripts/Aggregators/EventSequenceAggregator.cs new file mode 100644 index 0000000..5054aca --- /dev/null +++ b/Assets/Plugins/Scripts/Aggregators/EventSequenceAggregator.cs @@ -0,0 +1,143 @@ +using System; +using System.Collections.Generic; +using NaughtyAttributes; +using TutorialSystem.Events; +using UnityEngine; +using UnityEngine.Events; + +namespace TutorialSystem.Aggregators +{ + /// + /// A event sequence matcher. The matcher checks incoming events against a + /// predefined sequence of events. If the matching is strict, any incoming event + /// that does not match the expected event will mark the sequence as failed. + /// A non-strict matcher will simply ignore events that do not match and will + /// patiently wait until it sees a next suitable event. Non-strict matchers will + /// never fire a match-failed event. + /// + public class EventSequenceAggregator : EventMessageAggregator + { + public enum ValidationMode + { + Lenient, + AllowOutOfOrderEvents, + Strict + } + + readonly List validMessages; + readonly List matchState; + + [SerializeField] UnityEvent matchFailed; + [SerializeField] ValidationMode mode; + [ShowNonSerializedField] int nextEvent; + + public EventSequenceAggregator() + { + validMessages = new List(); + matchState = new List(); + } + + protected override void RegisterValidMessage(BasicEventStreamMessage m) + { + validMessages.Add(m); + matchState.Add(false); + } + + public override void ResetMatch() + { + nextEvent = 0; + MatchResult = EventMessageMatcherState.Waiting; + + for (var i = 0; i < matchState.Count; i++) + { + matchState[i] = false; + } + } + + public override List ListEvents(List buffer) + { + if (buffer == null) + { + buffer = new List(validMessages.Count); + } + else + { + buffer.Clear(); + buffer.Capacity = Math.Max(buffer.Capacity, Messages.Count); + } + + for (var index = 0; index < validMessages.Count; index++) + { + var m = validMessages[index]; + buffer.Add(new EventMessageState(m, matchState[index], enabled && (index == nextEvent))); + } + + return buffer; + } + + protected override bool OnEventReceived(BasicEventStreamMessage messageReceived) + { + if (nextEvent >= validMessages.Count) + { + return false; + } + + var nextEventMessage = validMessages[nextEvent]; + if (messageReceived == nextEventMessage) + { + matchState[nextEvent] = true; + nextEvent = FindNextOpenEvent(); + if (nextEvent == validMessages.Count) + { + MatchResult = EventMessageMatcherState.Success; + MatchComplete?.Invoke(); + } + + return true; + } + + if (mode == ValidationMode.AllowOutOfOrderEvents) + { + for (var idx = nextEvent + 1; idx < validMessages.Count; idx += 1) + { + var msg = validMessages[idx]; + if (!msg.AllowOutOfOrderExecution) + { + break; + } + + if (msg == messageReceived) + { + if (!matchState[idx]) + { + matchState[idx] = true; + return true; + } + } + } + } + + if (mode == ValidationMode.Strict) + { + MatchResult = EventMessageMatcherState.Failure; + matchFailed?.Invoke(); + return true; + } + + return false; + } + + int FindNextOpenEvent() + { + for (var idx = nextEvent + 1; idx < validMessages.Count; idx += 1) + { + if (matchState[idx] == false) + { + return idx; + } + } + + return validMessages.Count; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Aggregators/EventSequenceAggregator.cs.meta b/Assets/Plugins/Scripts/Aggregators/EventSequenceAggregator.cs.meta new file mode 100644 index 0000000..2eb5db7 --- /dev/null +++ b/Assets/Plugins/Scripts/Aggregators/EventSequenceAggregator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dfb04f096c9c4ca387330c23be4262f1 +timeCreated: 1546192635 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Aggregators/EventSetAggregator.cs b/Assets/Plugins/Scripts/Aggregators/EventSetAggregator.cs new file mode 100644 index 0000000..a967765 --- /dev/null +++ b/Assets/Plugins/Scripts/Aggregators/EventSetAggregator.cs @@ -0,0 +1,119 @@ +using System; +using System.Collections.Generic; +using TutorialSystem.Events; +using UnityEngine; +using UnityEngine.Events; + +namespace TutorialSystem.Aggregators +{ + /// + /// A aggregator that waits for all events to occur. The events can + /// occur in any order. If strict mode is enabled, a non-matching + /// event will fail this aggregator. + /// + public class EventSetAggregator : EventMessageAggregator + { + public enum MatchMode + { + Lenient, + IgnoreDuplicates, + Strict + } + + readonly Dictionary matchState; + readonly List messages; + + [SerializeField] UnityEvent matchFailed; + [SerializeField] MatchMode matchMode; + int matchCount; + + public EventSetAggregator() + { + matchState = new Dictionary(); + messages = new List(); + } + + protected override void RegisterValidMessage(BasicEventStreamMessage m) + { + if (matchState.ContainsKey(m)) + { + return; + } + + messages.Add(m); + matchState[m] = false; + } + + public override void ResetMatch() + { + foreach (var k in matchState) + { + matchState[k.Key] = false; + } + + MatchResult = EventMessageMatcherState.Waiting; + matchCount = 0; + } + + protected override bool OnEventReceived(BasicEventStreamMessage messageReceived) + { + if (matchCount == matchState.Count) + { + return false; + } + + bool matching; + if (!matchState.TryGetValue(messageReceived, out matching)) + { + // no such element in the list of possible matches. + return false; + } + + if (matching) + { + if (matchMode == MatchMode.Strict) + { + MatchResult = EventMessageMatcherState.Failure; + matchFailed?.Invoke(); + return true; + } + + // repeated invocations of the same event should not trigger the alarm. + return false; + } + + matchState[messageReceived] = true; + matchCount += 1; + if (matchCount == matchState.Count) + { + MatchResult = EventMessageMatcherState.Success; + MatchComplete?.Invoke(); + } + + return true; + } + + public override List ListEvents(List buffer) + { + if (buffer == null) + { + buffer = new List(messages.Count); + } + else + { + buffer.Clear(); + buffer.Capacity = Math.Max(buffer.Capacity, messages.Count); + } + + for (var index = 0; index < messages.Count; index++) + { + var m = messages[index]; + bool matchCompleted; + matchState.TryGetValue(m, out matchCompleted); + buffer.Add(new EventMessageState(m, matchCompleted, enabled && !matchCompleted)); + } + + return buffer; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Aggregators/EventSetAggregator.cs.meta b/Assets/Plugins/Scripts/Aggregators/EventSetAggregator.cs.meta new file mode 100644 index 0000000..73a3f7d --- /dev/null +++ b/Assets/Plugins/Scripts/Aggregators/EventSetAggregator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8f0a408106974c8d87c1327fb3471f9b +timeCreated: 1546194648 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Aggregators/IEventMessageAggregator.cs b/Assets/Plugins/Scripts/Aggregators/IEventMessageAggregator.cs new file mode 100644 index 0000000..cf87edd --- /dev/null +++ b/Assets/Plugins/Scripts/Aggregators/IEventMessageAggregator.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using TutorialSystem.Events; +using UnityEngine.Events; + +namespace TutorialSystem.Aggregators +{ + public enum EventMessageMatcherState + { + Waiting, + Success, + Failure + } + + public struct EventMessageState + { + public readonly BasicEventStreamMessage Message; + public readonly bool Completed; + public readonly bool ExpectedNext; + + public EventMessageState(BasicEventStreamMessage message, bool completed, bool expectedNext) + { + if (message == null) + { + throw new ArgumentNullException(nameof(message)); + } + + Message = message; + Completed = completed; + ExpectedNext = expectedNext; + } + } + + public interface IEventMessageAggregator + { + UnityEvent MatchComplete { get; } + MatchProgressEvent MatchProgress { get; } + + EventMessageMatcherState MatchResult { get; } + + List ListEvents(List buffer); + void ResetMatch(); + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Aggregators/IEventMessageAggregator.cs.meta b/Assets/Plugins/Scripts/Aggregators/IEventMessageAggregator.cs.meta new file mode 100644 index 0000000..6f39f45 --- /dev/null +++ b/Assets/Plugins/Scripts/Aggregators/IEventMessageAggregator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5d52b262cfc940eaa2cc2b224d9e9be2 +timeCreated: 1546273478 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Aggregators/OneOfEventSetAggregator.cs b/Assets/Plugins/Scripts/Aggregators/OneOfEventSetAggregator.cs new file mode 100644 index 0000000..22df8ad --- /dev/null +++ b/Assets/Plugins/Scripts/Aggregators/OneOfEventSetAggregator.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using TutorialSystem.Events; + +namespace TutorialSystem.Aggregators +{ + /// + /// A reactor component that waits for any of the given messages and fires a + /// success message if at least one of the listed messages has been encountered. + /// + public class OneOfEventSetAggregator : EventMessageAggregator + { + readonly List messages; + readonly HashSet matchState; + int matchCount; + + public OneOfEventSetAggregator() + { + matchState = new HashSet(); + messages = new List(); + } + + protected override void RegisterValidMessage(BasicEventStreamMessage m) + { + if (matchState.Add(m)) + { + messages.Add(m); + } + } + + public override void ResetMatch() + { + MatchResult = EventMessageMatcherState.Waiting; + matchCount = 0; + } + + protected override bool OnEventReceived(BasicEventStreamMessage messageReceived) + { + if (matchCount > 0) + { + return false; + } + + if (matchState.Contains(messageReceived)) + { + MatchResult = EventMessageMatcherState.Success; + MatchComplete?.Invoke(); + + matchCount += 1; + return true; + } + + return false; + } + + public override List ListEvents(List buffer) + { + if (buffer == null) + { + buffer = new List(messages.Count); + } + else + { + buffer.Clear(); + buffer.Capacity = Math.Max(buffer.Capacity, messages.Count); + } + + var next = MatchResult == EventMessageMatcherState.Waiting; + var completed = MatchResult == EventMessageMatcherState.Success; + foreach (var m in messages) + { + buffer.Add(new EventMessageState(m, completed, enabled && next)); + } + + return buffer; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Aggregators/OneOfEventSetAggregator.cs.meta b/Assets/Plugins/Scripts/Aggregators/OneOfEventSetAggregator.cs.meta new file mode 100644 index 0000000..93f63c5 --- /dev/null +++ b/Assets/Plugins/Scripts/Aggregators/OneOfEventSetAggregator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4b936e148a754716a66b12da9c791232 +timeCreated: 1546272706 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Events.meta b/Assets/Plugins/Scripts/Events.meta new file mode 100644 index 0000000..dc941ff --- /dev/null +++ b/Assets/Plugins/Scripts/Events.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2d6107e4f8a94ce689a8e8c4b0f73e71 +timeCreated: 1546191053 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Events/BasicEventStream.cs b/Assets/Plugins/Scripts/Events/BasicEventStream.cs new file mode 100644 index 0000000..e063e0d --- /dev/null +++ b/Assets/Plugins/Scripts/Events/BasicEventStream.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using JetBrains.Annotations; +using NaughtyAttributes; +using UnityEngine; +using UnityEngine.Events; + +namespace TutorialSystem.Events +{ + /// + /// A event stream receives and aggregates preconfigured messages. + /// For each message received the object maintains a counter. + /// Messages are normally generated by game objects in response to + /// state changes or events. + /// + [CreateAssetMenu(menuName = "Event Stream/Event Stream")] + public class BasicEventStream : ScriptableObject + { + [NonSerialized] readonly List queuedMessages; + [SerializeField] bool ignoreForNextEventIndicatorHint; + + [SerializeField] [ReorderableList] List messageTypes; + [NonSerialized] bool processingMessage; + + public BasicEventStream() + { + messageTypes = new List(); + receivedEvent = new EventStreamReceivedEvent(); + queuedMessages = new List(); + processingMessage = false; + } + + public bool IgnoreForNextEventIndicatorHint => ignoreForNextEventIndicatorHint; + + bool IsValidMessage(string messageName) + { + return messageTypes.Contains(messageName); + } + + public virtual bool IsValidMessage(BasicEventStreamMessage msg) + { + return IsValidMessage(msg.name); + } + + void Awake() + { + processingMessage = false; + } + + [Button("Generate Message Handles")] + [UsedImplicitly] + internal void Regenerate() + { + var retainedNodes = BasicEventStreamEditorSupport.CleanGraph(this); + var generatedNodes = new List(); + Func factoryFn = CreateNode; + foreach (var node in messageTypes) + { + if (node == null) + { + continue; + } + + BasicEventStreamMessage streamNode; + if (retainedNodes.TryGetValue(node, out streamNode)) + { + streamNode.SetUpStream(this); + continue; + } + + var msg = factoryFn(); + msg.name = node; + msg.SetUpStream(this); + generatedNodes.Add(msg); + } + + BasicEventStreamEditorSupport.GenerateNodes(this, generatedNodes); + } + + protected virtual BasicEventStreamMessage CreateNode() + { + return CreateInstance(); + } + + public void Publish(BasicEventStreamMessage msg) + { + if (msg.Stream != this) + { + return; + } + + if (processingMessage) + { + if (queuedMessages.Count > 250) + { + Debug.LogError("More than 250 messages in a single cascade. Aborting."); + return; + } + + DebugLog("=== Queue message " + msg); + queuedMessages.Add(msg); + } + else + { + processingMessage = true; + try + { + DebugLog("=== Begin Publish message " + msg); + ReceivedEvent?.Invoke(msg); + DebugLog("=== End Publish message " + msg); + + for (var m = 0; m < queuedMessages.Count; m += 1) + { + var message = queuedMessages[m]; + DebugLog("=== Begin Publish queued message " + message); + ReceivedEvent?.Invoke(message); + DebugLog("=== End Publish queued message " + message); + } + + queuedMessages.Clear(); + } + finally + { + processingMessage = false; + } + } + } + + void DebugLog(string message) + { + // Debug.Log(message); + } + + #region ReceivedEvent + + /// + /// Unity cannot serialize or deserialize generic classes. So to use a generic class, + /// we have to derive a concrete (aka non-generic) subclass for it. Oh, well .. + /// + [UsedImplicitly] + public class EventStreamReceivedEvent : UnityEvent + { + } + + [SerializeField] EventStreamReceivedEvent receivedEvent; + public EventStreamReceivedEvent ReceivedEvent => receivedEvent; + + #endregion + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Events/BasicEventStream.cs.meta b/Assets/Plugins/Scripts/Events/BasicEventStream.cs.meta new file mode 100644 index 0000000..794e97f --- /dev/null +++ b/Assets/Plugins/Scripts/Events/BasicEventStream.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0efa5601f9e59ab4990baf4ac245a6dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scripts/Events/BasicEventStreamEditorSupport.cs b/Assets/Plugins/Scripts/Events/BasicEventStreamEditorSupport.cs new file mode 100644 index 0000000..ff45815 --- /dev/null +++ b/Assets/Plugins/Scripts/Events/BasicEventStreamEditorSupport.cs @@ -0,0 +1,87 @@ +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +#if UNITY_EDITOR + +#endif + +namespace TutorialSystem.Events +{ + public static class BasicEventStreamEditorSupport + { + /// + /// Removes all nodes that are no longer part of the graph's set of defined event types. + /// The list returned contains all retained nodes that continue to be valid. + /// + /// + /// + /// + public static Dictionary CleanGraph(BasicEventStream graph, + Dictionary retainedNodes = null) + { + if (retainedNodes == null) + { + retainedNodes = new Dictionary(); + } + +#if UNITY_EDITOR + if (graph == null) + { + Debug.Log("Not a graph"); + return retainedNodes; + } + + var assetPath = AssetDatabase.GetAssetPath(graph); + foreach (var asset in AssetDatabase.LoadAllAssetsAtPath(assetPath)) + { + if (asset == null) + { + continue; + } + + if (asset == graph) + { + continue; + } + + + var node = asset as BasicEventStreamMessage; + if (node != null) + { + if (graph.IsValidMessage(node)) + { + Debug.Log("Retained asset " + asset + " of type " + asset.GetType()); + retainedNodes.Add(node.name, node); + } + else + { + Debug.LogWarning("Destroyed asset " + node); + Object.DestroyImmediate(node, true); + } + } + else + { + Debug.LogWarning("Destroyed foreign asset " + asset); + Object.DestroyImmediate(asset, true); + } + } +#endif + return retainedNodes; + } + + public static void GenerateNodes(BasicEventStream basicEventStream, + List generatedNodes) + { +#if UNITY_EDITOR + foreach (var n in generatedNodes) + { + EditorUtility.SetDirty(n); + AssetDatabase.AddObjectToAsset(n, basicEventStream); + } + + EditorUtility.SetDirty(basicEventStream); +#endif + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Events/BasicEventStreamEditorSupport.cs.meta b/Assets/Plugins/Scripts/Events/BasicEventStreamEditorSupport.cs.meta new file mode 100644 index 0000000..7059a03 --- /dev/null +++ b/Assets/Plugins/Scripts/Events/BasicEventStreamEditorSupport.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d58ffcfc50c1437dabc7fb649e22d7e2 +timeCreated: 1546104978 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Events/BasicEventStreamMessage.cs b/Assets/Plugins/Scripts/Events/BasicEventStreamMessage.cs new file mode 100644 index 0000000..e053b33 --- /dev/null +++ b/Assets/Plugins/Scripts/Events/BasicEventStreamMessage.cs @@ -0,0 +1,32 @@ +using NaughtyAttributes; +using UnityEngine; + +namespace TutorialSystem.Events +{ + public class BasicEventStreamMessage : ScriptableObject + { + [SerializeField] [ReadOnly] BasicEventStream stream; + [SerializeField] bool allowOutOfOrderExecution; + + public bool AllowOutOfOrderExecution => allowOutOfOrderExecution; + + public BasicEventStream Stream + { + get { return stream; } + protected internal set { stream = value; } + } + + internal void SetUpStream(BasicEventStream eventStream) + { + stream = eventStream; + } + + public void Publish() + { + if (stream != null) + { + stream.Publish(this); + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Events/BasicEventStreamMessage.cs.meta b/Assets/Plugins/Scripts/Events/BasicEventStreamMessage.cs.meta new file mode 100644 index 0000000..b4c404c --- /dev/null +++ b/Assets/Plugins/Scripts/Events/BasicEventStreamMessage.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 83707740ea9a4854b2b1651e53c42c0b +timeCreated: 1546010922 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Events/LogEventStream.cs b/Assets/Plugins/Scripts/Events/LogEventStream.cs new file mode 100644 index 0000000..96b338c --- /dev/null +++ b/Assets/Plugins/Scripts/Events/LogEventStream.cs @@ -0,0 +1,35 @@ +using UnityEngine; + +namespace TutorialSystem.Events +{ + [CreateAssetMenu(menuName = "Event Stream/Logging")] + public class LogEventStream : ScriptableObject + { + [SerializeField] BasicEventStream stream; + [SerializeField] bool enabled; + + void OnDisable() + { + if (stream != null) + { + stream.ReceivedEvent.RemoveListener(OnEventReceived); + } + } + + void OnEventReceived(BasicEventStreamMessage message) + { + if (enabled) + { + Debug.Log(message); + } + } + + void OnEnable() + { + if (stream != null) + { + stream.ReceivedEvent.AddListener(OnEventReceived); + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Events/LogEventStream.cs.meta b/Assets/Plugins/Scripts/Events/LogEventStream.cs.meta new file mode 100644 index 0000000..04e86c2 --- /dev/null +++ b/Assets/Plugins/Scripts/Events/LogEventStream.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: eb241ac2c5a447599a51649ca12e622f +timeCreated: 1546186615 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Events/NextEventSelector.cs b/Assets/Plugins/Scripts/Events/NextEventSelector.cs new file mode 100644 index 0000000..6fdfa9a --- /dev/null +++ b/Assets/Plugins/Scripts/Events/NextEventSelector.cs @@ -0,0 +1,32 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace TutorialSystem.Events +{ + public class NextEventSelector : NextEventSelectorBase + { + [SerializeField] StreamEventSource nextMessageSource; + [SerializeField] bool autoPopulate; + [SerializeField] UnityEvent enableForNextMessage; + [SerializeField] UnityEvent disableForNextMessage; + + + public override StreamEventSource NextMessageSource => nextMessageSource; + + public override bool AutoPopulate => autoPopulate; + + public UnityEvent EnableForNextMessage => enableForNextMessage; + + public UnityEvent DisableForNextMessage => disableForNextMessage; + + protected override void OnEnableForNextMessage() + { + enableForNextMessage?.Invoke(); + } + + protected override void OnDisableForNextMessage() + { + disableForNextMessage?.Invoke(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Events/NextEventSelector.cs.meta b/Assets/Plugins/Scripts/Events/NextEventSelector.cs.meta new file mode 100644 index 0000000..2a4903b --- /dev/null +++ b/Assets/Plugins/Scripts/Events/NextEventSelector.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3a5e67e2cca44e86b9b488f72160885e +timeCreated: 1546273454 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Events/NextEventSelectorBase.cs b/Assets/Plugins/Scripts/Events/NextEventSelectorBase.cs new file mode 100644 index 0000000..c5eb51d --- /dev/null +++ b/Assets/Plugins/Scripts/Events/NextEventSelectorBase.cs @@ -0,0 +1,236 @@ +using System.Collections.Generic; +using TutorialSystem.Aggregators; +using UnityEngine; + +namespace TutorialSystem.Events +{ + public abstract class NextEventSelectorBase : MonoBehaviour + { + protected readonly HashSet effectiveSources; + [SerializeField] List sources; + [SerializeField] bool detailedDebugging; + List messageBuffer; + bool started; + + protected NextEventSelectorBase() + { + effectiveSources = new HashSet(); + messageBuffer = new List(); + sources = new List(); + } + + public abstract StreamEventSource NextMessageSource { get; } + + public abstract bool AutoPopulate { get; } + + protected virtual void PopulateSources() + { + foreach (var s in sources) + { + if (s != null) + { + effectiveSources.Add(s); + } + } + + if (AutoPopulate) + { + DebugLog("Start auto-populating " + name); + + var buffer = new List(); + var aggregator = SharedMethods.FindEvenInactiveComponents(true); + if (aggregator.Length == 0) + { + DebugLog("No aggregators found."); + } + + foreach (var s in aggregator) + { + if (s == null) + { + continue; + } + + if (IsValidMessageSource(s, buffer)) + { + effectiveSources.Add(s); + } + } + } + + DebugLog("After populate " + name + " contains " + effectiveSources.Count + " active sources."); + } + + void DebugLog(string message) + { + if (detailedDebugging) + { + Debug.Log(message); + } + } + + protected virtual bool IsValidMessageSource(EventMessageAggregator s, List buffer) + { + if (NextMessageSource == null) + { + Debug.LogWarning("No such message source"); + return false; + } + + buffer = s.ListEvents(buffer); + foreach (var b in buffer) + { + if (FilterMessage(b.Message)) + { + DebugLog("Filtered " + b.Message); + continue; + } + + if (NextMessageSource.WillGenerateMessage(b.Message)) + { + return true; + } + + DebugLog("No match for " + b.Message); + } + + DebugLog("Filtered " + s + " because " + buffer.Count + " " + s.enabled); + return false; + } + + protected virtual bool FilterMessage(BasicEventStreamMessage msg) + { + var stream = msg.Stream; + if (stream != null) + { + return stream.IgnoreForNextEventIndicatorHint; + } + + return false; + } + + void Start() + { + if (!started) + { + started = true; + PopulateSources(); + OnEnable(); + } + + OnMatchRestart(); + } + + protected virtual void OnEnableForNextMessage() + { + } + + protected virtual void OnDisableForNextMessage() + { + } + + + void OnMatchProgress(EventMessageAggregator source, BasicEventStreamMessage message) + { + if (!source.enabled) + { + return; + } + + if (FilterMessage(message)) + { + return; + } + + messageBuffer = source.ListEvents(messageBuffer); + var isMatch = false; + foreach (var m in messageBuffer) + { + if (m.ExpectedNext && NextMessageSource.WillGenerateMessage(m.Message)) + { + isMatch = true; + DebugLog("OnMatchProgress: " + transform.name + " (match) via " + m.Message); + break; + } + } + + + if (isMatch) + { + OnEnableForNextMessage(); + } + else + { + OnDisableForNextMessage(); + } + } + + protected virtual void OnEnable() + { + if (!started) + { + return; + } + + foreach (var s in effectiveSources) + { + s.MatchProgress.AddListener(OnMatchProgress); + s.MatchStarting.AddListener(OnMatchRestart); + s.MatchComplete.AddListener(OnMatchRestart); + } + } + + protected virtual void OnDisable() + { + foreach (var s in effectiveSources) + { + s.MatchProgress.RemoveListener(OnMatchProgress); + s.MatchStarting.RemoveListener(OnMatchRestart); + s.MatchComplete.RemoveListener(OnMatchRestart); + } + } + + void OnMatchRestart() + { + var isMatch = false; + foreach (var source in effectiveSources) + { + if (!source.enabled) + { + continue; + } + + messageBuffer = source.ListEvents(messageBuffer); + foreach (var m in messageBuffer) + { + if (FilterMessage(m.Message)) + { + continue; + } + + if (m.ExpectedNext && NextMessageSource.WillGenerateMessage(m.Message)) + { + isMatch = true; + DebugLog("OnStart: " + transform.name + " " + (isMatch ? "(match)" : "(no match)") + " via " + m.Message); + break; + } + } + } + + if (!isMatch) + { + DebugLog("OnStart: " + transform.name + " (no match) -> " + messageBuffer.Count + " => " + effectiveSources.Count); + } + + + if (isMatch) + { + OnEnableForNextMessage(); + } + else + { + OnDisableForNextMessage(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Events/NextEventSelectorBase.cs.meta b/Assets/Plugins/Scripts/Events/NextEventSelectorBase.cs.meta new file mode 100644 index 0000000..9526d02 --- /dev/null +++ b/Assets/Plugins/Scripts/Events/NextEventSelectorBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7af7813867fe4e5e97d0a05282d46cc8 +timeCreated: 1547588299 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Events/PublishStreamEvent.cs b/Assets/Plugins/Scripts/Events/PublishStreamEvent.cs new file mode 100644 index 0000000..08975fb --- /dev/null +++ b/Assets/Plugins/Scripts/Events/PublishStreamEvent.cs @@ -0,0 +1,37 @@ +using JetBrains.Annotations; +using UnityEngine; + +namespace TutorialSystem.Events +{ + /// + /// This class exists as an trigger to fire events from UnityEvent bindings. + /// Attach this class to your game object and in your custom scripts, fire + /// an event that calls the TriggerEvent method. + /// The message defined in the inspector will be published to the message's + /// associated event stream. From there aggregators and reactors can pick up + /// the state change that has been signaled here. + /// Architectural note: Messages do not carry source object information. At + /// the moment they also do not carry any parameter information. This is a + /// deliberate act, as event stream messages are not intended to replace + /// normal event processing. The messages defined in this package are used + /// to provide analytics, achievement and tutorial state triggers only. + /// + public class PublishStreamEvent : StreamEventSource + { + [SerializeField] BasicEventStreamMessage message; + + public override bool WillGenerateMessage(BasicEventStreamMessage msg) + { + return Equals(message, msg); + } + + [UsedImplicitly] + public void TriggerEvent() + { + if (message != null) + { + message.Publish(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Events/PublishStreamEvent.cs.meta b/Assets/Plugins/Scripts/Events/PublishStreamEvent.cs.meta new file mode 100644 index 0000000..ddc6a5e --- /dev/null +++ b/Assets/Plugins/Scripts/Events/PublishStreamEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 707a12fe3b5f46afa91e26f91d81b0ef +timeCreated: 1546107365 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Events/StaticStreamEventSource.cs b/Assets/Plugins/Scripts/Events/StaticStreamEventSource.cs new file mode 100644 index 0000000..191efef --- /dev/null +++ b/Assets/Plugins/Scripts/Events/StaticStreamEventSource.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace TutorialSystem.Events +{ + public class StaticStreamEventSource : StreamEventSource + { + [SerializeField] List messages; + + public override bool WillGenerateMessage(BasicEventStreamMessage msg) + { + return (messages != null) && messages.Contains(msg); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Events/StaticStreamEventSource.cs.meta b/Assets/Plugins/Scripts/Events/StaticStreamEventSource.cs.meta new file mode 100644 index 0000000..f823f8f --- /dev/null +++ b/Assets/Plugins/Scripts/Events/StaticStreamEventSource.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1609f2334944417ca2505b738c497f96 +timeCreated: 1547575735 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Events/StreamEventSource.cs b/Assets/Plugins/Scripts/Events/StreamEventSource.cs new file mode 100644 index 0000000..f3590e2 --- /dev/null +++ b/Assets/Plugins/Scripts/Events/StreamEventSource.cs @@ -0,0 +1,9 @@ +using UnityEngine; + +namespace TutorialSystem.Events +{ + public abstract class StreamEventSource : MonoBehaviour + { + public abstract bool WillGenerateMessage(BasicEventStreamMessage msg); + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Events/StreamEventSource.cs.meta b/Assets/Plugins/Scripts/Events/StreamEventSource.cs.meta new file mode 100644 index 0000000..37d9b4d --- /dev/null +++ b/Assets/Plugins/Scripts/Events/StreamEventSource.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 20861c5f9f5e433783fa0cead6cc2341 +timeCreated: 1547574890 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers.meta b/Assets/Plugins/Scripts/Helpers.meta new file mode 100644 index 0000000..9d95c4b --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 73edf1b61f9a45549bfbd64643c828a8 +timeCreated: 1546273434 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers/MouseEventPublisher.cs b/Assets/Plugins/Scripts/Helpers/MouseEventPublisher.cs new file mode 100644 index 0000000..b368274 --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers/MouseEventPublisher.cs @@ -0,0 +1,27 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace TutorialSystem.Helpers +{ + public class MouseEventPublisher : MonoBehaviour + { + public UnityEvent Clicked; + public UnityEvent MouseEntered; + public UnityEvent MouseExited; + + void OnMouseUp() + { + Clicked?.Invoke(); + } + + void OnMouseEnter() + { + MouseEntered?.Invoke(); + } + + void OnMouseExit() + { + MouseExited?.Invoke(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers/MouseEventPublisher.cs.meta b/Assets/Plugins/Scripts/Helpers/MouseEventPublisher.cs.meta new file mode 100644 index 0000000..7595fee --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers/MouseEventPublisher.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3c2f7fb44e844d968edd605a04aa2f80 +timeCreated: 1546189089 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers/NextEventAggregationActivator.cs b/Assets/Plugins/Scripts/Helpers/NextEventAggregationActivator.cs new file mode 100644 index 0000000..f43d692 --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers/NextEventAggregationActivator.cs @@ -0,0 +1,38 @@ +using TutorialSystem.Aggregators; +using TutorialSystem.Events; + +namespace TutorialSystem.Helpers +{ + public class NextEventAggregationActivator : NextEventSelectorBase + { + EventMessageAggregator target; + StreamEventSource nextMessageSource; + + public override bool AutoPopulate => true; + + public override StreamEventSource NextMessageSource => nextMessageSource; + + void Awake() + { + nextMessageSource = GetComponent(); + target = GetComponent(); + target.enabled = false; + } + + protected override void OnEnableForNextMessage() + { + if (target != null) + { + target.enabled = true; + } + } + + protected override void OnDisableForNextMessage() + { + if (target != null) + { + target.enabled = false; + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers/NextEventAggregationActivator.cs.meta b/Assets/Plugins/Scripts/Helpers/NextEventAggregationActivator.cs.meta new file mode 100644 index 0000000..36ca119 --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers/NextEventAggregationActivator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 639079f633a24c1cba6733ee5e559bc2 +timeCreated: 1547587926 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventMessage.cs b/Assets/Plugins/Scripts/Helpers/TutorialEventMessage.cs new file mode 100644 index 0000000..722c5e6 --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers/TutorialEventMessage.cs @@ -0,0 +1,51 @@ +using System; +using NaughtyAttributes; +using TutorialSystem.Events; +using UnityEngine; + +namespace TutorialSystem.Helpers +{ + public enum TutorialEventState + { + Open, + Success, + Failure + } + + public class TutorialEventMessage : BasicEventStreamMessage + { + [SerializeField] [ResizableTextArea] string taskOpenMessage; + [SerializeField] [ResizableTextArea] string taskSuccessMessage; + [SerializeField] [ResizableTextArea] string taskFailureMessage; + + public string TaskOpenMessage => taskOpenMessage; + + public string TaskSuccessMessage => taskSuccessMessage; + + public string TaskFailureMessage => taskFailureMessage; + + public string Message(TutorialEventState msg) + { + switch (msg) + { + case TutorialEventState.Open: + return TaskOpenMessage; + case TutorialEventState.Success: + return TaskSuccessMessage; + case TutorialEventState.Failure: + return TaskFailureMessage; + default: + throw new ArgumentOutOfRangeException(nameof(msg), msg, null); + } + } + + public void CopyFrom(BasicEventStreamMessage msg) + { + Stream = msg.Stream; + taskOpenMessage = msg.name; + taskFailureMessage = msg.name; + taskSuccessMessage = msg.name; + taskOpenMessage = msg.name; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventMessage.cs.meta b/Assets/Plugins/Scripts/Helpers/TutorialEventMessage.cs.meta new file mode 100644 index 0000000..0623ebe --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers/TutorialEventMessage.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8cb599dd07c2401fb31ef8ce61dd8b2a +timeCreated: 1547029384 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventStateData.cs b/Assets/Plugins/Scripts/Helpers/TutorialEventStateData.cs new file mode 100644 index 0000000..1f5aa52 --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers/TutorialEventStateData.cs @@ -0,0 +1,156 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using TutorialSystem.Events; + +namespace TutorialSystem.Helpers +{ + public class TutorialEventStateData : IReadOnlyList, + IEquatable + { + readonly List subTasks; + + public TutorialEventStateData(TutorialEventMessage sourceMessage, + bool completed, + bool expectedNext, + IReadOnlyList data) + { + SourceMessage = sourceMessage; + Completed = completed; + ExpectedNext = expectedNext; + subTasks = new List(data); + } + + public TutorialEventStateData(TutorialEventMessage sourceMessage, + bool completed, + bool expectedNext, + params TutorialEventStateData[] data) : + this(sourceMessage, completed, expectedNext, (IReadOnlyList) data) + { + } + + public BasicEventStreamMessage SourceMessage { get; } + + public bool Completed { get; set; } + public bool ExpectedNext { get; set; } + + public bool Equals(TutorialEventStateData other) + { + if (ReferenceEquals(null, other)) + { + return false; + } + + if (ReferenceEquals(this, other)) + { + return true; + } + + if (!Equals(SourceMessage, other.SourceMessage)) + { + return false; + } + + if (Completed != other.Completed) + { + return false; + } + + return subTasks.SequenceEqual(other.subTasks); + } + + public TutorialEventStateData this[int idx] => subTasks[idx]; + public int Count => subTasks.Count; + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public List.Enumerator GetEnumerator() + { + return subTasks.GetEnumerator(); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) + { + return false; + } + + if (ReferenceEquals(this, obj)) + { + return true; + } + + if (obj.GetType() != GetType()) + { + return false; + } + + return Equals((TutorialEventStateData) obj); + } + + public override int GetHashCode() + { + unchecked + { + var hashCode = 19; + foreach (var s in subTasks) + { + hashCode = (hashCode * 397) ^ (s != null ? s.GetHashCode() : 0); + } + + hashCode = (hashCode * 397) ^ (SourceMessage != null ? SourceMessage.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ Completed.GetHashCode(); + return hashCode; + } + } + + public override string ToString() + { + if (SourceMessage == null) + { + return $"({nameof(SourceMessage)}: , {nameof(Completed)}: {Completed})"; + } + + return $"({nameof(SourceMessage)}: {SourceMessage.name}, {nameof(Completed)}: {Completed})"; + } + + public static bool operator ==(TutorialEventStateData left, TutorialEventStateData right) + { + return Equals(left, right); + } + + public static bool operator !=(TutorialEventStateData left, TutorialEventStateData right) + { + return !Equals(left, right); + } + + public string AsTextTree() + { + var b = new StringBuilder(); + AsTreeText(b, this, 0); + return b.ToString(); + } + + static void AsTreeText(StringBuilder b, TutorialEventStateData data, int indent) + { + b.Append("".PadLeft(indent * 4)); + b.Append(data); + b.Append("\n"); + foreach (var c in data) + { + AsTreeText(b, c, indent + 1); + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventStateData.cs.meta b/Assets/Plugins/Scripts/Helpers/TutorialEventStateData.cs.meta new file mode 100644 index 0000000..7928009 --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers/TutorialEventStateData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e3bd3996dc9b44ada890cec6bddc77cb +timeCreated: 1546541854 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventStatePublisher.cs b/Assets/Plugins/Scripts/Helpers/TutorialEventStatePublisher.cs new file mode 100644 index 0000000..270aefb --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers/TutorialEventStatePublisher.cs @@ -0,0 +1,87 @@ +using System.Collections.Generic; +using TutorialSystem.Aggregators; +using TutorialSystem.Events; +using UnityEngine; +using UnityEngine.Events; + +namespace TutorialSystem.Helpers +{ + public class TutorialProgressEvent : UnityEvent + { + } + + public class TutorialEventStatePublisher : StreamEventSource + { + [SerializeField] EventMessageAggregator stateChain; + [SerializeField] TutorialEventMessage successMessage; + [SerializeField] TutorialProgressEvent stateChanged; + + public TutorialEventStatePublisher() + { + stateChanged = new TutorialProgressEvent(); + } + + public TutorialProgressEvent StateChanged => stateChanged; + public TutorialEventMessage SuccessMessage => successMessage; + + public EventMessageMatcherState MatchResult => stateChain.MatchResult; + + public List FetchEvents(List buffer) + { + return stateChain.ListEvents(buffer); + } + + void Awake() + { + if (stateChain == null) + { + stateChain = GetComponent(); + } + } + + void OnEnable() + { + if (stateChain != null) + { + stateChain.MatchStarting.AddListener(OnMatchStarting); + stateChain.MatchComplete.AddListener(OnMatchComplete); + stateChain.MatchProgress.AddListener(OnMatchProgress); + } + } + + void OnDisable() + { + if (stateChain != null) + { + stateChain.MatchStarting.RemoveListener(OnMatchStarting); + stateChain.MatchComplete.RemoveListener(OnMatchComplete); + stateChain.MatchProgress.RemoveListener(OnMatchProgress); + } + } + + public override bool WillGenerateMessage(BasicEventStreamMessage msg) + { + return Equals(SuccessMessage, msg); + } + + void OnMatchStarting() + { + StateChanged.Invoke(this, null); + } + + void OnMatchProgress(EventMessageAggregator source, BasicEventStreamMessage message) + { + StateChanged.Invoke(this, message); + } + + void OnMatchComplete() + { + if (successMessage != null) + { + successMessage.Publish(); + } + + Debug.Log("Fired success message " + successMessage); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventStatePublisher.cs.meta b/Assets/Plugins/Scripts/Helpers/TutorialEventStatePublisher.cs.meta new file mode 100644 index 0000000..d1ef9dd --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers/TutorialEventStatePublisher.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7fb333aa63754b08a8a3c8327964d16b +timeCreated: 1546536562 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventStream.cs b/Assets/Plugins/Scripts/Helpers/TutorialEventStream.cs new file mode 100644 index 0000000..568bbed --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers/TutorialEventStream.cs @@ -0,0 +1,19 @@ +using TutorialSystem.Events; +using UnityEngine; + +namespace TutorialSystem.Helpers +{ + [CreateAssetMenu(menuName = "Event Stream/Tutorial Event Stream")] + public class TutorialEventStream : BasicEventStream + { + protected override BasicEventStreamMessage CreateNode() + { + return CreateInstance(); + } + + public override bool IsValidMessage(BasicEventStreamMessage msg) + { + return base.IsValidMessage(msg) && msg is TutorialEventMessage; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventStream.cs.meta b/Assets/Plugins/Scripts/Helpers/TutorialEventStream.cs.meta new file mode 100644 index 0000000..ce250ed --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers/TutorialEventStream.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 177a928ab1d64b8aab0e860dcea415f8 +timeCreated: 1547030401 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventStreamManager.cs b/Assets/Plugins/Scripts/Helpers/TutorialEventStreamManager.cs new file mode 100644 index 0000000..a086094 --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers/TutorialEventStreamManager.cs @@ -0,0 +1,322 @@ +using System.Collections.Generic; +using System.Linq; +using NaughtyAttributes; +using TutorialSystem.Aggregators; +using TutorialSystem.Events; +using TutorialSystem.UI.Trees; +using UnityEngine; + +namespace TutorialSystem.Helpers +{ + public class TutorialEventStreamManager : MonoBehaviour + { + readonly List buffer; + [SerializeField] [ReorderableList] List tutorialStateTrackers; + [SerializeField] TutorialEventTreeView tutorialSteps; + [SerializeField] bool debug; + Dictionary nodeMapper; + TutorialEventStateData rootNode; + bool started; + + public TutorialEventStreamManager() + { + buffer = new List(); + } + + void DebugLog(string message) + { +#if DEBUG + if (debug) + { + Debug.Log(name + ": " + message); + } +#endif + } + + void Start() + { + nodeMapper = new Dictionary(); + started = true; + + var data = CollectTreeData(); + PrintTree(data); + rootNode = CreateTreeNodes(data, nodeMapper); + DebugLog("Generated tree:\n" + rootNode.AsTextTree()); + tutorialSteps.Model = new ListTreeModel(rootNode); + + foreach (var d in tutorialStateTrackers) + { + OnTrackerStateChanged(d); + } + } + + void OnEnable() + { + foreach (var d in tutorialStateTrackers) + { + d.StateChanged.AddListener(OnTrackerStateChanged); + } + } + + void OnDisable() + { + foreach (var d in tutorialStateTrackers) + { + d.StateChanged.RemoveListener(OnTrackerStateChanged); + } + } + + void OnTrackerStateChanged(TutorialEventStatePublisher source, BasicEventStreamMessage message = null) + { + if (!started) + { + return; + } + + TutorialEventStateData data; + if (!nodeMapper.TryGetValue(source, out data)) + { + data = rootNode; + } + + source.FetchEvents(buffer); + + for (var index = 0; index < buffer.Count; index++) + { + var b = buffer[index]; + var c = data[index]; + if (b.Message == c.SourceMessage) + { + c.Completed = b.Completed; + c.ExpectedNext = b.ExpectedNext; + } + else + { + Debug.LogWarning("Inconsistent data model from source " + source); + } + } + + // Special case handling: child-nodes of root won't ever receive complete events as + // there is no aggregator listening for the completed notification. + + foreach (var rootChild in rootNode) + { + if (rootChild == data) + { + rootChild.Completed = source.MatchResult == EventMessageMatcherState.Success; + } + } + + tutorialSteps.Model.FireStructureChanged(); + } + + List CollectTreeData() + { + var data = new List(); + foreach (var n in tutorialStateTrackers) + { + var messages = n.FetchEvents(buffer); + data.Add(new ExpectedStates(n, n.SuccessMessage, messages, debug)); + } + + foreach (var self in data) + { + foreach (var n in data) + { + if (self.MessageSource == n.MessageSource) + { + continue; + } + + if (self.ExpectsMessage(n.SuccessMessage)) + { + self.AddChild(n); + } + } + } + + return data.Where(d => !d.IsDependency).ToList(); + } + + TutorialEventStateData CreateTreeNodes(List data, + Dictionary nodeMapper) + { + var roots = data.Where(s => !s.IsDependency).ToList(); + var childStates = new List(); + foreach (var s in roots) + { + var item = AddTree(s, nodeMapper); + item.ExpectedNext = false; + AddGeneratedChildItems(childStates, item); + } + + return new TutorialEventStateData(null, false, true, childStates); + } + + static void AddGeneratedChildItems(List childStates, TutorialEventStateData item) + { + if (item.SourceMessage != null) + { + item.ExpectedNext = false; + childStates.Add(item); + return; + } + + foreach (var child in item) + { + AddGeneratedChildItems(childStates, child); + } + } + + static TutorialEventMessage Convert(BasicEventStreamMessage msg) + { + var message = msg as TutorialEventMessage; + if (message != null) + { + return message; + } + + Debug.LogError("Old message format encountered"); + var m = ScriptableObject.CreateInstance(); + m.CopyFrom(msg); + return m; + } + + static TutorialEventStateData AddTree(ExpectedStates state, + Dictionary nodeMapper) + { + var childStates = new List(); + foreach (var s in state.RequiredMessages) + { + ExpectedStates dependency; + if (state.IsProvidedByDependency(s.Message, out dependency)) + { + var item = AddTree(dependency, nodeMapper); + item.ExpectedNext = s.ExpectedNext; + childStates.Add(item); + } + else + { + var message = Convert(s.Message); + childStates.Add(new TutorialEventStateData(message, s.Completed, s.ExpectedNext)); + } + } + + var stateData = new TutorialEventStateData(state.SuccessMessage, state.Completed, false, childStates); + nodeMapper[state.MessageSource] = stateData; + return stateData; + } + + void PrintTree(List states) + { + if (!debug) + { + return; + } + + DebugLog("---- START TREE DUMP ---"); + foreach (var state in states) + { + PrintTree(state, 0); + } + + DebugLog("---- END TREE DUMP ---"); + } + + void PrintTree(ExpectedStates state, int indent) + { + DebugLog($"{$"{indent}".PadLeft(2).PadRight(indent * 4)}:{state.MessageSource}"); + foreach (var s in state.Dependencies) + { + PrintTree(s, indent + 1); + } + } + + class ExpectedStates + { + public readonly List RequiredMessages; + public readonly TutorialEventStatePublisher MessageSource; + public readonly TutorialEventMessage SuccessMessage; + public readonly HashSet Dependencies; + readonly bool debug; + + public ExpectedStates(TutorialEventStatePublisher message, + TutorialEventMessage successMessage, + List requiredMessages, + bool debug) + { + MessageSource = message; + SuccessMessage = successMessage; + RequiredMessages = new List(requiredMessages); + Dependencies = new HashSet(); + this.debug = debug; + if (debug) + { + Debug.Log("Expected state: " + SuccessMessage + " -> " + string.Join(",", RequiredMessages)); + } + } + + public bool IsDependency { get; private set; } + + public bool Completed => MessageSource.MatchResult == EventMessageMatcherState.Success; + + public void AddChild(ExpectedStates nKey) + { + if (nKey.IsDependentOn(this)) + { + Debug.LogWarning($"Circular dependency in tutorial states between {SuccessMessage} and {nKey.SuccessMessage}."); + return; + } + + nKey.IsDependency = true; + Dependencies.Add(nKey); + } + + bool IsDependentOn(ExpectedStates expectedStates) + { + foreach (var d in Dependencies) + { + if (d == expectedStates) + { + return true; + } + + if (d.IsDependentOn(expectedStates)) + { + return true; + } + } + + return false; + } + + public bool IsProvidedByDependency(BasicEventStreamMessage msg, out ExpectedStates dependency) + { + foreach (var d in Dependencies) + { + if (d.SuccessMessage == msg) + { + dependency = d; + return true; + } + } + + dependency = default(ExpectedStates); + return false; + } + + public bool ExpectsMessage(BasicEventStreamMessage msg) + { + foreach (var r in RequiredMessages) + { + if (r.Message == msg) + { + return true; + } + } + + return false; + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventStreamManager.cs.meta b/Assets/Plugins/Scripts/Helpers/TutorialEventStreamManager.cs.meta new file mode 100644 index 0000000..17e6e1a --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers/TutorialEventStreamManager.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 731ae49d9a7e44078b9e9300c6c829c2 +timeCreated: 1546535346 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventTreeItemRenderer.cs b/Assets/Plugins/Scripts/Helpers/TutorialEventTreeItemRenderer.cs new file mode 100644 index 0000000..14caa14 --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers/TutorialEventTreeItemRenderer.cs @@ -0,0 +1,207 @@ +using System; +using NaughtyAttributes; +using TMPro; +using TutorialSystem.Events; +using TutorialSystem.UI.Trees; +using UnityEngine; +using UnityEngine.UI; + +namespace TutorialSystem.Helpers +{ + public class TutorialEventTreeItemRenderer : TreeItemRenderer + { + [SerializeField] Color whenNextEventColor; + [SerializeField] Color whenCompletedColor; + [SerializeField] Color defaultColor; + [SerializeField] FontStyles whenNextEventFontStyle; + [SerializeField] FontStyles whenCompletedFontStyle; + [SerializeField] FontStyles defaultFontStyle; + + [SerializeField] Toggle toggle; + [SerializeField] TextMeshProUGUI label; + [SerializeField] float indentPerLevel; + [SerializeField] int ignoreLeadingIndent; + + LayoutGroup layout; + bool anchorStored; + int indentCorrection; + Vector2 anchor; + + void Reset() + { + whenNextEventColor = Color.yellow; + whenCompletedColor = Color.green; + defaultColor = Color.white; + toggle = GetComponentInChildren(); + label = GetComponentInChildren(); + } + + bool IsNextEvent(TutorialEventStateData data) + { + if (data.ExpectedNext == false) + { + return false; + } + + var message = data.SourceMessage; + if ((message != null) && (message.Stream != null) && message.Stream.IgnoreForNextEventIndicatorHint) + { + return false; + } + + return true; + } + + string GetNextMessage(BasicEventStreamMessage msg) + { + var tutorialEventMessage = msg as TutorialEventMessage; + if (tutorialEventMessage != null) + { + var txt = tutorialEventMessage.TaskOpenMessage; + if (!string.IsNullOrWhiteSpace(txt)) + { + return txt; + } + } + + return msg.name; + } + + string GetFailureMessage(BasicEventStreamMessage msg) + { + var tutorialEventMessage = msg as TutorialEventMessage; + if (tutorialEventMessage != null) + { + var txt = tutorialEventMessage.TaskFailureMessage; + if (!string.IsNullOrWhiteSpace(txt)) + { + return txt; + } + } + + return msg.name; + } + + protected override void Awake() + { + base.Awake(); + ignoreLeadingIndent = Math.Max(ignoreLeadingIndent, 0); + layout = GetComponent(); + } + + string GetSuccessMessage(BasicEventStreamMessage msg) + { + var tutorialEventMessage = msg as TutorialEventMessage; + if (tutorialEventMessage != null) + { + var txt = tutorialEventMessage.TaskSuccessMessage; + if (!string.IsNullOrWhiteSpace(txt)) + { + return txt; + } + } + + return msg.name; + } + + void MarkLayoutDirty() + { + var rectTransform = GetComponent(); + if (rectTransform != null) + { + LayoutRebuilder.MarkLayoutForRebuild(rectTransform); + } + } + + protected override void OnUpdateValue(TreePath treePath) + { + if (treePath == null) + { + ResetContents(); + MarkLayoutDirty(); + return; + } + + TutorialEventStateData data; + if (treePath.TryGetLastComponent(out data) && (data.SourceMessage != null)) + { + if (label != null) + { + if (IsNextEvent(data)) + { + label.text = GetNextMessage(data.SourceMessage); + label.fontStyle = whenNextEventFontStyle; + label.color = whenNextEventColor; + } + else if (data.Completed) + { + label.text = GetSuccessMessage(data.SourceMessage); + label.fontStyle = whenCompletedFontStyle; + label.color = whenCompletedColor; + } + else + { + label.text = GetFailureMessage(data.SourceMessage); + label.fontStyle = defaultFontStyle; + label.color = defaultColor; + } + } + + if (toggle != null) + { + toggle.isOn = data.Completed; + var rt = toggle.transform as RectTransform; + ApplyIndent(rt); + } + + MarkLayoutDirty(); + } + else + { + ResetContents(); + MarkLayoutDirty(); + } + } + + void ApplyIndent(RectTransform rt) + { + if (rt != null) + { + if (!anchorStored) + { + var tree = gameObject.GetComponentInParent>(); + if (tree != null) + { + indentCorrection = tree.ShowRootNode ? 0 : -1; + } + + anchorStored = true; + anchor = rt.anchoredPosition; + } + + var effectiveIndent = Math.Max(0, indentCorrection + IndentLevel - 1 - ignoreLeadingIndent); + var indentSpacing = indentPerLevel * effectiveIndent; + if (layout != null) + { + var padding = layout.padding; + layout.padding = new RectOffset((int) indentSpacing, padding.top, padding.right, padding.bottom); + } + rt.anchoredPosition = new Vector2(anchor.x + indentSpacing, anchor.y); + } + } + + void ResetContents() + { + if (label != null) + { + label.text = ""; + label.fontStyle = FontStyles.Normal; + } + + if (toggle != null) + { + toggle.isOn = false; + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventTreeItemRenderer.cs.meta b/Assets/Plugins/Scripts/Helpers/TutorialEventTreeItemRenderer.cs.meta new file mode 100644 index 0000000..cdfabe7 --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers/TutorialEventTreeItemRenderer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: bcf2b234f7c645128d79667d27a38161 +timeCreated: 1546540331 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventTreeView.cs b/Assets/Plugins/Scripts/Helpers/TutorialEventTreeView.cs new file mode 100644 index 0000000..201807d --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers/TutorialEventTreeView.cs @@ -0,0 +1,55 @@ +using TutorialSystem.UI.Trees; +using UnityEngine; + +namespace TutorialSystem.Helpers +{ + public class TutorialEventTreeView : TreeView + { + [SerializeField] TutorialEventTreeItemRenderer template; + [SerializeField] bool showAllNodes; + [SerializeField] bool hideCompletedSubTrees; + ListTreeModel model; + + protected override TreeItemRenderer ItemRenderer => template; + + public ListTreeModel Model + { + get { return model; } + set + { + model = value; + InternalModel = value; + } + } + + protected override bool IsPathVisible(TreePath path) + { + if (hideCompletedSubTrees) + { + if (path.Count > 1) + { + var parentNode = path[path.Count - 2]; + if (parentNode.Completed) + { + return false; + } + } + } + + if (!showAllNodes) + { + TutorialEventStateData stateData; + if (path.TryGetLastComponent(out stateData) && (stateData != null)) + { + // Debug.Log("Maybe Hiding node " + path); + return stateData.Completed || stateData.ExpectedNext; + } + + // Debug.Log("Hiding node " + path); + return false; + } + + return true; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventTreeView.cs.meta b/Assets/Plugins/Scripts/Helpers/TutorialEventTreeView.cs.meta new file mode 100644 index 0000000..241f83a --- /dev/null +++ b/Assets/Plugins/Scripts/Helpers/TutorialEventTreeView.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5dabfd477c564c518af7ad4e2362742a +timeCreated: 1546540039 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/SharedMethods.cs b/Assets/Plugins/Scripts/SharedMethods.cs new file mode 100644 index 0000000..982ea8b --- /dev/null +++ b/Assets/Plugins/Scripts/SharedMethods.cs @@ -0,0 +1,117 @@ +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace TutorialSystem +{ + /// + /// Copied from VRTK_SharedMethods class (MIT License). + /// + public static class SharedMethods + { + /// + /// Finds all components of a given type. + /// + /// + /// This method returns components from active as well as inactive GameObjects in all scenes. It doesn't return assets. + /// For performance reasons it is recommended to not use this function every frame. Cache the result in a member + /// variable at startup instead. + /// + /// The component type to search for. Must be a subclass of `Component`. + /// + /// If this is true, all loaded scenes will be searched. If this is false, only the active + /// scene will be searched. + /// + /// All the found components. If no component is found an empty array is returned. + public static T[] FindEvenInactiveComponents(bool searchAllScenes = false) where T : Component + { + var results = FindEvenInactiveComponentsInValidScenes(searchAllScenes); + return results.ToArray(); + } + + /// + /// The FindEvenInactiveComponentsInLoadedScenes method searches active and inactive game objects in all + /// loaded scenes for components matching the type supplied. + /// + /// If true, will search all loaded scenes, otherwise just the active scene. + /// If true, will stop searching objects as soon as a match is found. + /// + static IEnumerable FindEvenInactiveComponentsInValidScenes(bool searchAllScenes, bool stopOnMatch = false) where T : Component + { + IEnumerable results; + if (searchAllScenes) + { + var allSceneResults = new List(); + for (var sceneIndex = 0; sceneIndex < SceneManager.sceneCount; sceneIndex++) + { + allSceneResults.AddRange(FindEvenInactiveComponentsInScene(SceneManager.GetSceneAt(sceneIndex), stopOnMatch)); + } + + results = allSceneResults; + } + else + { + results = FindEvenInactiveComponentsInScene(SceneManager.GetActiveScene(), stopOnMatch); + } + + return results; + } + + /// + /// The FIndEvenInactiveComponentsInScene method searches the specified scene for components matching the type + /// supplied. + /// + /// The scene to search. This scene must be valid, either loaded or loading. + /// If true, will stop searching objects as soon as a match is found. + /// + static IEnumerable FindEvenInactiveComponentsInScene(Scene scene, bool stopOnMatch = false) + { + var results = new List(); + if (!scene.isLoaded) + { + return results; + } + + foreach (var rootObject in scene.GetRootGameObjects()) + { + if (stopOnMatch) + { + var foundComponent = rootObject.GetComponentInChildren(true); + if (foundComponent != null) + { + results.Add(foundComponent); + return results; + } + } + else + { + results.AddRange(rootObject.GetComponentsInChildren(true)); + } + } + + return results; + } + + + public static string Path(this GameObject go) + { + var b = new StringBuilder(); + BuildPath(go, b); + return b.ToString(); + } + + static void BuildPath(GameObject go, StringBuilder b) + { + if (go.transform.parent != null) + { + var pgo = go.transform.parent.gameObject; + BuildPath(pgo, b); + b.Append("/"); + } + + b.Append(go.name); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/SharedMethods.cs.meta b/Assets/Plugins/Scripts/SharedMethods.cs.meta new file mode 100644 index 0000000..9f3cdf0 --- /dev/null +++ b/Assets/Plugins/Scripts/SharedMethods.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a1ff3d1bca2f4a429d42124df87e4716 +timeCreated: 1547576788 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI.meta b/Assets/Plugins/Scripts/UI.meta new file mode 100644 index 0000000..e566447 --- /dev/null +++ b/Assets/Plugins/Scripts/UI.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a5c1c335c534444385afae4c4e73602c +timeCreated: 1546447346 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/EventStreamState.cs b/Assets/Plugins/Scripts/UI/EventStreamState.cs new file mode 100644 index 0000000..87f4c58 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/EventStreamState.cs @@ -0,0 +1,77 @@ +using System; +using TutorialSystem.Events; + +namespace TutorialSystem.UI +{ + public class EventStreamState : IEquatable + { + public EventStreamState(BasicEventStreamMessage sourceMessage, bool completed) + { + if (sourceMessage == null) + { + throw new ArgumentNullException(nameof(sourceMessage)); + } + + SourceMessage = sourceMessage; + Completed = completed; + } + + public BasicEventStreamMessage SourceMessage { get; } + + public bool Completed { get; } + + public bool Equals(EventStreamState other) + { + if (ReferenceEquals(null, other)) + { + return false; + } + + if (ReferenceEquals(this, other)) + { + return true; + } + + return Equals(SourceMessage, other.SourceMessage) + && (Completed == other.Completed); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) + { + return false; + } + + if (ReferenceEquals(this, obj)) + { + return true; + } + + if (obj.GetType() != GetType()) + { + return false; + } + + return Equals((EventStreamState) obj); + } + + public override int GetHashCode() + { + unchecked + { + return ((SourceMessage != null ? SourceMessage.GetHashCode() : 0) * 397) ^ Completed.GetHashCode(); + } + } + + public static bool operator ==(EventStreamState left, EventStreamState right) + { + return Equals(left, right); + } + + public static bool operator !=(EventStreamState left, EventStreamState right) + { + return !Equals(left, right); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/EventStreamState.cs.meta b/Assets/Plugins/Scripts/UI/EventStreamState.cs.meta new file mode 100644 index 0000000..a8d8b9d --- /dev/null +++ b/Assets/Plugins/Scripts/UI/EventStreamState.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 220e7feaa92744bdb0ddb8eea452a2d8 +timeCreated: 1546534259 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees.meta b/Assets/Plugins/Scripts/UI/Trees.meta new file mode 100644 index 0000000..4f6e1fa --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6fb2d7aa1bce45cebf89ff79fab50c0b +timeCreated: 1546536457 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/DefaultTreeModel.cs b/Assets/Plugins/Scripts/UI/Trees/DefaultTreeModel.cs new file mode 100644 index 0000000..bec5238 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/DefaultTreeModel.cs @@ -0,0 +1,83 @@ +using System; + +namespace TutorialSystem.UI.Trees +{ + [Serializable] + public class DefaultTreeModel : TreeModel + { + DefaultTreeNode root; + + public DefaultTreeModel() + { + Root = new DefaultTreeNode(); + } + + public DefaultTreeModel(DefaultTreeNode root) + { + Root = root; + } + + public override bool HasRoot => root != null; + + public override DefaultTreeNode Root + { + get { return root; } + set + { + var old = root; + root = value; + if (!ReferenceEquals(old, root)) + { + FireStructureChanged(); + } + } + } + + public override bool IsLeaf(DefaultTreeNode node) + { + return node.IsLeaf; + } + + public override DefaultTreeNode GetChildAt(DefaultTreeNode parent, int index) + { + return parent[index]; + } + + public override int ChildCount(DefaultTreeNode parent) + { + return parent.Count; + } + + public override int GetIndexOfChild(DefaultTreeNode parent, DefaultTreeNode child) + { + return parent.IndexOf(child); + } + + public void InsertChild(DefaultTreeNode parent, DefaultTreeNode child) + { + child.Parent?.Remove(child); + + var index = parent.Count; + parent.InsertAt(child, index); + FireNodeInserted(parent.Path, index, child); + } + + public void InsertChild(DefaultTreeNode parent, DefaultTreeNode child, int index) + { + parent.InsertAt(child, index); + FireNodeInserted(parent.Path, index, child); + } + + public void RemoveChild(DefaultTreeNode parent, DefaultTreeNode child) + { + var idx = parent.IndexOf(child); + if (idx == -1) + { + throw new ArgumentException(); + } + + parent.Remove(child); + FireNodeRemoved(parent.Path, idx, child); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/DefaultTreeModel.cs.meta b/Assets/Plugins/Scripts/UI/Trees/DefaultTreeModel.cs.meta new file mode 100644 index 0000000..e80e0e3 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/DefaultTreeModel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 77a4518412dfe494b90b2e03cc0829be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scripts/UI/Trees/DefaultTreeNode.cs b/Assets/Plugins/Scripts/UI/Trees/DefaultTreeNode.cs new file mode 100644 index 0000000..41e9705 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/DefaultTreeNode.cs @@ -0,0 +1,200 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.CompilerServices; + +namespace TutorialSystem.UI.Trees +{ + [Serializable] + public class DefaultTreeNode : IReadOnlyList, IEquatable + { + // ReSharper disable once CollectionNeverUpdated.Local + static readonly List emptyNodes = new List(); + + List backend; + object value; + TreePath path; + DefaultTreeNode parent; + + public DefaultTreeNode(bool asLeaf = false, object value = null) + { + IsLeaf = asLeaf; + this.value = value; + } + + public TreePath Path + { + get + { + if (path != null) + { + return path; + } + + if (Parent == null) + { + path = new TreePath(this); + } + else + { + path = new TreePath(Parent.Path, this); + } + + return path; + } + } + + public object Value + { + get { return value; } + set { this.value = value; } + } + + public DefaultTreeNode Parent + { + get { return parent; } + private set + { + parent = value; + path = null; + } + } + + public bool IsLeaf { get; } + + public bool Equals(DefaultTreeNode other) + { + return ReferenceEquals(this, other); + } + + public DefaultTreeNode this[int index] + { + get + { + if (backend == null) + { + throw new IndexOutOfRangeException(); + } + + return backend[index]; + } + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public int Count => backend?.Count ?? 0; + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) + { + return false; + } + + if (ReferenceEquals(this, obj)) + { + return true; + } + + if (obj.GetType() != GetType()) + { + return false; + } + + return Equals((DefaultTreeNode) obj); + } + + public override int GetHashCode() + { + return RuntimeHelpers.GetHashCode(this); + } + + public static bool operator ==(DefaultTreeNode left, DefaultTreeNode right) + { + return Equals(left, right); + } + + public static bool operator !=(DefaultTreeNode left, DefaultTreeNode right) + { + return !Equals(left, right); + } + + public void Add(DefaultTreeNode child) + { + var oldParent = child.Parent; + if ((oldParent != null) && !oldParent.Remove(child)) + { + throw new ArgumentException(); + } + + if (backend == null) + { + backend = new List(); + } + + backend.Add(child); + child.Parent = this; + } + + public override string ToString() + { + return $"{Value}"; + } + + public List.Enumerator GetEnumerator() + { + return backend?.GetEnumerator() ?? emptyNodes.GetEnumerator(); + } + + public bool Remove(DefaultTreeNode child) + { + if (backend == null) + { + return false; + } + + if (backend.Remove(child)) + { + child.Parent = null; + return true; + } + + return false; + } + + public int IndexOf(DefaultTreeNode child) + { + if (backend == null) + { + return -1; + } + + return backend.IndexOf(child); + } + + public void InsertAt(DefaultTreeNode child, int index) + { + var oldParent = child.Parent; + if ((oldParent != null) && !oldParent.Remove(child)) + { + throw new ArgumentException(); + } + + if (backend == null) + { + backend = new List(); + } + + backend.Insert(index, child); + child.Parent = this; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/DefaultTreeNode.cs.meta b/Assets/Plugins/Scripts/UI/Trees/DefaultTreeNode.cs.meta new file mode 100644 index 0000000..4e79653 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/DefaultTreeNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 46b7ab3545b06c94f9f6596e237e1bbd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scripts/UI/Trees/DefaultTreeNodeComparer.cs b/Assets/Plugins/Scripts/UI/Trees/DefaultTreeNodeComparer.cs new file mode 100644 index 0000000..ccc1790 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/DefaultTreeNodeComparer.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; + +namespace TutorialSystem.UI.Trees +{ + public class DefaultTreeNodeComparer : IComparer + { + readonly IComparer valueComparer; + + public DefaultTreeNodeComparer(IComparer valueComparer) + { + if (valueComparer == null) + { + throw new ArgumentNullException(nameof(valueComparer)); + } + + this.valueComparer = valueComparer; + } + + public int Compare(DefaultTreeNode x, DefaultTreeNode y) + { + if ((x == null) && (y == null)) + { + return 0; + } + + if (x == null) + { + return -1; + } + + if (y == null) + { + return 1; + } + + var xT = x.Value is T; + var yT = y.Value is T; + if (!xT && !yT) + { + return 0; + } + + if (!xT) + { + return -1; + } + + if (!yT) + { + return 1; + } + + return valueComparer.Compare((T) x.Value, (T) y.Value); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/DefaultTreeNodeComparer.cs.meta b/Assets/Plugins/Scripts/UI/Trees/DefaultTreeNodeComparer.cs.meta new file mode 100644 index 0000000..a0b1265 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/DefaultTreeNodeComparer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59511ee80acae8844b772eacd36d9620 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scripts/UI/Trees/DefaultTreeSelectionModel.cs b/Assets/Plugins/Scripts/UI/Trees/DefaultTreeSelectionModel.cs new file mode 100644 index 0000000..6712ee9 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/DefaultTreeSelectionModel.cs @@ -0,0 +1,146 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +namespace TutorialSystem.UI.Trees +{ + public class DefaultTreeSelectionModel : ITreeSelectionModel + { + readonly List> backend; + + public DefaultTreeSelectionModel() + { + backend = new List>(); + SelectionMode = SelectionMode.SingleSelection; + } + + public SelectionMode SelectionMode { get; set; } + public Func, int> RowMapper { get; set; } + + public TreePath SelectionPath + { + get + { + if (backend.Count > 0) + { + return backend[0]; + } + + return null; + } + set + { + backend.Clear(); + if (value != null) + { + backend.Add(value); + } + + SelectionChanged?.Invoke(this, EventArgs.Empty); + } + } + + public bool Contains(TreePath item) + { + return backend.Contains(item); + } + + public void SetPaths(TreePath[] p) + { + backend.Clear(); + if (p.Length != 0) + { + if (SelectionMode == SelectionMode.SingleSelection) + { + backend.Add(p[0]); + } + else if (SelectionMode == SelectionMode.ContinuousSelection) + { + if (IsContinuous(p)) + { + backend.AddRange(p); + } + else + { + backend.Add(p[0]); + } + } + else + { + backend.AddRange(p); + } + } + + SelectionChanged?.Invoke(this, EventArgs.Empty); + } + + public void Add(TreePath p) + { + var tmp = new List> {p}; + tmp.AddRange(backend); + SetPaths(tmp.ToArray()); + } + + public void Remove(TreePath p) + { + var tmp = new List>(backend); + tmp.Remove(p); + SetPaths(tmp.ToArray()); + } + + IEnumerator> IEnumerable>.GetEnumerator() + { + return GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public int Count => backend.Count; + + public TreePath this[int index] => backend[index]; + + public event EventHandler SelectionChanged; + + bool IsContinuous(TreePath[] treePaths) + { + if (treePaths.Length == 0) + { + return true; + } + + var selectionByIndex = new int[treePaths.Length]; + for (var idx = 0; idx < selectionByIndex.Length; idx += 1) + { + var x = RowMapper?.Invoke(treePaths[idx]) ?? -1; + selectionByIndex[idx] = x; + } + + Array.Sort(selectionByIndex); + var expected = selectionByIndex[0]; + if (expected == -1) + { + return false; + } + + for (var idx = 1; idx < selectionByIndex.Length; idx += 1) + { + if (selectionByIndex[idx] != expected + 1) + { + return false; + } + + expected += 1; + } + + return true; + } + + public List>.Enumerator GetEnumerator() + { + return backend.GetEnumerator(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/DefaultTreeSelectionModel.cs.meta b/Assets/Plugins/Scripts/UI/Trees/DefaultTreeSelectionModel.cs.meta new file mode 100644 index 0000000..202d927 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/DefaultTreeSelectionModel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 763631fa213e862489413f39d756d7b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scripts/UI/Trees/ITreeModel.cs b/Assets/Plugins/Scripts/UI/Trees/ITreeModel.cs new file mode 100644 index 0000000..a17731a --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/ITreeModel.cs @@ -0,0 +1,19 @@ +using System; + +namespace TutorialSystem.UI.Trees +{ + public interface ITreeModel + { + bool HasRoot { get; } + TNode Root { get; } + bool IsLeaf(TNode node); + TNode GetChildAt(TNode parent, int index); + int ChildCount(TNode parent); + int GetIndexOfChild(TNode parent, TNode child); + + event EventHandler> StructureChanged; + event EventHandler> NodesChanged; + event EventHandler> NodesInserted; + event EventHandler> NodesRemoved; + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/ITreeModel.cs.meta b/Assets/Plugins/Scripts/UI/Trees/ITreeModel.cs.meta new file mode 100644 index 0000000..8284151 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/ITreeModel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 482a7e46e128817498c1767b6defa33c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scripts/UI/Trees/ITreeSelectionModel.cs b/Assets/Plugins/Scripts/UI/Trees/ITreeSelectionModel.cs new file mode 100644 index 0000000..26dc8d2 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/ITreeSelectionModel.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace TutorialSystem.UI.Trees +{ + public interface ITreeSelectionModel : IReadOnlyList> + { + SelectionMode SelectionMode { get; set; } + TreePath SelectionPath { get; set; } + + Func, int> RowMapper { get; set; } + void SetPaths(TreePath[] p); + void Add(TreePath p); + void Remove(TreePath p); + bool Contains(TreePath p); + event EventHandler SelectionChanged; + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/ITreeSelectionModel.cs.meta b/Assets/Plugins/Scripts/UI/Trees/ITreeSelectionModel.cs.meta new file mode 100644 index 0000000..341b8e9 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/ITreeSelectionModel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 17c3de2c5e238f74e9f9c7bd0a82f75f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scripts/UI/Trees/ListTreeModel.cs b/Assets/Plugins/Scripts/UI/Trees/ListTreeModel.cs new file mode 100644 index 0000000..f377aff --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/ListTreeModel.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; + +namespace TutorialSystem.UI.Trees +{ + public class ListTreeModel : TreeModel where TList : class, IReadOnlyList + { + public ListTreeModel(TList root) + { + if (root == null) + { + throw new ArgumentNullException(nameof(root)); + } + + Root = root; + } + + public override bool HasRoot => Root != null; + public override TList Root { get; set; } + + public override bool IsLeaf(TList node) + { + return node.Count == 0; + } + + public override TList GetChildAt(TList parent, int index) + { + return parent[index]; + } + + public override int ChildCount(TList parent) + { + return parent.Count; + } + + public override int GetIndexOfChild(TList parent, TList child) + { + for (var i = 0; i < parent.Count; i++) + { + var c = parent[i]; + if (c == child) + { + return i; + } + } + + return -1; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/ListTreeModel.cs.meta b/Assets/Plugins/Scripts/UI/Trees/ListTreeModel.cs.meta new file mode 100644 index 0000000..c7d57ea --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/ListTreeModel.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1212d068e3c04f29aeb3ff3ff813a527 +timeCreated: 1546611822 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/SelectionMode.cs b/Assets/Plugins/Scripts/UI/Trees/SelectionMode.cs new file mode 100644 index 0000000..d156f68 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/SelectionMode.cs @@ -0,0 +1,9 @@ +namespace TutorialSystem.UI.Trees +{ + public enum SelectionMode + { + SingleSelection, + ContinuousSelection, + MultiSelection + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/SelectionMode.cs.meta b/Assets/Plugins/Scripts/UI/Trees/SelectionMode.cs.meta new file mode 100644 index 0000000..2bf8347 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/SelectionMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e27ee84c8512fb340a86d4b0b1befc7b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeItemRenderer.cs b/Assets/Plugins/Scripts/UI/Trees/TreeItemRenderer.cs new file mode 100644 index 0000000..9c55176 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/TreeItemRenderer.cs @@ -0,0 +1,60 @@ +using UnityEngine; + +namespace TutorialSystem.UI.Trees +{ + /// + /// Abstract because its unity + /// + /// + public abstract class TreeItemRenderer : MonoBehaviour + { + TreePath path; + bool awake; + + public int IndentLevel + { + get + { + if (Path == null) + { + return 0; + } + + return Path.Count; + } + } + + public TreePath Path + { + get { return path; } + set + { + path = value; + if (value != null) + { + name = path.ToString(); + } + else + { + name = "[]"; + } + + if (awake) + { + OnUpdateValue(path); + } + } + } + + protected virtual void Awake() + { + awake = true; + if (path != null) + { + OnUpdateValue(path); + } + } + + protected abstract void OnUpdateValue(TreePath treePath); + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeItemRenderer.cs.meta b/Assets/Plugins/Scripts/UI/Trees/TreeItemRenderer.cs.meta new file mode 100644 index 0000000..fb992df --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/TreeItemRenderer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f79abfd702d54a69acd02006d33bde2f +timeCreated: 1546538066 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeModel.cs b/Assets/Plugins/Scripts/UI/Trees/TreeModel.cs new file mode 100644 index 0000000..0052a43 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/TreeModel.cs @@ -0,0 +1,75 @@ +using System; + +namespace TutorialSystem.UI.Trees +{ + public abstract class TreeModel : ITreeModel + { + public abstract bool HasRoot { get; } + + public abstract TNode Root { get; set; } + + public abstract bool IsLeaf(TNode node); + + public abstract TNode GetChildAt(TNode parent, int index); + + public abstract int ChildCount(TNode parent); + + public abstract int GetIndexOfChild(TNode parent, TNode child); + + public event EventHandler> StructureChanged; + public event EventHandler> NodesChanged; + public event EventHandler> NodesInserted; + public event EventHandler> NodesRemoved; + + public void FireStructureChanged() + { + StructureChanged?.Invoke(this, new TreeModelEventArgs(new TreePath(), new[] {0}, new[] {Root})); + } + + public void FireNodesChanged(TreePath parent, int index, TNode child) + { + NodesChanged?.Invoke(this, new TreeModelEventArgs(parent, index, child)); + } + + public void FireStructureChanged(TreePath parent, int index, TNode child) + { + StructureChanged?.Invoke(this, new TreeModelEventArgs(parent, index, child)); + } + + public void FireNodeInserted(TreePath parent, int index, TNode child) + { + if (parent == null) + { + throw new ArgumentNullException(nameof(parent)); + } + + NodesInserted?.Invoke(this, new TreeModelEventArgs(parent, index, child)); + } + + public void FireNodeRemoved(TreePath parent, int index, TNode child) + { + if (parent == null) + { + throw new ArgumentNullException(nameof(parent)); + } + + NodesRemoved?.Invoke(this, new TreeModelEventArgs(parent, index, child)); + } + + public void FireNodeChanged(TreePath parentPath, TNode child) + { + TNode parent; + parentPath.TryGetLastComponent(out parent); + var pos = GetIndexOfChild(parent, child); + FireNodesChanged(parentPath, pos, child); + } + + public void FireStructureChanged(TreePath parentPath, TNode child) + { + TNode parent; + parentPath.TryGetLastComponent(out parent); + var pos = GetIndexOfChild(parent, child); + FireStructureChanged(parentPath, pos, child); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeModel.cs.meta b/Assets/Plugins/Scripts/UI/Trees/TreeModel.cs.meta new file mode 100644 index 0000000..08d3d98 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/TreeModel.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4da3430a8d7344a08ca72a8e0434083d +timeCreated: 1546538796 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeModelEventArgs.cs b/Assets/Plugins/Scripts/UI/Trees/TreeModelEventArgs.cs new file mode 100644 index 0000000..0adbc7e --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/TreeModelEventArgs.cs @@ -0,0 +1,54 @@ +using System; + +namespace TutorialSystem.UI.Trees +{ + public class TreeModelEventArgs : EventArgs + { + public TreeModelEventArgs(TreePath path) + { + if (path == null) + { + throw new ArgumentNullException(nameof(path)); + } + + Path = path; + Children = new TNode[0]; + ChildIndices = new int[0]; + } + + public TreeModelEventArgs(TreePath path, int childIndex, TNode child) : this(path, new[] {childIndex}, new[] {child}) + { + } + + public TreeModelEventArgs(TreePath path, int[] childIndices, TNode[] children) + { + if (path == null) + { + throw new ArgumentNullException(nameof(path)); + } + + if (childIndices == null) + { + throw new ArgumentNullException(nameof(childIndices)); + } + + if (children == null) + { + throw new ArgumentNullException(nameof(children)); + } + + ChildIndices = childIndices; + Children = children; + Path = path; + } + + public int[] ChildIndices { get; } + public TNode[] Children { get; } + public TreePath Path { get; } + + public override string ToString() + { + return $"{nameof(Path)}: {Path}, {nameof(ChildIndices)}: {ChildIndices}, {nameof(Children)}: {Children}"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeModelEventArgs.cs.meta b/Assets/Plugins/Scripts/UI/Trees/TreeModelEventArgs.cs.meta new file mode 100644 index 0000000..0aaa17d --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/TreeModelEventArgs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 61eec6fa4b033c442a5bcec141fe189c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeNodeExtensions.cs b/Assets/Plugins/Scripts/UI/Trees/TreeNodeExtensions.cs new file mode 100644 index 0000000..9977193 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/TreeNodeExtensions.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; + +namespace TutorialSystem.UI.Trees +{ + public static class TreeNodeExtensions + { + public static int InsertSorted(this DefaultTreeNode parent, DefaultTreeNode node, IComparer sorter) + { + var c = parent.Count; + for (var idx = 0; idx < c; idx += 1) + { + var current = parent[idx]; + if (sorter.Compare(current, node) > 0) + { + parent.InsertAt(node, idx); + return idx; + } + } + + parent.Add(node); + return c; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeNodeExtensions.cs.meta b/Assets/Plugins/Scripts/UI/Trees/TreeNodeExtensions.cs.meta new file mode 100644 index 0000000..ac0372b --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/TreeNodeExtensions.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5b1bc13fab5a4e4291d349b782b4bb86 +timeCreated: 1546539985 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/TreePath.cs b/Assets/Plugins/Scripts/UI/Trees/TreePath.cs new file mode 100644 index 0000000..b8a5524 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/TreePath.cs @@ -0,0 +1,242 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; + +namespace TutorialSystem.UI.Trees +{ + public static class TreePath + { + public static TreePath Empty() + { + return new TreePath(); + } + + public static TreePath From(TNode n) + { + return new TreePath(n); + } + + public static TreePath From(params TNode[] n) + { + return new TreePath(n); + } + } + + public class TreePath : IReadOnlyList, IEquatable> + { + readonly TNode[] backend; + + public TreePath() + { + backend = new TNode[0]; + Count = 0; + } + + public TreePath(TNode component) + { + backend = new[] {component}; + Count = backend.Length; + } + + public TreePath(params TNode[] component) + { + backend = (TNode[]) component.Clone(); + Count = backend.Length; + } + + TreePath(TNode[] component, int count) + { + // not need for defensive cloning, as we trust the implementation. + backend = component; + Count = count; + } + + public TreePath(TreePath parent, TNode component) + { + var tmpArray = new TNode[parent.Count + 1]; + for (var index = 0; index < parent.Count; index++) + { + tmpArray[index] = parent[index]; + } + + tmpArray[parent.Count] = component; + backend = tmpArray; + Count = backend.Length; + } + + public TreePath Parent + { + get + { + if (Count == 0) + { + throw new ArgumentException(); + } + + return new TreePath(backend, Count - 1); + } + } + + public bool Equals(TreePath other) + { + if (ReferenceEquals(null, other)) + { + return false; + } + + if (ReferenceEquals(this, other)) + { + return true; + } + + if (Count != other.Count) + { + return false; + } + + if (ReferenceEquals(backend, other.backend)) + { + return true; + } + + return this.SequenceEqual(other); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public int Count { get; } + + public TNode this[int index] => backend[index]; + + public bool TryGetLastComponent(out TNode c) + { + if (Count == 0) + { + c = default(TNode); + return false; + } + + c = backend[Count - 1]; + return true; + } + + public Enumerator GetEnumerator() + { + return new Enumerator(this); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) + { + return false; + } + + if (ReferenceEquals(this, obj)) + { + return true; + } + + if (obj.GetType() != GetType()) + { + return false; + } + + return Equals((TreePath) obj); + } + + public override int GetHashCode() + { + unchecked + { + // this isn't overly quick but will do for now. + var hashCode = Count; + for (var i = 0; i < Count; i++) + { + object n = backend[i]; + hashCode = (hashCode * 397) ^ (n?.GetHashCode() ?? 0); + } + + return hashCode; + } + } + + public override string ToString() + { + var payload = string.Join("', '", backend); + return $"['{payload}']"; + } + + public static bool operator ==(TreePath left, TreePath right) + { + return Equals(left, right); + } + + public static bool operator !=(TreePath left, TreePath right) + { + return !Equals(left, right); + } + + public struct Enumerator : IEnumerator + { + readonly TreePath contents; + + int index; + TNode current; + + internal Enumerator(TreePath widget) : this() + { + contents = widget; + index = -1; + current = default(TNode); + } + + public void Dispose() + { + } + + public bool MoveNext() + { + if (index + 1 < contents.Count) + { + index += 1; + current = contents[index]; + return true; + } + + current = default(TNode); + return false; + } + + public void Reset() + { + index = -1; + current = default(TNode); + } + + object IEnumerator.Current => Current; + + public TNode Current + { + get + { + if ((index < 0) || (index >= contents.Count)) + { + throw new InvalidOperationException(); + } + + return current; + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/TreePath.cs.meta b/Assets/Plugins/Scripts/UI/Trees/TreePath.cs.meta new file mode 100644 index 0000000..2eddfef --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/TreePath.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 751ae8498fde4ca4ab6662906f5e037f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeView.cs b/Assets/Plugins/Scripts/UI/Trees/TreeView.cs new file mode 100644 index 0000000..bf62b91 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/TreeView.cs @@ -0,0 +1,160 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace TutorialSystem.UI.Trees +{ + /// + /// abstract because of generics and unity. + /// + /// + public abstract class TreeView : MonoBehaviour + { + readonly List> pool; + [SerializeField] bool showRootNode; + ITreeModel model; + + protected TreeView() + { + pool = new List>(); + } + + public bool ShowRootNode + { + get { return showRootNode; } + set + { + showRootNode = value; + OnModelUpdated(); + } + } + + protected ITreeModel InternalModel + { + get { return model; } + set + { + if (model != null) + { + model.NodesChanged -= OnNodesChanged; + model.NodesInserted -= OnNodesInserted; + model.NodesRemoved -= OnNodesRemoved; + model.StructureChanged -= OnStructureChanged; + } + + model = value; + if (model != null) + { + model.NodesChanged += OnNodesChanged; + model.NodesInserted += OnNodesInserted; + model.NodesRemoved += OnNodesRemoved; + model.StructureChanged += OnStructureChanged; + } + + OnModelUpdated(); + } + } + + protected abstract TreeItemRenderer ItemRenderer { get; } + + protected virtual void Awake() + { + if (ItemRenderer != null) + { + ItemRenderer.gameObject.SetActive(false); + } + } + + void OnStructureChanged(object sender, TreeModelEventArgs e) + { + OnModelUpdated(); + } + + void OnNodesRemoved(object sender, TreeModelEventArgs e) + { + OnModelUpdated(); + } + + void OnNodesInserted(object sender, TreeModelEventArgs e) + { + OnModelUpdated(); + } + + void OnNodesChanged(object sender, TreeModelEventArgs e) + { + OnModelUpdated(); + } + + protected virtual void OnModelUpdated() + { + if ((model == null) || (model.HasRoot == false)) + { + foreach (var p in pool) + { + p.Path = null; + p.gameObject.SetActive(false); + //p.transform.SetParent(null, false); + } + + return; + } + + var r = model.Root; + var usedNodes = RefreshNodes(TreePath.From(r), 0, ShowRootNode); + for (var i = usedNodes; i < pool.Count; i += 1) + { + var p = pool[i]; + p.Path = null; + p.gameObject.SetActive(false); + //p.transform.SetParent(null, false); + } + } + + int RefreshNodes(TreePath node, int nextNodeIndexInPool, bool visible) + { + while (pool.Count <= nextNodeIndexInPool) + { + pool.Add(InstantiateRenderer()); + } + + if (!IsPathVisible(node)) + { + return nextNodeIndexInPool; + } + + if (visible) + { + var r = pool[nextNodeIndexInPool]; + //r.transform.SetParent(transform, false); + r.Path = node; + r.gameObject.SetActive(true); + nextNodeIndexInPool += 1; + } + + T t; + if (node.TryGetLastComponent(out t)) + { + var count = model.ChildCount(t); + for (var i = 0; i < count; i += 1) + { + var child = model.GetChildAt(t, i); + nextNodeIndexInPool = RefreshNodes(new TreePath(node, child), nextNodeIndexInPool, true); + } + } + + return nextNodeIndexInPool; + } + + protected virtual bool IsPathVisible(TreePath path) + { + return true; + } + + TreeItemRenderer InstantiateRenderer() + { + var itemRenderer = Instantiate(ItemRenderer); + var rtransform = itemRenderer.transform; + rtransform.SetParent(transform, false); + return itemRenderer; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeView.cs.meta b/Assets/Plugins/Scripts/UI/Trees/TreeView.cs.meta new file mode 100644 index 0000000..aeaba77 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/Trees/TreeView.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 12b7756f8361458788b8fcdcce01dc2d +timeCreated: 1546536320 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/VisibleDuringEdit.cs b/Assets/Plugins/Scripts/UI/VisibleDuringEdit.cs new file mode 100644 index 0000000..9e0ab08 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/VisibleDuringEdit.cs @@ -0,0 +1,22 @@ +using UnityEngine; + +namespace TutorialSystem.UI +{ + /// + /// A small helper that deactivates template elements when not in the editor. + /// Template elements are instantiated via a script, which also takes care of + /// setting the newly instantiated game object active. + /// + [ExecuteInEditMode] + public class VisibleDuringEdit : MonoBehaviour + { + void Awake() + { + if (Application.isPlaying) + { + Debug.Log("Hiding " + name); + gameObject.SetActive(false); + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/UI/VisibleDuringEdit.cs.meta b/Assets/Plugins/Scripts/UI/VisibleDuringEdit.cs.meta new file mode 100644 index 0000000..a33b545 --- /dev/null +++ b/Assets/Plugins/Scripts/UI/VisibleDuringEdit.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 626299593e724090a1512265b83f574f +timeCreated: 1546534943 \ No newline at end of file diff --git a/Assets/Plugins/Sound-License.txt b/Assets/Plugins/Sound-License.txt new file mode 100644 index 0000000..049a702 --- /dev/null +++ b/Assets/Plugins/Sound-License.txt @@ -0,0 +1,17 @@ + + +piano.wav: + + Created by lomographicmusic, licensed under CC-BY 3.0 license. + https://freesound.org/people/lomographicmusic/sounds/382482/ + +slam.wav: + + Created by Goup_1, licensed under CC-BY 3.0 license. + https://freesound.org/people/Goup_1/sounds/176532/ + +tada3.mp3: + + Created by usinggarageband, licensed under CC-BY 3.0 license. + https://freesound.org/people/usinggarageband/sounds/152574/ + \ No newline at end of file diff --git a/Assets/Plugins/Sound-License.txt.meta b/Assets/Plugins/Sound-License.txt.meta new file mode 100644 index 0000000..df83e4c --- /dev/null +++ b/Assets/Plugins/Sound-License.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6a52952a0b50c7e4b9926e5066727828 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/package.json b/Assets/Plugins/package.json new file mode 100644 index 0000000..0f91130 --- /dev/null +++ b/Assets/Plugins/package.json @@ -0,0 +1,12 @@ +{ + "name": "com.rabbitstewdio.unitytutorialsystem", + "displayName": "Unity Tutorial System", + "version": "0.0.1", + "unity": "2018.3", + "description": "A event driven system to implement in-game tutorials and success and failure trackers.", + "keywords": [ + "in-game tutorials", + "unity" + ], + "category": "Unity" +} \ No newline at end of file diff --git a/Packages/manifest.json b/Packages/manifest.json new file mode 100644 index 0000000..77ed7ff --- /dev/null +++ b/Packages/manifest.json @@ -0,0 +1,41 @@ +{ + "dependencies": { + "com.unity.ads": "2.3.1", + "com.unity.analytics": "3.2.2", + "com.unity.collab-proxy": "1.2.15", + "com.unity.package-manager-ui": "2.0.3", + "com.unity.purchasing": "2.0.3", + "com.unity.textmeshpro": "1.3.0", + "com.unity.xr.windowsmr.metro": "1.0.7", + "com.unity.modules.ai": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.cloth": "1.0.0", + "com.unity.modules.director": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.physics2d": "1.0.0", + "com.unity.modules.screencapture": "1.0.0", + "com.unity.modules.terrain": "1.0.0", + "com.unity.modules.terrainphysics": "1.0.0", + "com.unity.modules.tilemap": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.uielements": "1.0.0", + "com.unity.modules.umbra": "1.0.0", + "com.unity.modules.unityanalytics": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.unitywebrequesttexture": "1.0.0", + "com.unity.modules.unitywebrequestwww": "1.0.0", + "com.unity.modules.vehicles": "1.0.0", + "com.unity.modules.video": "1.0.0", + "com.unity.modules.vr": "1.0.0", + "com.unity.modules.wind": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } +} diff --git a/ProjectSettings/AudioManager.asset b/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000..4f31e74 --- /dev/null +++ b/ProjectSettings/AudioManager.asset @@ -0,0 +1,17 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!11 &1 +AudioManager: + m_ObjectHideFlags: 0 + m_Volume: 1 + Rolloff Scale: 1 + Doppler Factor: 1 + Default Speaker Mode: 2 + m_SampleRate: 0 + m_DSPBufferSize: 1024 + m_VirtualVoiceCount: 512 + m_RealVoiceCount: 32 + m_SpatializerPlugin: + m_AmbisonicDecoderPlugin: + m_DisableAudio: 0 + m_VirtualizeEffects: 1 diff --git a/ProjectSettings/ClusterInputManager.asset b/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 0000000..e7886b2 --- /dev/null +++ b/ProjectSettings/ClusterInputManager.asset @@ -0,0 +1,6 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!236 &1 +ClusterInputManager: + m_ObjectHideFlags: 0 + m_Inputs: [] diff --git a/ProjectSettings/DynamicsManager.asset b/ProjectSettings/DynamicsManager.asset new file mode 100644 index 0000000..b3c263d --- /dev/null +++ b/ProjectSettings/DynamicsManager.asset @@ -0,0 +1,30 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!55 &1 +PhysicsManager: + m_ObjectHideFlags: 0 + serializedVersion: 8 + m_Gravity: {x: 0, y: -9.81, z: 0} + m_DefaultMaterial: {fileID: 0} + m_BounceThreshold: 2 + m_SleepThreshold: 0.005 + m_DefaultContactOffset: 0.01 + m_DefaultSolverIterations: 6 + m_DefaultSolverVelocityIterations: 1 + m_QueriesHitBackfaces: 0 + m_QueriesHitTriggers: 1 + m_EnableAdaptiveForce: 0 + m_ClothInterCollisionDistance: 0 + m_ClothInterCollisionStiffness: 0 + m_ContactsGeneration: 1 + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_AutoSimulation: 1 + m_AutoSyncTransforms: 0 + m_ReuseCollisionCallbacks: 1 + m_ClothInterCollisionSettingsToggle: 0 + m_ContactPairsMode: 0 + m_BroadphaseType: 0 + m_WorldBounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 250, y: 250, z: 250} + m_WorldSubdivisions: 8 diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 0000000..ea88784 --- /dev/null +++ b/ProjectSettings/EditorBuildSettings.asset @@ -0,0 +1,11 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1045 &1 +EditorBuildSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Scenes: + - enabled: 1 + path: Assets/Scenes/SampleScene.unity + guid: 99c9720ab356a0642a771bea13969a05 + m_configObjects: {} diff --git a/ProjectSettings/EditorSettings.asset b/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000..29dea52 --- /dev/null +++ b/ProjectSettings/EditorSettings.asset @@ -0,0 +1,21 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!159 &1 +EditorSettings: + m_ObjectHideFlags: 0 + serializedVersion: 7 + m_ExternalVersionControlSupport: Visible Meta Files + m_SerializationMode: 2 + m_LineEndingsForNewScripts: 2 + m_DefaultBehaviorMode: 0 + m_SpritePackerMode: 0 + m_SpritePackerPaddingPower: 1 + m_EtcTextureCompressorBehavior: 1 + m_EtcTextureFastCompressor: 1 + m_EtcTextureNormalCompressor: 2 + m_EtcTextureBestCompressor: 4 + m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd + m_ProjectGenerationRootNamespace: + m_UserGeneratedProjectSuffix: + m_CollabEditorSettings: + inProgressEnabled: 1 diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset new file mode 100644 index 0000000..cd1c3d6 --- /dev/null +++ b/ProjectSettings/GraphicsSettings.asset @@ -0,0 +1,62 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!30 &1 +GraphicsSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_Deferred: + m_Mode: 1 + m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} + m_DeferredReflections: + m_Mode: 1 + m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} + m_ScreenSpaceShadows: + m_Mode: 1 + m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} + m_LegacyDeferred: + m_Mode: 1 + m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} + m_DepthNormals: + m_Mode: 1 + m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} + m_MotionVectors: + m_Mode: 1 + m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} + m_LightHalo: + m_Mode: 1 + m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} + m_LensFlare: + m_Mode: 1 + m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} + m_AlwaysIncludedShaders: + - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0} + m_PreloadedShaders: [] + m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, + type: 0} + m_CustomRenderPipeline: {fileID: 0} + m_TransparencySortMode: 0 + m_TransparencySortAxis: {x: 0, y: 0, z: 1} + m_DefaultRenderingPath: 1 + m_DefaultMobileRenderingPath: 1 + m_TierSettings: [] + m_LightmapStripping: 0 + m_FogStripping: 0 + m_InstancingStripping: 0 + m_LightmapKeepPlain: 1 + m_LightmapKeepDirCombined: 1 + m_LightmapKeepDynamicPlain: 1 + m_LightmapKeepDynamicDirCombined: 1 + m_LightmapKeepShadowMask: 1 + m_LightmapKeepSubtractive: 1 + m_FogKeepLinear: 1 + m_FogKeepExp: 1 + m_FogKeepExp2: 1 + m_AlbedoSwatchInfos: [] + m_LightsUseLinearIntensity: 0 + m_LightsUseColorTemperature: 0 diff --git a/ProjectSettings/InputManager.asset b/ProjectSettings/InputManager.asset new file mode 100644 index 0000000..17c8f53 --- /dev/null +++ b/ProjectSettings/InputManager.asset @@ -0,0 +1,295 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!13 &1 +InputManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Axes: + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: a + altPositiveButton: d + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: s + altPositiveButton: w + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: mouse 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: mouse 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: mouse 2 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse X + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse Y + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse ScrollWheel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 2 + joyNum: 0 + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 0 + type: 2 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 1 + type: 2 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 0 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 1 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 2 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 3 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: enter + altNegativeButton: + altPositiveButton: space + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Cancel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: escape + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 diff --git a/ProjectSettings/NavMeshAreas.asset b/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 0000000..3b0b7c3 --- /dev/null +++ b/ProjectSettings/NavMeshAreas.asset @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!126 &1 +NavMeshProjectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + areas: + - name: Walkable + cost: 1 + - name: Not Walkable + cost: 1 + - name: Jump + cost: 2 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + m_LastAgentTypeID: -887442657 + m_Settings: + - serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.75 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_SettingNames: + - Humanoid diff --git a/ProjectSettings/NetworkManager.asset b/ProjectSettings/NetworkManager.asset new file mode 100644 index 0000000..5dc6a83 --- /dev/null +++ b/ProjectSettings/NetworkManager.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!149 &1 +NetworkManager: + m_ObjectHideFlags: 0 + m_DebugLevel: 0 + m_Sendrate: 15 + m_AssetToPrefab: {} diff --git a/ProjectSettings/Physics2DSettings.asset b/ProjectSettings/Physics2DSettings.asset new file mode 100644 index 0000000..57760e2 --- /dev/null +++ b/ProjectSettings/Physics2DSettings.asset @@ -0,0 +1,38 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!19 &1 +Physics2DSettings: + m_ObjectHideFlags: 0 + serializedVersion: 4 + m_Gravity: {x: 0, y: -9.81} + m_DefaultMaterial: {fileID: 0} + m_VelocityIterations: 8 + m_PositionIterations: 3 + m_VelocityThreshold: 1 + m_MaxLinearCorrection: 0.2 + m_MaxAngularCorrection: 8 + m_MaxTranslationSpeed: 100 + m_MaxRotationSpeed: 360 + m_BaumgarteScale: 0.2 + m_BaumgarteTimeOfImpactScale: 0.75 + m_TimeToSleep: 0.5 + m_LinearSleepTolerance: 0.01 + m_AngularSleepTolerance: 2 + m_DefaultContactOffset: 0.01 + m_AutoSimulation: 1 + m_QueriesHitTriggers: 1 + m_QueriesStartInColliders: 1 + m_ChangeStopsCallbacks: 0 + m_CallbacksOnDisable: 1 + m_ReuseCollisionCallbacks: 1 + m_AutoSyncTransforms: 0 + m_AlwaysShowColliders: 0 + m_ShowColliderSleep: 1 + m_ShowColliderContacts: 0 + m_ShowColliderAABB: 0 + m_ContactArrowScale: 0.2 + m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} + m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} + m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} + m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/ProjectSettings/PresetManager.asset b/ProjectSettings/PresetManager.asset new file mode 100644 index 0000000..820e662 --- /dev/null +++ b/ProjectSettings/PresetManager.asset @@ -0,0 +1,27 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1386491679 &1 +PresetManager: + m_ObjectHideFlags: 0 + m_DefaultList: + - type: + m_NativeTypeID: 108 + m_ManagedTypePPtr: {fileID: 0} + m_ManagedTypeFallback: + defaultPresets: + - m_Preset: {fileID: 2655988077585873504, guid: c1cf8506f04ef2c4a88b64b6c4202eea, + type: 2} + - type: + m_NativeTypeID: 1020 + m_ManagedTypePPtr: {fileID: 0} + m_ManagedTypeFallback: + defaultPresets: + - m_Preset: {fileID: 2655988077585873504, guid: 0cd792cc87e492d43b4e95b205fc5cc6, + type: 2} + - type: + m_NativeTypeID: 1006 + m_ManagedTypePPtr: {fileID: 0} + m_ManagedTypeFallback: + defaultPresets: + - m_Preset: {fileID: 2655988077585873504, guid: 7a99f8aa944efe94cb9bd74562b7d5f9, + type: 2} diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset new file mode 100644 index 0000000..6ce5345 --- /dev/null +++ b/ProjectSettings/ProjectSettings.asset @@ -0,0 +1,621 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!129 &1 +PlayerSettings: + m_ObjectHideFlags: 0 + serializedVersion: 15 + productGUID: d039e26a85babdc4d9e67da1fb311400 + AndroidProfiler: 0 + AndroidFilterTouchesWhenObscured: 0 + AndroidEnableSustainedPerformanceMode: 0 + defaultScreenOrientation: 4 + targetDevice: 2 + useOnDemandResources: 0 + accelerometerFrequency: 60 + companyName: DefaultCompany + productName: Empty + defaultCursor: {fileID: 0} + cursorHotspot: {x: 0, y: 0} + m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} + m_ShowUnitySplashScreen: 1 + m_ShowUnitySplashLogo: 1 + m_SplashScreenOverlayOpacity: 1 + m_SplashScreenAnimation: 1 + m_SplashScreenLogoStyle: 1 + m_SplashScreenDrawMode: 0 + m_SplashScreenBackgroundAnimationZoom: 1 + m_SplashScreenLogoAnimationZoom: 1 + m_SplashScreenBackgroundLandscapeAspect: 1 + m_SplashScreenBackgroundPortraitAspect: 1 + m_SplashScreenBackgroundLandscapeUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenBackgroundPortraitUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenLogos: [] + m_VirtualRealitySplashScreen: {fileID: 0} + m_HolographicTrackingLossScreen: {fileID: 0} + defaultScreenWidth: 1024 + defaultScreenHeight: 768 + defaultScreenWidthWeb: 960 + defaultScreenHeightWeb: 600 + m_StereoRenderingPath: 0 + m_ActiveColorSpace: 0 + m_MTRendering: 1 + m_StackTraceTypes: 010000000100000001000000010000000100000001000000 + iosShowActivityIndicatorOnLoading: -1 + androidShowActivityIndicatorOnLoading: -1 + iosAppInBackgroundBehavior: 0 + displayResolutionDialog: 1 + iosAllowHTTPDownload: 1 + allowedAutorotateToPortrait: 1 + allowedAutorotateToPortraitUpsideDown: 1 + allowedAutorotateToLandscapeRight: 1 + allowedAutorotateToLandscapeLeft: 1 + useOSAutorotation: 1 + use32BitDisplayBuffer: 1 + preserveFramebufferAlpha: 0 + disableDepthAndStencilBuffers: 0 + androidStartInFullscreen: 1 + androidRenderOutsideSafeArea: 0 + androidBlitType: 0 + defaultIsNativeResolution: 1 + macRetinaSupport: 1 + runInBackground: 1 + captureSingleScreen: 0 + muteOtherAudioSources: 0 + Prepare IOS For Recording: 0 + Force IOS Speakers When Recording: 0 + deferSystemGesturesMode: 0 + hideHomeButton: 0 + submitAnalytics: 1 + usePlayerLog: 1 + bakeCollisionMeshes: 0 + forceSingleInstance: 0 + resizableWindow: 0 + useMacAppStoreValidation: 0 + macAppStoreCategory: public.app-category.games + gpuSkinning: 1 + graphicsJobs: 0 + xboxPIXTextureCapture: 0 + xboxEnableAvatar: 0 + xboxEnableKinect: 0 + xboxEnableKinectAutoTracking: 0 + xboxEnableFitness: 0 + visibleInBackground: 1 + allowFullscreenSwitch: 1 + graphicsJobMode: 0 + fullscreenMode: 1 + xboxSpeechDB: 0 + xboxEnableHeadOrientation: 0 + xboxEnableGuest: 0 + xboxEnablePIXSampling: 0 + metalFramebufferOnly: 0 + xboxOneResolution: 0 + xboxOneSResolution: 0 + xboxOneXResolution: 3 + xboxOneMonoLoggingLevel: 0 + xboxOneLoggingLevel: 1 + xboxOneDisableEsram: 0 + xboxOnePresentImmediateThreshold: 0 + switchQueueCommandMemory: 0 + vulkanEnableSetSRGBWrite: 0 + m_SupportedAspectRatios: + 4:3: 1 + 5:4: 1 + 16:10: 1 + 16:9: 1 + Others: 1 + bundleVersion: 0.1 + preloadedAssets: [] + metroInputSource: 0 + wsaTransparentSwapchain: 0 + m_HolographicPauseOnTrackingLoss: 1 + xboxOneDisableKinectGpuReservation: 0 + xboxOneEnable7thCore: 0 + isWsaHolographicRemotingEnabled: 0 + vrSettings: + cardboard: + depthFormat: 0 + enableTransitionView: 0 + daydream: + depthFormat: 0 + useSustainedPerformanceMode: 0 + enableVideoLayer: 0 + useProtectedVideoMemory: 0 + minimumSupportedHeadTracking: 0 + maximumSupportedHeadTracking: 1 + hololens: + depthFormat: 1 + depthBufferSharingEnabled: 0 + oculus: + sharedDepthBuffer: 1 + dashSupport: 1 + enable360StereoCapture: 0 + protectGraphicsMemory: 0 + enableFrameTimingStats: 0 + useHDRDisplay: 0 + m_ColorGamuts: 00000000 + targetPixelDensity: 30 + resolutionScalingMode: 0 + androidSupportedAspectRatio: 1 + androidMaxAspectRatio: 2.1 + applicationIdentifier: {} + buildNumber: {} + AndroidBundleVersionCode: 1 + AndroidMinSdkVersion: 16 + AndroidTargetSdkVersion: 0 + AndroidPreferredInstallLocation: 1 + aotOptions: + stripEngineCode: 1 + iPhoneStrippingLevel: 0 + iPhoneScriptCallOptimization: 0 + ForceInternetPermission: 0 + ForceSDCardPermission: 0 + CreateWallpaper: 0 + APKExpansionFiles: 0 + keepLoadedShadersAlive: 0 + StripUnusedMeshComponents: 1 + VertexChannelCompressionMask: 4054 + iPhoneSdkVersion: 988 + iOSTargetOSVersionString: 9.0 + tvOSSdkVersion: 0 + tvOSRequireExtendedGameController: 0 + tvOSTargetOSVersionString: 9.0 + uIPrerenderedIcon: 0 + uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 + uIStatusBarHidden: 1 + uIExitOnSuspend: 0 + uIStatusBarStyle: 0 + iPhoneSplashScreen: {fileID: 0} + iPhoneHighResSplashScreen: {fileID: 0} + iPhoneTallHighResSplashScreen: {fileID: 0} + iPhone47inSplashScreen: {fileID: 0} + iPhone55inPortraitSplashScreen: {fileID: 0} + iPhone55inLandscapeSplashScreen: {fileID: 0} + iPhone58inPortraitSplashScreen: {fileID: 0} + iPhone58inLandscapeSplashScreen: {fileID: 0} + iPadPortraitSplashScreen: {fileID: 0} + iPadHighResPortraitSplashScreen: {fileID: 0} + iPadLandscapeSplashScreen: {fileID: 0} + iPadHighResLandscapeSplashScreen: {fileID: 0} + appleTVSplashScreen: {fileID: 0} + appleTVSplashScreen2x: {fileID: 0} + tvOSSmallIconLayers: [] + tvOSSmallIconLayers2x: [] + tvOSLargeIconLayers: [] + tvOSLargeIconLayers2x: [] + tvOSTopShelfImageLayers: [] + tvOSTopShelfImageLayers2x: [] + tvOSTopShelfImageWideLayers: [] + tvOSTopShelfImageWideLayers2x: [] + iOSLaunchScreenType: 0 + iOSLaunchScreenPortrait: {fileID: 0} + iOSLaunchScreenLandscape: {fileID: 0} + iOSLaunchScreenBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreenFillPct: 100 + iOSLaunchScreenSize: 100 + iOSLaunchScreenCustomXibPath: + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreeniPadCustomXibPath: + iOSUseLaunchScreenStoryboard: 0 + iOSLaunchScreenCustomStoryboardPath: + iOSDeviceRequirements: [] + iOSURLSchemes: [] + iOSBackgroundModes: 0 + iOSMetalForceHardShadows: 0 + metalEditorSupport: 1 + metalAPIValidation: 1 + iOSRenderExtraFrameOnPause: 0 + appleDeveloperTeamID: + iOSManualSigningProvisioningProfileID: + tvOSManualSigningProvisioningProfileID: + iOSManualSigningProvisioningProfileType: 0 + tvOSManualSigningProvisioningProfileType: 0 + appleEnableAutomaticSigning: 0 + iOSRequireARKit: 0 + appleEnableProMotion: 0 + clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea + templatePackageId: com.unity.template.3d@1.0.4 + templateDefaultScene: Assets/Scenes/SampleScene.unity + AndroidTargetArchitectures: 5 + AndroidSplashScreenScale: 0 + androidSplashScreen: {fileID: 0} + AndroidKeystoreName: + AndroidKeyaliasName: + AndroidBuildApkPerCpuArchitecture: 0 + AndroidTVCompatibility: 1 + AndroidIsGame: 1 + AndroidEnableTango: 0 + androidEnableBanner: 1 + androidUseLowAccuracyLocation: 0 + m_AndroidBanners: + - width: 320 + height: 180 + banner: {fileID: 0} + androidGamepadSupportLevel: 0 + resolutionDialogBanner: {fileID: 0} + m_BuildTargetIcons: [] + m_BuildTargetPlatformIcons: [] + m_BuildTargetBatching: + - m_BuildTarget: Standalone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: tvOS + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: Android + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: iPhone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: WebGL + m_StaticBatching: 0 + m_DynamicBatching: 0 + m_BuildTargetGraphicsAPIs: + - m_BuildTarget: AndroidPlayer + m_APIs: 0b00000008000000 + m_Automatic: 1 + - m_BuildTarget: iOSSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: AppleTVSupport + m_APIs: 10000000 + m_Automatic: 0 + - m_BuildTarget: WebGLSupport + m_APIs: 0b000000 + m_Automatic: 1 + m_BuildTargetVRSettings: + - m_BuildTarget: Standalone + m_Enabled: 0 + m_Devices: + - Oculus + - OpenVR + m_BuildTargetEnableVuforiaSettings: [] + openGLRequireES31: 0 + openGLRequireES31AEP: 0 + m_TemplateCustomTags: {} + mobileMTRendering: + Android: 1 + iPhone: 1 + tvOS: 1 + m_BuildTargetGroupLightmapEncodingQuality: [] + m_BuildTargetGroupLightmapSettings: [] + playModeTestRunnerEnabled: 0 + runPlayModeTestAsEditModeTest: 0 + actionOnDotNetUnhandledException: 1 + enableInternalProfiler: 0 + logObjCUncaughtExceptions: 1 + enableCrashReportAPI: 0 + cameraUsageDescription: + locationUsageDescription: + microphoneUsageDescription: + switchNetLibKey: + switchSocketMemoryPoolSize: 6144 + switchSocketAllocatorPoolSize: 128 + switchSocketConcurrencyLimit: 14 + switchScreenResolutionBehavior: 2 + switchUseCPUProfiler: 0 + switchApplicationID: 0x01004b9000490000 + switchNSODependencies: + switchTitleNames_0: + switchTitleNames_1: + switchTitleNames_2: + switchTitleNames_3: + switchTitleNames_4: + switchTitleNames_5: + switchTitleNames_6: + switchTitleNames_7: + switchTitleNames_8: + switchTitleNames_9: + switchTitleNames_10: + switchTitleNames_11: + switchTitleNames_12: + switchTitleNames_13: + switchTitleNames_14: + switchPublisherNames_0: + switchPublisherNames_1: + switchPublisherNames_2: + switchPublisherNames_3: + switchPublisherNames_4: + switchPublisherNames_5: + switchPublisherNames_6: + switchPublisherNames_7: + switchPublisherNames_8: + switchPublisherNames_9: + switchPublisherNames_10: + switchPublisherNames_11: + switchPublisherNames_12: + switchPublisherNames_13: + switchPublisherNames_14: + switchIcons_0: {fileID: 0} + switchIcons_1: {fileID: 0} + switchIcons_2: {fileID: 0} + switchIcons_3: {fileID: 0} + switchIcons_4: {fileID: 0} + switchIcons_5: {fileID: 0} + switchIcons_6: {fileID: 0} + switchIcons_7: {fileID: 0} + switchIcons_8: {fileID: 0} + switchIcons_9: {fileID: 0} + switchIcons_10: {fileID: 0} + switchIcons_11: {fileID: 0} + switchIcons_12: {fileID: 0} + switchIcons_13: {fileID: 0} + switchIcons_14: {fileID: 0} + switchSmallIcons_0: {fileID: 0} + switchSmallIcons_1: {fileID: 0} + switchSmallIcons_2: {fileID: 0} + switchSmallIcons_3: {fileID: 0} + switchSmallIcons_4: {fileID: 0} + switchSmallIcons_5: {fileID: 0} + switchSmallIcons_6: {fileID: 0} + switchSmallIcons_7: {fileID: 0} + switchSmallIcons_8: {fileID: 0} + switchSmallIcons_9: {fileID: 0} + switchSmallIcons_10: {fileID: 0} + switchSmallIcons_11: {fileID: 0} + switchSmallIcons_12: {fileID: 0} + switchSmallIcons_13: {fileID: 0} + switchSmallIcons_14: {fileID: 0} + switchManualHTML: + switchAccessibleURLs: + switchLegalInformation: + switchMainThreadStackSize: 1048576 + switchPresenceGroupId: + switchLogoHandling: 0 + switchReleaseVersion: 0 + switchDisplayVersion: 1.0.0 + switchStartupUserAccount: 0 + switchTouchScreenUsage: 0 + switchSupportedLanguagesMask: 0 + switchLogoType: 0 + switchApplicationErrorCodeCategory: + switchUserAccountSaveDataSize: 0 + switchUserAccountSaveDataJournalSize: 0 + switchApplicationAttribute: 0 + switchCardSpecSize: -1 + switchCardSpecClock: -1 + switchRatingsMask: 0 + switchRatingsInt_0: 0 + switchRatingsInt_1: 0 + switchRatingsInt_2: 0 + switchRatingsInt_3: 0 + switchRatingsInt_4: 0 + switchRatingsInt_5: 0 + switchRatingsInt_6: 0 + switchRatingsInt_7: 0 + switchRatingsInt_8: 0 + switchRatingsInt_9: 0 + switchRatingsInt_10: 0 + switchRatingsInt_11: 0 + switchLocalCommunicationIds_0: + switchLocalCommunicationIds_1: + switchLocalCommunicationIds_2: + switchLocalCommunicationIds_3: + switchLocalCommunicationIds_4: + switchLocalCommunicationIds_5: + switchLocalCommunicationIds_6: + switchLocalCommunicationIds_7: + switchParentalControl: 0 + switchAllowsScreenshot: 1 + switchAllowsVideoCapturing: 1 + switchAllowsRuntimeAddOnContentInstall: 0 + switchDataLossConfirmation: 0 + switchUserAccountLockEnabled: 0 + switchSupportedNpadStyles: 3 + switchNativeFsCacheSize: 32 + switchIsHoldTypeHorizontal: 0 + switchSupportedNpadCount: 8 + switchSocketConfigEnabled: 0 + switchTcpInitialSendBufferSize: 32 + switchTcpInitialReceiveBufferSize: 64 + switchTcpAutoSendBufferSizeMax: 256 + switchTcpAutoReceiveBufferSizeMax: 256 + switchUdpSendBufferSize: 9 + switchUdpReceiveBufferSize: 42 + switchSocketBufferEfficiency: 4 + switchSocketInitializeEnabled: 1 + switchNetworkInterfaceManagerInitializeEnabled: 1 + switchPlayerConnectionEnabled: 1 + ps4NPAgeRating: 12 + ps4NPTitleSecret: + ps4NPTrophyPackPath: + ps4ParentalLevel: 11 + ps4ContentID: ED1633-NPXX51362_00-0000000000000000 + ps4Category: 0 + ps4MasterVersion: 01.00 + ps4AppVersion: 01.00 + ps4AppType: 0 + ps4ParamSfxPath: + ps4VideoOutPixelFormat: 0 + ps4VideoOutInitialWidth: 1920 + ps4VideoOutBaseModeInitialWidth: 1920 + ps4VideoOutReprojectionRate: 60 + ps4PronunciationXMLPath: + ps4PronunciationSIGPath: + ps4BackgroundImagePath: + ps4StartupImagePath: + ps4StartupImagesFolder: + ps4IconImagesFolder: + ps4SaveDataImagePath: + ps4SdkOverride: + ps4BGMPath: + ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4NPtitleDatPath: + ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: + ps4PlayTogetherPlayerCount: 0 + ps4EnterButtonAssignment: 1 + ps4ApplicationParam1: 0 + ps4ApplicationParam2: 0 + ps4ApplicationParam3: 0 + ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 + ps4GarlicHeapSize: 2048 + ps4ProGarlicHeapSize: 2560 + ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ + ps4pnSessions: 1 + ps4pnPresence: 1 + ps4pnFriends: 1 + ps4pnGameCustomData: 1 + playerPrefsSupport: 0 + enableApplicationExit: 0 + resetTempFolder: 1 + restrictedAudioUsageRights: 0 + ps4UseResolutionFallback: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4SocialScreenEnabled: 0 + ps4ScriptOptimizationLevel: 0 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: + ps4PatchDayOne: 0 + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4attribExclusiveVR: 0 + ps4disableAutoHideSplash: 0 + ps4videoRecordingFeaturesUsed: 0 + ps4contentSearchFeaturesUsed: 0 + ps4attribEyeToEyeDistanceSettingVR: 0 + ps4IncludedModules: [] + monoEnv: + splashScreenBackgroundSourceLandscape: {fileID: 0} + splashScreenBackgroundSourcePortrait: {fileID: 0} + spritePackerPolicy: + webGLMemorySize: 256 + webGLExceptionSupport: 1 + webGLNameFilesAsHashes: 0 + webGLDataCaching: 1 + webGLDebugSymbols: 0 + webGLEmscriptenArgs: + webGLModulesDirectory: + webGLTemplate: APPLICATION:Default + webGLAnalyzeBuildSize: 0 + webGLUseEmbeddedResources: 0 + webGLCompressionFormat: 1 + webGLLinkerTarget: 1 + webGLThreadsSupport: 0 + scriptingDefineSymbols: {} + platformArchitecture: {} + scriptingBackend: {} + il2cppCompilerConfiguration: {} + managedStrippingLevel: {} + incrementalIl2cppBuild: {} + allowUnsafeCode: 0 + additionalIl2CppArgs: + scriptingRuntimeVersion: 1 + apiCompatibilityLevelPerPlatform: {} + m_RenderingPath: 1 + m_MobileRenderingPath: 1 + metroPackageName: Template_3D + metroPackageVersion: + metroCertificatePath: + metroCertificatePassword: + metroCertificateSubject: + metroCertificateIssuer: + metroCertificateNotAfter: 0000000000000000 + metroApplicationDescription: Template_3D + wsaImages: {} + metroTileShortName: + metroTileShowName: 0 + metroMediumTileShowName: 0 + metroLargeTileShowName: 0 + metroWideTileShowName: 0 + metroSupportStreamingInstall: 0 + metroLastRequiredScene: 0 + metroDefaultTileSize: 1 + metroTileForegroundText: 2 + metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, + a: 1} + metroSplashScreenUseBackgroundColor: 0 + platformCapabilities: {} + metroTargetDeviceFamilies: {} + metroFTAName: + metroFTAFileTypes: [] + metroProtocolName: + metroCompilationOverrides: 1 + XboxOneProductId: + XboxOneUpdateKey: + XboxOneSandboxId: + XboxOneContentId: + XboxOneTitleId: + XboxOneSCId: + XboxOneGameOsOverridePath: + XboxOnePackagingOverridePath: + XboxOneAppManifestOverridePath: + XboxOneVersion: 1.0.0.0 + XboxOnePackageEncryption: 0 + XboxOnePackageUpdateGranularity: 2 + XboxOneDescription: + XboxOneLanguage: + - enus + XboxOneCapability: [] + XboxOneGameRating: {} + XboxOneIsContentPackage: 0 + XboxOneEnableGPUVariability: 0 + XboxOneSockets: {} + XboxOneSplashScreen: {fileID: 0} + XboxOneAllowedProductIds: [] + XboxOnePersistentLocalStorageSize: 0 + XboxOneXTitleMemory: 8 + xboxOneScriptCompiler: 0 + XboxOneOverrideIdentityName: + vrEditorSettings: + daydream: + daydreamIconForeground: {fileID: 0} + daydreamIconBackground: {fileID: 0} + cloudServicesEnabled: + UNet: 1 + luminIcon: + m_Name: + m_ModelFolderPath: + m_PortalFolderPath: + luminCert: + m_CertPath: + m_PrivateKeyPath: + luminIsChannelApp: 0 + luminVersion: + m_VersionCode: 1 + m_VersionName: + facebookSdkVersion: 7.9.4 + facebookAppId: + facebookCookies: 1 + facebookLogging: 1 + facebookStatus: 1 + facebookXfbml: 0 + facebookFrictionlessRequests: 1 + apiCompatibilityLevel: 6 + cloudProjectId: + framebufferDepthMemorylessMode: 0 + projectName: + organizationId: + cloudEnabled: 0 + enableNativePlatformBackendsForNewInputSystem: 0 + disableOldInputManagerSupport: 0 + legacyClampBlendShapeWeights: 0 diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt new file mode 100644 index 0000000..ca32b1e --- /dev/null +++ b/ProjectSettings/ProjectVersion.txt @@ -0,0 +1 @@ +m_EditorVersion: 2018.3.0f2 diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset new file mode 100644 index 0000000..0621bef --- /dev/null +++ b/ProjectSettings/QualitySettings.asset @@ -0,0 +1,190 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!47 &1 +QualitySettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_CurrentQuality: 4 + m_QualitySettings: + - serializedVersion: 2 + name: Very Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 15 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 1 + textureQuality: 1 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.3 + maximumLODLevel: 0 + particleRaycastBudget: 4 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.4 + maximumLODLevel: 0 + particleRaycastBudget: 16 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Medium + pixelLightCount: 1 + shadows: 1 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 1 + lodBias: 0.7 + maximumLODLevel: 0 + particleRaycastBudget: 64 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: High + pixelLightCount: 2 + shadows: 2 + shadowResolution: 1 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 2 + softParticles: 0 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1 + maximumLODLevel: 0 + particleRaycastBudget: 256 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Very High + pixelLightCount: 3 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 4 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1.5 + maximumLODLevel: 0 + particleRaycastBudget: 1024 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Ultra + pixelLightCount: 4 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 4 + shadowDistance: 150 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 4 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 2 + maximumLODLevel: 0 + particleRaycastBudget: 4096 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + m_PerPlatformDefaultQuality: + Android: 2 + Nintendo 3DS: 5 + Nintendo Switch: 5 + PS4: 5 + PSP2: 2 + Standalone: 5 + Tizen: 2 + WebGL: 3 + WiiU: 5 + Windows Store Apps: 5 + XboxOne: 5 + iPhone: 2 + tvOS: 2 diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset new file mode 100644 index 0000000..17cb803 --- /dev/null +++ b/ProjectSettings/TagManager.asset @@ -0,0 +1,43 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!78 &1 +TagManager: + serializedVersion: 2 + tags: [] + layers: + - Default + - TransparentFX + - Ignore Raycast + - + - Water + - UI + - + - + - PostProcessing + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + m_SortingLayers: + - name: Default + uniqueID: 0 + locked: 0 diff --git a/ProjectSettings/TimeManager.asset b/ProjectSettings/TimeManager.asset new file mode 100644 index 0000000..06bcc6d --- /dev/null +++ b/ProjectSettings/TimeManager.asset @@ -0,0 +1,9 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!5 &1 +TimeManager: + m_ObjectHideFlags: 0 + Fixed Timestep: 0.02 + Maximum Allowed Timestep: 0.1 + m_TimeScale: 1 + Maximum Particle Timestep: 0.03 diff --git a/ProjectSettings/UnityConnectSettings.asset b/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 0000000..fa0b146 --- /dev/null +++ b/ProjectSettings/UnityConnectSettings.asset @@ -0,0 +1,34 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!310 &1 +UnityConnectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 1 + m_Enabled: 0 + m_TestMode: 0 + m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events + m_EventUrl: https://cdp.cloud.unity3d.com/v1/events + m_ConfigUrl: https://config.uca.cloud.unity3d.com + m_TestInitMode: 0 + CrashReportingSettings: + m_EventUrl: https://perf-events.cloud.unity3d.com + m_Enabled: 0 + m_LogBufferSize: 10 + m_CaptureEditorExceptions: 1 + UnityPurchasingSettings: + m_Enabled: 0 + m_TestMode: 0 + UnityAnalyticsSettings: + m_Enabled: 0 + m_TestMode: 0 + m_InitializeOnStartup: 1 + UnityAdsSettings: + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_IosGameId: + m_AndroidGameId: + m_GameIds: {} + m_GameId: + PerformanceReportingSettings: + m_Enabled: 0 diff --git a/ProjectSettings/VFXManager.asset b/ProjectSettings/VFXManager.asset new file mode 100644 index 0000000..6e0eaca --- /dev/null +++ b/ProjectSettings/VFXManager.asset @@ -0,0 +1,11 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!937362698 &1 +VFXManager: + m_ObjectHideFlags: 0 + m_IndirectShader: {fileID: 0} + m_CopyBufferShader: {fileID: 0} + m_SortShader: {fileID: 0} + m_RenderPipeSettingsPath: + m_FixedTimeStep: 0.016666668 + m_MaxDeltaTime: 0.05 From dbd28b20614fd6a0a6c6263d7d7282a271722b07 Mon Sep 17 00:00:00 2001 From: Thomas Morgner Date: Mon, 11 Mar 2019 17:32:34 +0000 Subject: [PATCH 02/24] Files were at the wrong level. Needed to be in a module directory to work correctly. --- Assets/Plugins/UnityTutorialSystem.meta | 8 ++++++++ .../Plugins/{ => UnityTutorialSystem}/LICENSE.txt | 0 .../{ => UnityTutorialSystem}/LICENSE.txt.meta | 0 .../Plugins/{ => UnityTutorialSystem}/Scenes.meta | 0 .../Scenes/ContentList.prefab | 0 .../Scenes/ContentList.prefab.meta | 0 .../Scenes/DemonstrationEventLogger.asset | 0 .../Scenes/DemonstrationEventLogger.asset.meta | 0 .../Scenes/DemonstrationEventStream.asset | 0 .../Scenes/DemonstrationEventStream.asset.meta | 0 .../{ => UnityTutorialSystem}/Scenes/Material A.mat | 0 .../Scenes/Material A.mat.meta | 0 .../{ => UnityTutorialSystem}/Scenes/Material B.mat | 0 .../Scenes/Material B.mat.meta | 0 .../{ => UnityTutorialSystem}/Scenes/Material C.mat | 0 .../Scenes/Material C.mat.meta | 0 .../{ => UnityTutorialSystem}/Scenes/Material D.mat | 0 .../Scenes/Material D.mat.meta | 0 .../{ => UnityTutorialSystem}/Scenes/Material E.mat | 0 .../Scenes/Material E.mat.meta | 0 .../{ => UnityTutorialSystem}/Scenes/Player.prefab | 0 .../Scenes/Player.prefab.meta | 0 .../{ => UnityTutorialSystem}/Scenes/Scripts.meta | 0 .../Scenes/Scripts/CharacterBehaviour.cs | 0 .../Scenes/Scripts/CharacterBehaviour.cs.meta | 0 .../Scenes/TutorialAssembly.unity | 0 .../Scenes/TutorialAssembly.unity.meta | 0 .../{ => UnityTutorialSystem}/Scenes/piano.wav | Bin .../{ => UnityTutorialSystem}/Scenes/piano.wav.meta | 0 .../{ => UnityTutorialSystem}/Scenes/slam.wav | Bin .../{ => UnityTutorialSystem}/Scenes/slam.wav.meta | 0 .../{ => UnityTutorialSystem}/Scenes/tada3.mp3 | Bin .../{ => UnityTutorialSystem}/Scenes/tada3.mp3.meta | 0 .../Plugins/{ => UnityTutorialSystem}/Scripts.meta | 0 .../Scripts/Aggregators.meta | 0 .../Scripts/Aggregators/EventMessageAggregator.cs | 0 .../Aggregators/EventMessageAggregator.cs.meta | 0 .../Scripts/Aggregators/EventMessageCounter.cs | 0 .../Scripts/Aggregators/EventMessageCounter.cs.meta | 0 .../Scripts/Aggregators/EventSequenceAggregator.cs | 0 .../Aggregators/EventSequenceAggregator.cs.meta | 0 .../Scripts/Aggregators/EventSetAggregator.cs | 0 .../Scripts/Aggregators/EventSetAggregator.cs.meta | 0 .../Scripts/Aggregators/IEventMessageAggregator.cs | 0 .../Aggregators/IEventMessageAggregator.cs.meta | 0 .../Scripts/Aggregators/OneOfEventSetAggregator.cs | 0 .../Aggregators/OneOfEventSetAggregator.cs.meta | 0 .../{ => UnityTutorialSystem}/Scripts/Events.meta | 0 .../Scripts/Events/BasicEventStream.cs | 0 .../Scripts/Events/BasicEventStream.cs.meta | 0 .../Scripts/Events/BasicEventStreamEditorSupport.cs | 0 .../Events/BasicEventStreamEditorSupport.cs.meta | 0 .../Scripts/Events/BasicEventStreamMessage.cs | 0 .../Scripts/Events/BasicEventStreamMessage.cs.meta | 0 .../Scripts/Events/LogEventStream.cs | 0 .../Scripts/Events/LogEventStream.cs.meta | 0 .../Scripts/Events/NextEventSelector.cs | 0 .../Scripts/Events/NextEventSelector.cs.meta | 0 .../Scripts/Events/NextEventSelectorBase.cs | 0 .../Scripts/Events/NextEventSelectorBase.cs.meta | 0 .../Scripts/Events/PublishStreamEvent.cs | 0 .../Scripts/Events/PublishStreamEvent.cs.meta | 0 .../Scripts/Events/StaticStreamEventSource.cs | 0 .../Scripts/Events/StaticStreamEventSource.cs.meta | 0 .../Scripts/Events/StreamEventSource.cs | 0 .../Scripts/Events/StreamEventSource.cs.meta | 0 .../{ => UnityTutorialSystem}/Scripts/Helpers.meta | 0 .../Scripts/Helpers/MouseEventPublisher.cs | 0 .../Scripts/Helpers/MouseEventPublisher.cs.meta | 0 .../Helpers/NextEventAggregationActivator.cs | 0 .../Helpers/NextEventAggregationActivator.cs.meta | 0 .../Scripts/Helpers/TutorialEventMessage.cs | 0 .../Scripts/Helpers/TutorialEventMessage.cs.meta | 0 .../Scripts/Helpers/TutorialEventStateData.cs | 0 .../Scripts/Helpers/TutorialEventStateData.cs.meta | 0 .../Scripts/Helpers/TutorialEventStatePublisher.cs | 0 .../Helpers/TutorialEventStatePublisher.cs.meta | 0 .../Scripts/Helpers/TutorialEventStream.cs | 0 .../Scripts/Helpers/TutorialEventStream.cs.meta | 0 .../Scripts/Helpers/TutorialEventStreamManager.cs | 0 .../Helpers/TutorialEventStreamManager.cs.meta | 0 .../Helpers/TutorialEventTreeItemRenderer.cs | 0 .../Helpers/TutorialEventTreeItemRenderer.cs.meta | 0 .../Scripts/Helpers/TutorialEventTreeView.cs | 0 .../Scripts/Helpers/TutorialEventTreeView.cs.meta | 0 .../Scripts/SharedMethods.cs | 0 .../Scripts/SharedMethods.cs.meta | 0 .../{ => UnityTutorialSystem}/Scripts/UI.meta | 0 .../Scripts/UI/EventStreamState.cs | 0 .../Scripts/UI/EventStreamState.cs.meta | 0 .../{ => UnityTutorialSystem}/Scripts/UI/Trees.meta | 0 .../Scripts/UI/Trees/DefaultTreeModel.cs | 0 .../Scripts/UI/Trees/DefaultTreeModel.cs.meta | 0 .../Scripts/UI/Trees/DefaultTreeNode.cs | 0 .../Scripts/UI/Trees/DefaultTreeNode.cs.meta | 0 .../Scripts/UI/Trees/DefaultTreeNodeComparer.cs | 0 .../UI/Trees/DefaultTreeNodeComparer.cs.meta | 0 .../Scripts/UI/Trees/DefaultTreeSelectionModel.cs | 0 .../UI/Trees/DefaultTreeSelectionModel.cs.meta | 0 .../Scripts/UI/Trees/ITreeModel.cs | 0 .../Scripts/UI/Trees/ITreeModel.cs.meta | 0 .../Scripts/UI/Trees/ITreeSelectionModel.cs | 0 .../Scripts/UI/Trees/ITreeSelectionModel.cs.meta | 0 .../Scripts/UI/Trees/ListTreeModel.cs | 0 .../Scripts/UI/Trees/ListTreeModel.cs.meta | 0 .../Scripts/UI/Trees/SelectionMode.cs | 0 .../Scripts/UI/Trees/SelectionMode.cs.meta | 0 .../Scripts/UI/Trees/TreeItemRenderer.cs | 0 .../Scripts/UI/Trees/TreeItemRenderer.cs.meta | 0 .../Scripts/UI/Trees/TreeModel.cs | 0 .../Scripts/UI/Trees/TreeModel.cs.meta | 0 .../Scripts/UI/Trees/TreeModelEventArgs.cs | 0 .../Scripts/UI/Trees/TreeModelEventArgs.cs.meta | 0 .../Scripts/UI/Trees/TreeNodeExtensions.cs | 0 .../Scripts/UI/Trees/TreeNodeExtensions.cs.meta | 0 .../Scripts/UI/Trees/TreePath.cs | 0 .../Scripts/UI/Trees/TreePath.cs.meta | 0 .../Scripts/UI/Trees/TreeView.cs | 0 .../Scripts/UI/Trees/TreeView.cs.meta | 0 .../Scripts/UI/VisibleDuringEdit.cs | 0 .../Scripts/UI/VisibleDuringEdit.cs.meta | 0 .../{ => UnityTutorialSystem}/Sound-License.txt | 0 .../Sound-License.txt.meta | 0 .../Plugins/{ => UnityTutorialSystem}/package.json | 0 .../Plugins/UnityTutorialSystem/package.json.meta | 7 +++++++ 125 files changed, 15 insertions(+) create mode 100644 Assets/Plugins/UnityTutorialSystem.meta rename Assets/Plugins/{ => UnityTutorialSystem}/LICENSE.txt (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/LICENSE.txt.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/ContentList.prefab (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/ContentList.prefab.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/DemonstrationEventLogger.asset (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/DemonstrationEventLogger.asset.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/DemonstrationEventStream.asset (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/DemonstrationEventStream.asset.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/Material A.mat (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/Material A.mat.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/Material B.mat (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/Material B.mat.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/Material C.mat (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/Material C.mat.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/Material D.mat (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/Material D.mat.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/Material E.mat (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/Material E.mat.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/Player.prefab (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/Player.prefab.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/Scripts.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/Scripts/CharacterBehaviour.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/Scripts/CharacterBehaviour.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/TutorialAssembly.unity (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/TutorialAssembly.unity.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/piano.wav (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/piano.wav.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/slam.wav (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/slam.wav.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/tada3.mp3 (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scenes/tada3.mp3.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Aggregators.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Aggregators/EventMessageAggregator.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Aggregators/EventMessageAggregator.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Aggregators/EventMessageCounter.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Aggregators/EventMessageCounter.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Aggregators/EventSequenceAggregator.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Aggregators/EventSequenceAggregator.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Aggregators/EventSetAggregator.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Aggregators/EventSetAggregator.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Aggregators/IEventMessageAggregator.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Aggregators/IEventMessageAggregator.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Aggregators/OneOfEventSetAggregator.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Aggregators/OneOfEventSetAggregator.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events/BasicEventStream.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events/BasicEventStream.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events/BasicEventStreamEditorSupport.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events/BasicEventStreamEditorSupport.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events/BasicEventStreamMessage.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events/BasicEventStreamMessage.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events/LogEventStream.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events/LogEventStream.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events/NextEventSelector.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events/NextEventSelector.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events/NextEventSelectorBase.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events/NextEventSelectorBase.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events/PublishStreamEvent.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events/PublishStreamEvent.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events/StaticStreamEventSource.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events/StaticStreamEventSource.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events/StreamEventSource.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Events/StreamEventSource.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers/MouseEventPublisher.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers/MouseEventPublisher.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers/NextEventAggregationActivator.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers/NextEventAggregationActivator.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers/TutorialEventMessage.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers/TutorialEventMessage.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers/TutorialEventStateData.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers/TutorialEventStateData.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers/TutorialEventStatePublisher.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers/TutorialEventStatePublisher.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers/TutorialEventStream.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers/TutorialEventStream.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers/TutorialEventStreamManager.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers/TutorialEventStreamManager.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers/TutorialEventTreeItemRenderer.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers/TutorialEventTreeItemRenderer.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers/TutorialEventTreeView.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/Helpers/TutorialEventTreeView.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/SharedMethods.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/SharedMethods.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/EventStreamState.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/EventStreamState.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/DefaultTreeModel.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/DefaultTreeModel.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/DefaultTreeNode.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/DefaultTreeNode.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/DefaultTreeNodeComparer.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/DefaultTreeNodeComparer.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/DefaultTreeSelectionModel.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/DefaultTreeSelectionModel.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/ITreeModel.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/ITreeModel.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/ITreeSelectionModel.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/ITreeSelectionModel.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/ListTreeModel.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/ListTreeModel.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/SelectionMode.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/SelectionMode.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/TreeItemRenderer.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/TreeItemRenderer.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/TreeModel.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/TreeModel.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/TreeModelEventArgs.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/TreeModelEventArgs.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/TreeNodeExtensions.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/TreeNodeExtensions.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/TreePath.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/TreePath.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/TreeView.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/Trees/TreeView.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/VisibleDuringEdit.cs (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Scripts/UI/VisibleDuringEdit.cs.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Sound-License.txt (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/Sound-License.txt.meta (100%) rename Assets/Plugins/{ => UnityTutorialSystem}/package.json (100%) create mode 100644 Assets/Plugins/UnityTutorialSystem/package.json.meta diff --git a/Assets/Plugins/UnityTutorialSystem.meta b/Assets/Plugins/UnityTutorialSystem.meta new file mode 100644 index 0000000..ee63de2 --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 74f7829a3941fc646ad1cfa4efa7fe52 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/LICENSE.txt b/Assets/Plugins/UnityTutorialSystem/LICENSE.txt similarity index 100% rename from Assets/Plugins/LICENSE.txt rename to Assets/Plugins/UnityTutorialSystem/LICENSE.txt diff --git a/Assets/Plugins/LICENSE.txt.meta b/Assets/Plugins/UnityTutorialSystem/LICENSE.txt.meta similarity index 100% rename from Assets/Plugins/LICENSE.txt.meta rename to Assets/Plugins/UnityTutorialSystem/LICENSE.txt.meta diff --git a/Assets/Plugins/Scenes.meta b/Assets/Plugins/UnityTutorialSystem/Scenes.meta similarity index 100% rename from Assets/Plugins/Scenes.meta rename to Assets/Plugins/UnityTutorialSystem/Scenes.meta diff --git a/Assets/Plugins/Scenes/ContentList.prefab b/Assets/Plugins/UnityTutorialSystem/Scenes/ContentList.prefab similarity index 100% rename from Assets/Plugins/Scenes/ContentList.prefab rename to Assets/Plugins/UnityTutorialSystem/Scenes/ContentList.prefab diff --git a/Assets/Plugins/Scenes/ContentList.prefab.meta b/Assets/Plugins/UnityTutorialSystem/Scenes/ContentList.prefab.meta similarity index 100% rename from Assets/Plugins/Scenes/ContentList.prefab.meta rename to Assets/Plugins/UnityTutorialSystem/Scenes/ContentList.prefab.meta diff --git a/Assets/Plugins/Scenes/DemonstrationEventLogger.asset b/Assets/Plugins/UnityTutorialSystem/Scenes/DemonstrationEventLogger.asset similarity index 100% rename from Assets/Plugins/Scenes/DemonstrationEventLogger.asset rename to Assets/Plugins/UnityTutorialSystem/Scenes/DemonstrationEventLogger.asset diff --git a/Assets/Plugins/Scenes/DemonstrationEventLogger.asset.meta b/Assets/Plugins/UnityTutorialSystem/Scenes/DemonstrationEventLogger.asset.meta similarity index 100% rename from Assets/Plugins/Scenes/DemonstrationEventLogger.asset.meta rename to Assets/Plugins/UnityTutorialSystem/Scenes/DemonstrationEventLogger.asset.meta diff --git a/Assets/Plugins/Scenes/DemonstrationEventStream.asset b/Assets/Plugins/UnityTutorialSystem/Scenes/DemonstrationEventStream.asset similarity index 100% rename from Assets/Plugins/Scenes/DemonstrationEventStream.asset rename to Assets/Plugins/UnityTutorialSystem/Scenes/DemonstrationEventStream.asset diff --git a/Assets/Plugins/Scenes/DemonstrationEventStream.asset.meta b/Assets/Plugins/UnityTutorialSystem/Scenes/DemonstrationEventStream.asset.meta similarity index 100% rename from Assets/Plugins/Scenes/DemonstrationEventStream.asset.meta rename to Assets/Plugins/UnityTutorialSystem/Scenes/DemonstrationEventStream.asset.meta diff --git a/Assets/Plugins/Scenes/Material A.mat b/Assets/Plugins/UnityTutorialSystem/Scenes/Material A.mat similarity index 100% rename from Assets/Plugins/Scenes/Material A.mat rename to Assets/Plugins/UnityTutorialSystem/Scenes/Material A.mat diff --git a/Assets/Plugins/Scenes/Material A.mat.meta b/Assets/Plugins/UnityTutorialSystem/Scenes/Material A.mat.meta similarity index 100% rename from Assets/Plugins/Scenes/Material A.mat.meta rename to Assets/Plugins/UnityTutorialSystem/Scenes/Material A.mat.meta diff --git a/Assets/Plugins/Scenes/Material B.mat b/Assets/Plugins/UnityTutorialSystem/Scenes/Material B.mat similarity index 100% rename from Assets/Plugins/Scenes/Material B.mat rename to Assets/Plugins/UnityTutorialSystem/Scenes/Material B.mat diff --git a/Assets/Plugins/Scenes/Material B.mat.meta b/Assets/Plugins/UnityTutorialSystem/Scenes/Material B.mat.meta similarity index 100% rename from Assets/Plugins/Scenes/Material B.mat.meta rename to Assets/Plugins/UnityTutorialSystem/Scenes/Material B.mat.meta diff --git a/Assets/Plugins/Scenes/Material C.mat b/Assets/Plugins/UnityTutorialSystem/Scenes/Material C.mat similarity index 100% rename from Assets/Plugins/Scenes/Material C.mat rename to Assets/Plugins/UnityTutorialSystem/Scenes/Material C.mat diff --git a/Assets/Plugins/Scenes/Material C.mat.meta b/Assets/Plugins/UnityTutorialSystem/Scenes/Material C.mat.meta similarity index 100% rename from Assets/Plugins/Scenes/Material C.mat.meta rename to Assets/Plugins/UnityTutorialSystem/Scenes/Material C.mat.meta diff --git a/Assets/Plugins/Scenes/Material D.mat b/Assets/Plugins/UnityTutorialSystem/Scenes/Material D.mat similarity index 100% rename from Assets/Plugins/Scenes/Material D.mat rename to Assets/Plugins/UnityTutorialSystem/Scenes/Material D.mat diff --git a/Assets/Plugins/Scenes/Material D.mat.meta b/Assets/Plugins/UnityTutorialSystem/Scenes/Material D.mat.meta similarity index 100% rename from Assets/Plugins/Scenes/Material D.mat.meta rename to Assets/Plugins/UnityTutorialSystem/Scenes/Material D.mat.meta diff --git a/Assets/Plugins/Scenes/Material E.mat b/Assets/Plugins/UnityTutorialSystem/Scenes/Material E.mat similarity index 100% rename from Assets/Plugins/Scenes/Material E.mat rename to Assets/Plugins/UnityTutorialSystem/Scenes/Material E.mat diff --git a/Assets/Plugins/Scenes/Material E.mat.meta b/Assets/Plugins/UnityTutorialSystem/Scenes/Material E.mat.meta similarity index 100% rename from Assets/Plugins/Scenes/Material E.mat.meta rename to Assets/Plugins/UnityTutorialSystem/Scenes/Material E.mat.meta diff --git a/Assets/Plugins/Scenes/Player.prefab b/Assets/Plugins/UnityTutorialSystem/Scenes/Player.prefab similarity index 100% rename from Assets/Plugins/Scenes/Player.prefab rename to Assets/Plugins/UnityTutorialSystem/Scenes/Player.prefab diff --git a/Assets/Plugins/Scenes/Player.prefab.meta b/Assets/Plugins/UnityTutorialSystem/Scenes/Player.prefab.meta similarity index 100% rename from Assets/Plugins/Scenes/Player.prefab.meta rename to Assets/Plugins/UnityTutorialSystem/Scenes/Player.prefab.meta diff --git a/Assets/Plugins/Scenes/Scripts.meta b/Assets/Plugins/UnityTutorialSystem/Scenes/Scripts.meta similarity index 100% rename from Assets/Plugins/Scenes/Scripts.meta rename to Assets/Plugins/UnityTutorialSystem/Scenes/Scripts.meta diff --git a/Assets/Plugins/Scenes/Scripts/CharacterBehaviour.cs b/Assets/Plugins/UnityTutorialSystem/Scenes/Scripts/CharacterBehaviour.cs similarity index 100% rename from Assets/Plugins/Scenes/Scripts/CharacterBehaviour.cs rename to Assets/Plugins/UnityTutorialSystem/Scenes/Scripts/CharacterBehaviour.cs diff --git a/Assets/Plugins/Scenes/Scripts/CharacterBehaviour.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scenes/Scripts/CharacterBehaviour.cs.meta similarity index 100% rename from Assets/Plugins/Scenes/Scripts/CharacterBehaviour.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scenes/Scripts/CharacterBehaviour.cs.meta diff --git a/Assets/Plugins/Scenes/TutorialAssembly.unity b/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity similarity index 100% rename from Assets/Plugins/Scenes/TutorialAssembly.unity rename to Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity diff --git a/Assets/Plugins/Scenes/TutorialAssembly.unity.meta b/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity.meta similarity index 100% rename from Assets/Plugins/Scenes/TutorialAssembly.unity.meta rename to Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity.meta diff --git a/Assets/Plugins/Scenes/piano.wav b/Assets/Plugins/UnityTutorialSystem/Scenes/piano.wav similarity index 100% rename from Assets/Plugins/Scenes/piano.wav rename to Assets/Plugins/UnityTutorialSystem/Scenes/piano.wav diff --git a/Assets/Plugins/Scenes/piano.wav.meta b/Assets/Plugins/UnityTutorialSystem/Scenes/piano.wav.meta similarity index 100% rename from Assets/Plugins/Scenes/piano.wav.meta rename to Assets/Plugins/UnityTutorialSystem/Scenes/piano.wav.meta diff --git a/Assets/Plugins/Scenes/slam.wav b/Assets/Plugins/UnityTutorialSystem/Scenes/slam.wav similarity index 100% rename from Assets/Plugins/Scenes/slam.wav rename to Assets/Plugins/UnityTutorialSystem/Scenes/slam.wav diff --git a/Assets/Plugins/Scenes/slam.wav.meta b/Assets/Plugins/UnityTutorialSystem/Scenes/slam.wav.meta similarity index 100% rename from Assets/Plugins/Scenes/slam.wav.meta rename to Assets/Plugins/UnityTutorialSystem/Scenes/slam.wav.meta diff --git a/Assets/Plugins/Scenes/tada3.mp3 b/Assets/Plugins/UnityTutorialSystem/Scenes/tada3.mp3 similarity index 100% rename from Assets/Plugins/Scenes/tada3.mp3 rename to Assets/Plugins/UnityTutorialSystem/Scenes/tada3.mp3 diff --git a/Assets/Plugins/Scenes/tada3.mp3.meta b/Assets/Plugins/UnityTutorialSystem/Scenes/tada3.mp3.meta similarity index 100% rename from Assets/Plugins/Scenes/tada3.mp3.meta rename to Assets/Plugins/UnityTutorialSystem/Scenes/tada3.mp3.meta diff --git a/Assets/Plugins/Scripts.meta b/Assets/Plugins/UnityTutorialSystem/Scripts.meta similarity index 100% rename from Assets/Plugins/Scripts.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts.meta diff --git a/Assets/Plugins/Scripts/Aggregators.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators.meta similarity index 100% rename from Assets/Plugins/Scripts/Aggregators.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators.meta diff --git a/Assets/Plugins/Scripts/Aggregators/EventMessageAggregator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageAggregator.cs similarity index 100% rename from Assets/Plugins/Scripts/Aggregators/EventMessageAggregator.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageAggregator.cs diff --git a/Assets/Plugins/Scripts/Aggregators/EventMessageAggregator.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageAggregator.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Aggregators/EventMessageAggregator.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageAggregator.cs.meta diff --git a/Assets/Plugins/Scripts/Aggregators/EventMessageCounter.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageCounter.cs similarity index 100% rename from Assets/Plugins/Scripts/Aggregators/EventMessageCounter.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageCounter.cs diff --git a/Assets/Plugins/Scripts/Aggregators/EventMessageCounter.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageCounter.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Aggregators/EventMessageCounter.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageCounter.cs.meta diff --git a/Assets/Plugins/Scripts/Aggregators/EventSequenceAggregator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSequenceAggregator.cs similarity index 100% rename from Assets/Plugins/Scripts/Aggregators/EventSequenceAggregator.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSequenceAggregator.cs diff --git a/Assets/Plugins/Scripts/Aggregators/EventSequenceAggregator.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSequenceAggregator.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Aggregators/EventSequenceAggregator.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSequenceAggregator.cs.meta diff --git a/Assets/Plugins/Scripts/Aggregators/EventSetAggregator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSetAggregator.cs similarity index 100% rename from Assets/Plugins/Scripts/Aggregators/EventSetAggregator.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSetAggregator.cs diff --git a/Assets/Plugins/Scripts/Aggregators/EventSetAggregator.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSetAggregator.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Aggregators/EventSetAggregator.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSetAggregator.cs.meta diff --git a/Assets/Plugins/Scripts/Aggregators/IEventMessageAggregator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/IEventMessageAggregator.cs similarity index 100% rename from Assets/Plugins/Scripts/Aggregators/IEventMessageAggregator.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/IEventMessageAggregator.cs diff --git a/Assets/Plugins/Scripts/Aggregators/IEventMessageAggregator.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/IEventMessageAggregator.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Aggregators/IEventMessageAggregator.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/IEventMessageAggregator.cs.meta diff --git a/Assets/Plugins/Scripts/Aggregators/OneOfEventSetAggregator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/OneOfEventSetAggregator.cs similarity index 100% rename from Assets/Plugins/Scripts/Aggregators/OneOfEventSetAggregator.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/OneOfEventSetAggregator.cs diff --git a/Assets/Plugins/Scripts/Aggregators/OneOfEventSetAggregator.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/OneOfEventSetAggregator.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Aggregators/OneOfEventSetAggregator.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/OneOfEventSetAggregator.cs.meta diff --git a/Assets/Plugins/Scripts/Events.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Events.meta similarity index 100% rename from Assets/Plugins/Scripts/Events.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events.meta diff --git a/Assets/Plugins/Scripts/Events/BasicEventStream.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStream.cs similarity index 100% rename from Assets/Plugins/Scripts/Events/BasicEventStream.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStream.cs diff --git a/Assets/Plugins/Scripts/Events/BasicEventStream.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStream.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Events/BasicEventStream.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStream.cs.meta diff --git a/Assets/Plugins/Scripts/Events/BasicEventStreamEditorSupport.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamEditorSupport.cs similarity index 100% rename from Assets/Plugins/Scripts/Events/BasicEventStreamEditorSupport.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamEditorSupport.cs diff --git a/Assets/Plugins/Scripts/Events/BasicEventStreamEditorSupport.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamEditorSupport.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Events/BasicEventStreamEditorSupport.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamEditorSupport.cs.meta diff --git a/Assets/Plugins/Scripts/Events/BasicEventStreamMessage.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamMessage.cs similarity index 100% rename from Assets/Plugins/Scripts/Events/BasicEventStreamMessage.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamMessage.cs diff --git a/Assets/Plugins/Scripts/Events/BasicEventStreamMessage.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamMessage.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Events/BasicEventStreamMessage.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamMessage.cs.meta diff --git a/Assets/Plugins/Scripts/Events/LogEventStream.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs similarity index 100% rename from Assets/Plugins/Scripts/Events/LogEventStream.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs diff --git a/Assets/Plugins/Scripts/Events/LogEventStream.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Events/LogEventStream.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs.meta diff --git a/Assets/Plugins/Scripts/Events/NextEventSelector.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelector.cs similarity index 100% rename from Assets/Plugins/Scripts/Events/NextEventSelector.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelector.cs diff --git a/Assets/Plugins/Scripts/Events/NextEventSelector.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelector.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Events/NextEventSelector.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelector.cs.meta diff --git a/Assets/Plugins/Scripts/Events/NextEventSelectorBase.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelectorBase.cs similarity index 100% rename from Assets/Plugins/Scripts/Events/NextEventSelectorBase.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelectorBase.cs diff --git a/Assets/Plugins/Scripts/Events/NextEventSelectorBase.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelectorBase.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Events/NextEventSelectorBase.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelectorBase.cs.meta diff --git a/Assets/Plugins/Scripts/Events/PublishStreamEvent.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/PublishStreamEvent.cs similarity index 100% rename from Assets/Plugins/Scripts/Events/PublishStreamEvent.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/PublishStreamEvent.cs diff --git a/Assets/Plugins/Scripts/Events/PublishStreamEvent.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/PublishStreamEvent.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Events/PublishStreamEvent.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/PublishStreamEvent.cs.meta diff --git a/Assets/Plugins/Scripts/Events/StaticStreamEventSource.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StaticStreamEventSource.cs similarity index 100% rename from Assets/Plugins/Scripts/Events/StaticStreamEventSource.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/StaticStreamEventSource.cs diff --git a/Assets/Plugins/Scripts/Events/StaticStreamEventSource.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StaticStreamEventSource.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Events/StaticStreamEventSource.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/StaticStreamEventSource.cs.meta diff --git a/Assets/Plugins/Scripts/Events/StreamEventSource.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StreamEventSource.cs similarity index 100% rename from Assets/Plugins/Scripts/Events/StreamEventSource.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/StreamEventSource.cs diff --git a/Assets/Plugins/Scripts/Events/StreamEventSource.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StreamEventSource.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Events/StreamEventSource.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/StreamEventSource.cs.meta diff --git a/Assets/Plugins/Scripts/Helpers.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers.meta similarity index 100% rename from Assets/Plugins/Scripts/Helpers.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers.meta diff --git a/Assets/Plugins/Scripts/Helpers/MouseEventPublisher.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/MouseEventPublisher.cs similarity index 100% rename from Assets/Plugins/Scripts/Helpers/MouseEventPublisher.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/MouseEventPublisher.cs diff --git a/Assets/Plugins/Scripts/Helpers/MouseEventPublisher.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/MouseEventPublisher.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Helpers/MouseEventPublisher.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/MouseEventPublisher.cs.meta diff --git a/Assets/Plugins/Scripts/Helpers/NextEventAggregationActivator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/NextEventAggregationActivator.cs similarity index 100% rename from Assets/Plugins/Scripts/Helpers/NextEventAggregationActivator.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/NextEventAggregationActivator.cs diff --git a/Assets/Plugins/Scripts/Helpers/NextEventAggregationActivator.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/NextEventAggregationActivator.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Helpers/NextEventAggregationActivator.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/NextEventAggregationActivator.cs.meta diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventMessage.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventMessage.cs similarity index 100% rename from Assets/Plugins/Scripts/Helpers/TutorialEventMessage.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventMessage.cs diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventMessage.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventMessage.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Helpers/TutorialEventMessage.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventMessage.cs.meta diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventStateData.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStateData.cs similarity index 100% rename from Assets/Plugins/Scripts/Helpers/TutorialEventStateData.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStateData.cs diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventStateData.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStateData.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Helpers/TutorialEventStateData.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStateData.cs.meta diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventStatePublisher.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStatePublisher.cs similarity index 100% rename from Assets/Plugins/Scripts/Helpers/TutorialEventStatePublisher.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStatePublisher.cs diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventStatePublisher.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStatePublisher.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Helpers/TutorialEventStatePublisher.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStatePublisher.cs.meta diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventStream.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStream.cs similarity index 100% rename from Assets/Plugins/Scripts/Helpers/TutorialEventStream.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStream.cs diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventStream.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStream.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Helpers/TutorialEventStream.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStream.cs.meta diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventStreamManager.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStreamManager.cs similarity index 100% rename from Assets/Plugins/Scripts/Helpers/TutorialEventStreamManager.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStreamManager.cs diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventStreamManager.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStreamManager.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Helpers/TutorialEventStreamManager.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStreamManager.cs.meta diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventTreeItemRenderer.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventTreeItemRenderer.cs similarity index 100% rename from Assets/Plugins/Scripts/Helpers/TutorialEventTreeItemRenderer.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventTreeItemRenderer.cs diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventTreeItemRenderer.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventTreeItemRenderer.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Helpers/TutorialEventTreeItemRenderer.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventTreeItemRenderer.cs.meta diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventTreeView.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventTreeView.cs similarity index 100% rename from Assets/Plugins/Scripts/Helpers/TutorialEventTreeView.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventTreeView.cs diff --git a/Assets/Plugins/Scripts/Helpers/TutorialEventTreeView.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventTreeView.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/Helpers/TutorialEventTreeView.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventTreeView.cs.meta diff --git a/Assets/Plugins/Scripts/SharedMethods.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/SharedMethods.cs similarity index 100% rename from Assets/Plugins/Scripts/SharedMethods.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/SharedMethods.cs diff --git a/Assets/Plugins/Scripts/SharedMethods.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/SharedMethods.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/SharedMethods.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/SharedMethods.cs.meta diff --git a/Assets/Plugins/Scripts/UI.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI.meta similarity index 100% rename from Assets/Plugins/Scripts/UI.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI.meta diff --git a/Assets/Plugins/Scripts/UI/EventStreamState.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamState.cs similarity index 100% rename from Assets/Plugins/Scripts/UI/EventStreamState.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamState.cs diff --git a/Assets/Plugins/Scripts/UI/EventStreamState.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamState.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/UI/EventStreamState.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamState.cs.meta diff --git a/Assets/Plugins/Scripts/UI/Trees.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees.meta similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees.meta diff --git a/Assets/Plugins/Scripts/UI/Trees/DefaultTreeModel.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeModel.cs similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/DefaultTreeModel.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeModel.cs diff --git a/Assets/Plugins/Scripts/UI/Trees/DefaultTreeModel.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeModel.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/DefaultTreeModel.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeModel.cs.meta diff --git a/Assets/Plugins/Scripts/UI/Trees/DefaultTreeNode.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNode.cs similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/DefaultTreeNode.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNode.cs diff --git a/Assets/Plugins/Scripts/UI/Trees/DefaultTreeNode.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNode.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/DefaultTreeNode.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNode.cs.meta diff --git a/Assets/Plugins/Scripts/UI/Trees/DefaultTreeNodeComparer.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNodeComparer.cs similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/DefaultTreeNodeComparer.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNodeComparer.cs diff --git a/Assets/Plugins/Scripts/UI/Trees/DefaultTreeNodeComparer.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNodeComparer.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/DefaultTreeNodeComparer.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNodeComparer.cs.meta diff --git a/Assets/Plugins/Scripts/UI/Trees/DefaultTreeSelectionModel.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeSelectionModel.cs similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/DefaultTreeSelectionModel.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeSelectionModel.cs diff --git a/Assets/Plugins/Scripts/UI/Trees/DefaultTreeSelectionModel.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeSelectionModel.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/DefaultTreeSelectionModel.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeSelectionModel.cs.meta diff --git a/Assets/Plugins/Scripts/UI/Trees/ITreeModel.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeModel.cs similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/ITreeModel.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeModel.cs diff --git a/Assets/Plugins/Scripts/UI/Trees/ITreeModel.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeModel.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/ITreeModel.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeModel.cs.meta diff --git a/Assets/Plugins/Scripts/UI/Trees/ITreeSelectionModel.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeSelectionModel.cs similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/ITreeSelectionModel.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeSelectionModel.cs diff --git a/Assets/Plugins/Scripts/UI/Trees/ITreeSelectionModel.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeSelectionModel.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/ITreeSelectionModel.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeSelectionModel.cs.meta diff --git a/Assets/Plugins/Scripts/UI/Trees/ListTreeModel.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ListTreeModel.cs similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/ListTreeModel.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ListTreeModel.cs diff --git a/Assets/Plugins/Scripts/UI/Trees/ListTreeModel.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ListTreeModel.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/ListTreeModel.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ListTreeModel.cs.meta diff --git a/Assets/Plugins/Scripts/UI/Trees/SelectionMode.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/SelectionMode.cs similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/SelectionMode.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/SelectionMode.cs diff --git a/Assets/Plugins/Scripts/UI/Trees/SelectionMode.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/SelectionMode.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/SelectionMode.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/SelectionMode.cs.meta diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeItemRenderer.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeItemRenderer.cs similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/TreeItemRenderer.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeItemRenderer.cs diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeItemRenderer.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeItemRenderer.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/TreeItemRenderer.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeItemRenderer.cs.meta diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeModel.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModel.cs similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/TreeModel.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModel.cs diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeModel.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModel.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/TreeModel.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModel.cs.meta diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeModelEventArgs.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModelEventArgs.cs similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/TreeModelEventArgs.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModelEventArgs.cs diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeModelEventArgs.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModelEventArgs.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/TreeModelEventArgs.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModelEventArgs.cs.meta diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeNodeExtensions.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeNodeExtensions.cs similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/TreeNodeExtensions.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeNodeExtensions.cs diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeNodeExtensions.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeNodeExtensions.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/TreeNodeExtensions.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeNodeExtensions.cs.meta diff --git a/Assets/Plugins/Scripts/UI/Trees/TreePath.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreePath.cs similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/TreePath.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreePath.cs diff --git a/Assets/Plugins/Scripts/UI/Trees/TreePath.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreePath.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/TreePath.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreePath.cs.meta diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeView.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/TreeView.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs diff --git a/Assets/Plugins/Scripts/UI/Trees/TreeView.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/UI/Trees/TreeView.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs.meta diff --git a/Assets/Plugins/Scripts/UI/VisibleDuringEdit.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/VisibleDuringEdit.cs similarity index 100% rename from Assets/Plugins/Scripts/UI/VisibleDuringEdit.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/VisibleDuringEdit.cs diff --git a/Assets/Plugins/Scripts/UI/VisibleDuringEdit.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/VisibleDuringEdit.cs.meta similarity index 100% rename from Assets/Plugins/Scripts/UI/VisibleDuringEdit.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/VisibleDuringEdit.cs.meta diff --git a/Assets/Plugins/Sound-License.txt b/Assets/Plugins/UnityTutorialSystem/Sound-License.txt similarity index 100% rename from Assets/Plugins/Sound-License.txt rename to Assets/Plugins/UnityTutorialSystem/Sound-License.txt diff --git a/Assets/Plugins/Sound-License.txt.meta b/Assets/Plugins/UnityTutorialSystem/Sound-License.txt.meta similarity index 100% rename from Assets/Plugins/Sound-License.txt.meta rename to Assets/Plugins/UnityTutorialSystem/Sound-License.txt.meta diff --git a/Assets/Plugins/package.json b/Assets/Plugins/UnityTutorialSystem/package.json similarity index 100% rename from Assets/Plugins/package.json rename to Assets/Plugins/UnityTutorialSystem/package.json diff --git a/Assets/Plugins/UnityTutorialSystem/package.json.meta b/Assets/Plugins/UnityTutorialSystem/package.json.meta new file mode 100644 index 0000000..726e0b7 --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 760276944df581247a57cc0cac21f035 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From 5b1d546b8d129710fa264a5969b65dfff1b18d4c Mon Sep 17 00:00:00 2001 From: Thomas Morgner Date: Mon, 11 Mar 2019 17:33:02 +0000 Subject: [PATCH 03/24] Code uses TextMeshPro so we need their essentials pack. --- Assets/TextMesh Pro/Resources.meta | 8 + .../Resources/Fonts & Materials.meta | 9 + .../LiberationSans SDF - Drop Shadow.mat | 103 + .../LiberationSans SDF - Drop Shadow.mat.meta | 8 + .../LiberationSans SDF - Outline.mat | 101 + .../LiberationSans SDF - Outline.mat.meta | 8 + .../LiberationSans SDF.asset | 3886 +++++++++++++++++ .../LiberationSans SDF.asset.meta | 8 + .../LineBreaking Following Characters.txt | 1 + ...LineBreaking Following Characters.txt.meta | 8 + .../LineBreaking Leading Characters.txt | 1 + .../LineBreaking Leading Characters.txt.meta | 8 + Assets/TextMesh Pro/Resources/Shaders.meta | 9 + .../Shaders/TMP_Bitmap-Custom-Atlas.shader | 142 + .../TMP_Bitmap-Custom-Atlas.shader.meta | 7 + .../Shaders/TMP_Bitmap-Mobile.shader | 144 + .../Shaders/TMP_Bitmap-Mobile.shader.meta | 7 + .../Resources/Shaders/TMP_Bitmap.shader | 142 + .../Resources/Shaders/TMP_Bitmap.shader.meta | 7 + .../Resources/Shaders/TMP_SDF Overlay.shader | 304 ++ .../Shaders/TMP_SDF Overlay.shader.meta | 7 + .../Shaders/TMP_SDF-Mobile Masking.shader | 245 ++ .../TMP_SDF-Mobile Masking.shader.meta | 9 + .../Shaders/TMP_SDF-Mobile Overlay.shader | 229 + .../TMP_SDF-Mobile Overlay.shader.meta | 7 + .../Resources/Shaders/TMP_SDF-Mobile.shader | 229 + .../Shaders/TMP_SDF-Mobile.shader.meta | 7 + .../Shaders/TMP_SDF-Surface-Mobile.shader | 136 + .../TMP_SDF-Surface-Mobile.shader.meta | 7 + .../Resources/Shaders/TMP_SDF-Surface.shader | 155 + .../Shaders/TMP_SDF-Surface.shader.meta | 7 + .../Resources/Shaders/TMP_SDF.shader | 305 ++ .../Resources/Shaders/TMP_SDF.shader.meta | 7 + .../Resources/Shaders/TMP_Sprite.shader | 113 + .../Resources/Shaders/TMP_Sprite.shader.meta | 9 + .../Resources/Shaders/TMPro.cginc | 84 + .../Resources/Shaders/TMPro.cginc.meta | 7 + .../Resources/Shaders/TMPro_Properties.cginc | 84 + .../Shaders/TMPro_Properties.cginc.meta | 7 + .../Resources/Shaders/TMPro_Surface.cginc | 115 + .../Shaders/TMPro_Surface.cginc.meta | 7 + .../TextMesh Pro/Resources/Sprite Assets.meta | 9 + .../Resources/Sprite Assets/EmojiOne.asset | 296 ++ .../Sprite Assets/EmojiOne.asset.meta | 8 + .../TextMesh Pro/Resources/Style Sheets.meta | 9 + .../Style Sheets/Default Style Sheet.asset | 68 + .../Default Style Sheet.asset.meta | 8 + .../TextMesh Pro/Resources/TMP Settings.asset | 103 + .../Resources/TMP Settings.asset.meta | 8 + Assets/TextMesh Pro/Sprites.meta | 8 + .../Sprites/EmojiOne Attribution.txt | 3 + .../Sprites/EmojiOne Attribution.txt.meta | 7 + Assets/TextMesh Pro/Sprites/EmojiOne.json | 156 + .../TextMesh Pro/Sprites/EmojiOne.json.meta | 8 + Assets/TextMesh Pro/Sprites/EmojiOne.png | Bin 0 -> 73304 bytes Assets/TextMesh Pro/Sprites/EmojiOne.png.meta | 431 ++ 56 files changed, 7809 insertions(+) create mode 100644 Assets/TextMesh Pro/Resources.meta create mode 100644 Assets/TextMesh Pro/Resources/Fonts & Materials.meta create mode 100644 Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat create mode 100644 Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat.meta create mode 100644 Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat create mode 100644 Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat.meta create mode 100644 Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset create mode 100644 Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset.meta create mode 100644 Assets/TextMesh Pro/Resources/LineBreaking Following Characters.txt create mode 100644 Assets/TextMesh Pro/Resources/LineBreaking Following Characters.txt.meta create mode 100644 Assets/TextMesh Pro/Resources/LineBreaking Leading Characters.txt create mode 100644 Assets/TextMesh Pro/Resources/LineBreaking Leading Characters.txt.meta create mode 100644 Assets/TextMesh Pro/Resources/Shaders.meta create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap-Custom-Atlas.shader create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap-Mobile.shader create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap-Mobile.shader.meta create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap.shader create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap.shader.meta create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_SDF Overlay.shader create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_SDF Overlay.shader.meta create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile Masking.shader create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile Masking.shader.meta create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile Overlay.shader create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile Overlay.shader.meta create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile.shader create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile.shader.meta create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Surface-Mobile.shader create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Surface-Mobile.shader.meta create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Surface.shader create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Surface.shader.meta create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_SDF.shader create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_SDF.shader.meta create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_Sprite.shader create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMP_Sprite.shader.meta create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMPro.cginc create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMPro.cginc.meta create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMPro_Properties.cginc create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMPro_Properties.cginc.meta create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMPro_Surface.cginc create mode 100644 Assets/TextMesh Pro/Resources/Shaders/TMPro_Surface.cginc.meta create mode 100644 Assets/TextMesh Pro/Resources/Sprite Assets.meta create mode 100644 Assets/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset create mode 100644 Assets/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset.meta create mode 100644 Assets/TextMesh Pro/Resources/Style Sheets.meta create mode 100644 Assets/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset create mode 100644 Assets/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset.meta create mode 100644 Assets/TextMesh Pro/Resources/TMP Settings.asset create mode 100644 Assets/TextMesh Pro/Resources/TMP Settings.asset.meta create mode 100644 Assets/TextMesh Pro/Sprites.meta create mode 100644 Assets/TextMesh Pro/Sprites/EmojiOne Attribution.txt create mode 100644 Assets/TextMesh Pro/Sprites/EmojiOne Attribution.txt.meta create mode 100644 Assets/TextMesh Pro/Sprites/EmojiOne.json create mode 100644 Assets/TextMesh Pro/Sprites/EmojiOne.json.meta create mode 100644 Assets/TextMesh Pro/Sprites/EmojiOne.png create mode 100644 Assets/TextMesh Pro/Sprites/EmojiOne.png.meta diff --git a/Assets/TextMesh Pro/Resources.meta b/Assets/TextMesh Pro/Resources.meta new file mode 100644 index 0000000..cfc142f --- /dev/null +++ b/Assets/TextMesh Pro/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 243e06394e614e5d99fab26083b707fa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Fonts & Materials.meta b/Assets/TextMesh Pro/Resources/Fonts & Materials.meta new file mode 100644 index 0000000..8a01112 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Fonts & Materials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 731f1baa9d144a9897cb1d341c2092b8 +folderAsset: yes +timeCreated: 1442040525 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat new file mode 100644 index 0000000..403fbaf --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat @@ -0,0 +1,103 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: LiberationSans SDF - Drop Shadow + m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3} + m_ShaderKeywords: OUTLINE_ON UNDERLAY_ON + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2846298, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _DiffusePower: 1 + - _FaceDilate: 0.1 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 10 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0.1 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 0.9 + - _ScaleRatioB: 0.73125 + - _ScaleRatioC: 0.64125 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 1024 + - _TextureWidth: 1024 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0.5 + - _UnderlayOffsetY: -0.5 + - _UnderlaySoftness: 0.05 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} diff --git a/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat.meta b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat.meta new file mode 100644 index 0000000..fbd2cdb --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e73a58f6e2794ae7b1b7e50b7fb811b0 +timeCreated: 1484172806 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat new file mode 100644 index 0000000..0d3303a --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat @@ -0,0 +1,101 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: LiberationSans SDF - Outline + m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3} + m_ShaderKeywords: OUTLINE_ON + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2846298, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0.1 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 10 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0.1 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 0.9 + - _ScaleRatioB: 0.73125 + - _ScaleRatioC: 0.64125 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 1024 + - _TextureWidth: 1024 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} diff --git a/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat.meta b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat.meta new file mode 100644 index 0000000..88d6334 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 79459efec17a4d00a321bdcc27bbc385 +timeCreated: 1484172856 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset new file mode 100644 index 0000000..dcf2d70 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset @@ -0,0 +1,3886 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2180264 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: LiberationSans SDF Material + m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3} + m_ShaderKeywords: _EMISSION + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2846298} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _Diffuse: 0.5 + - _DstBlend: 0 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 10 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _Parallax: 0.02 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 0.9 + - _ScaleRatioB: 0.73125 + - _ScaleRatioC: 0.73125 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SpecularPower: 2 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 1024 + - _TextureWidth: 1024 + - _UVSec: 0 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + - _ZWrite: 1 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} +--- !u!28 &2846298 +Texture2D: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: LiberationSans SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 1024 + m_Height: 1024 + m_CompleteImageSize: 1048576 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + image data: 1048576 + _typelessdata: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000204050607080909090908080706050402010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020201000000000000000000000000000000000000000000000000020406070808070706040100000000000000000000000000000000010305070708080706050300000000000000000000000000000000000000000000000004070808080808080808080807050200000000000000000000000000000000000000000000000001050708080808080808080808080808080808080808080808080808080808080808080808080808080808080808070501000000000000000000000000000000000000000000000000000000000000020608080808080808080808080807040000000000000000000000000000000000000000020507080808080808080808080807040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102020202020202020000000000000000000000000000000000000000000000000000000000000001040607080808080705030100000000000000000000000000000000000000000000000000000000000000000000000004060808080808080808070502000000000000000000000000000000000003060707070707070707070707070707070707070707070707070707070503000000000000000000000000000000000000000000000000000004060808080808080808070502000000000000000000000000000000000000000000000000000000000000020507070707070707070502000000000000000000000000000000000000000000000000000000000005090c0e0f0f0f0f0f0f0f0e0c080300000000000000000000000000000000000000000000000000000002070a0d0d0d0d0d0d0d0d0c090500000000000000000000000000000002070b0e101010101010101010100e0c07020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010407090b0c0e0f1010111110100f0e0d0c0a0806030000000000000000000000000000000000000000000000000000000000000000000005090c0e0e0e0e0e0e0e0e0e0e0d0a07020000000000000000000000000000000000000000000000000000000000000001060a0c0e0e0e0e0e0e0e0e0e0e0c090500000000000000000000000000000000000000000000000000000000000000030507080808080808080808060300000000000000000000000000000000000000000000000000000000000000000000000000000205080a0d0f1012131415151515151515141312100f0d0b09070402000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001060a0d0e0f0f0f0f0f0f0f0e0c080300000000000000000000000000000000000005090c0f1113141415141312100e0b07030000000000000000000003070a0d1012131415141413110f0d090601000000000000000000000000000000000000060c10131515151515151515151514110e0902000000000000000000000000000000000000000002080d11141515151515151515151515151515151515151515151515151515151515151515151515151515151515151514110d08020000000000000000000000000000000000000000000000000000040a0e1214151515151515151515151513100c060000000000000000000000000000000003090e1214151515151515151515151513110c070000000000000000000000000000000000000000000000000000000000000000000000000000000003080b0e0f0f0f0f0f0f0f0e0d0a060100000000000000000000000000000000000000000000000002070a0e101214151515141312100d0a060200000000000000000000000000000000000000000000000000000000000000060b1013151515151515151514110e080200000000000000000000000000060c1012141414141414141414141414141414141414141414141414141414120f0b0500000000000000000000000000000000000000000000060b1013151515151515151514110e08020000000000000000000000000000000000000000000000000000040a0e111314141414141413110e090400000000000000000000000000000000000000000000000000030a1015191b1b1b1b1b1b1b1b1a18140f0801000000000000000000000000000000000000000000000000070e1317191a1a1a1a1a1a1a1815110b04000000000000000000000000060d13181b1d1d1d1d1d1d1d1d1d1d1b18130d060000000000000001040607090a0a0b0b0b0b0b0a090807050301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003070b0e11131517191a1c1c1d1d1d1d1d1c1b1a181714120f0c09050100000000000000000000000000000000000000000000000000000000040b1115191a1a1a1a1a1a1a1a1a1a1917130d070000000000000000000000000000000000000000000000000000000000060c1216191a1a1a1a1a1a1a1a1a1a1916110b05000000000000000000000000000000000000000000000000000105090d101213141515151515151515130f0b0500000000000000000000000000000000000000000000000000000000000000000004080b0f121417191b1d1e20212122222222222121201e1d1c1a181613110e0b080501000000000000000000000000000000000000000000000000000000000000000000000000000000050c12161a1b1b1b1b1b1b1b1b1a18140f08010000000000000000000000000001070c1115181b1e1f21212121201f1d1a17140f0b05000000000000040a0f13171a1c1f2021212121201e1c1916120d08020000000000000000000000000000020a11181c2021222222222222222222211e19140d05000000000000000000000000000000000000050d13191e2022222222222222222222222222222222222222222222222222222222222222222222222222222222222222201e19130d05000000000000000000000000000000000000000000000000070e151a1e212222222222222222222221201c18110a0200000000000000000000000000060e151a1e212222222222222222222222201d18120b0300000000000000000000000000000000000000000000000000000000000000000000000001080f14181a1b1b1b1b1b1b1b1b1a17120c0600000000000000000000000000000000000000000004090e13171a1d1f2021222221201e1c1916120d0803000000000000000000000000000000000000000000000000000000010911171c1f2122222222222222201e19140d0500000000000000000000030a11171c1f2020202020202020202020202020202020202020202020202020201f1b17110a02000000000000000000000000000000000000010911171c1f2122222222222222201e19140d05000000000000000000000000000000000000000000000000080f151a1e20202020202020201e1a150e070000000000000000000000000000000000000000000000050d151c212527282828282828282724201a130b02000000000000000000000000000000000000000000010a12191f23262727272727272725211c160f06000000000000000000000810181e2427292a2a2a2a2a2a2a2a2927241f18110800000205080b0e10121415161718181818181716151312100d0b0804010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070b0f13171a1d202224262728292a2a2a2a2a2928272523211f1c1915120d090500000000000000000000000000000000000000000000000000060e161c21252727272727272727272726231e1811090000000000000000000000000000000000000000000000000000000810171d22262727272727272727272725221d160f070000000000000000000000000000000000000000000001070d1115191c1e202122222222222222211f1b161009000000000000000000000000000000000000000000000000000000000002070c1014171b1e212326282a2b2c2d2e2f2f2f2f2e2e2d2c2b2a28262422201d1b1814110e0a060200000000000000000000000000000000000000000000000000000000000000000000000710171d222628282828282828282724201a130b020000000000000000000000060d13181d2125282a2c2d2e2e2e2d2b292724201b16110a040000030910151a1f2326292b2d2e2e2e2d2c2b2825221e19130e07000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2d2a251f170f0600000000000000000000000000000000050e171e252a2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2a251e170e050000000000000000000000000000000000000000000007101920262b2e2e2e2e2e2e2e2e2e2e2e2e2c28231c140b02000000000000000000000007101820262a2d2e2e2e2e2e2e2e2e2e2e2e2c29231d150c0300000000000000000000000000000000000000000000000000000000000000000000020b131a202427282828282828282826231e17100700000000000000000000000000000000000002090f151a1f2326292b2d2e2e2e2e2d2b2926221e19140e0801000000000000000000000000000000000000000000000000010a131b22282c2e2e2e2e2e2e2e2e2d2a251f170f050000000000000000030c151c23282b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b27221b140b0200000000000000000000000000000000010a131b22282c2e2e2e2e2e2e2e2e2d2a251f170f050000000000000000000000000000000000000000000009111920262a2d2d2d2d2d2d2d2d2a2620191108000000000000000000000000000000000000000000030d171f272d31343535353535353534302b251d140b0100000000000000000000000000000000000000000a131c242a2f3234343434343433312d2820180f06000000000000000007111a222a2f343636363636363636363634302a221a11070a0e1215181a1d1f202223242425252524242322201e1c1a1714110d090500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e13171c1f2326292c2f3132343536363737373636353332302e2b2825211e1a15100b0600000000000000000000000000000000000000000000050f1820272d3134343434343434343434332f2a231b12090000000000000000000000000000000000000000000000000007111a22292e3234343434343434343434322e28211910060000000000000000000000000000000000000000060c13181d2225282b2d2e2e2e2e2e2e2e2e2e2b27211a1209000000000000000000000000000000000000000000000000000004090e13181c2024272a2d3032343638393a3b3b3c3c3c3b3b3a3938363533312f2c2a2724211d1a16120e0a05010000000000000000000000000000000000000000000000000000000000000006101921292e32353535353535353534302b251d140b010000000000000000020a11181e24292d313437393a3b3b3a3a383633302c27221c150e07060d141b21262b2f333538393a3b3b3a393735322e29241f19120b03000000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b3b3a36302921180e030000000000000000000000000000030d1720293036393b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3936302920170d030000000000000000000000000000000000000000051019222b31373a3b3b3b3b3b3b3b3b3b3b3b38342e261d140a00000000000000000000050f19222a31363a3b3b3b3b3b3b3b3b3b3b3b39352e271e150b000000000000000000000000000000000000000000000000000000000000000000000a141d242b30343535353535353535332f292219100700000000000000000000000000000000050d141a20262b2f3336383a3b3b3b3b393835322e2a251f19120b04000000000000000000000000000000000000000000000009131c252d33383b3b3b3b3b3b3b3b3a36302921170d03000000000000000b151e262e34383a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a37332d251d13090000000000000000000000000000000009131c252d33383b3b3b3b3b3b3b3b3a36302921170d03000000000000000000000000000000000000000007111b232b3237393a3a3a3a3a3a3936312b231a100600000000000000000000000000000000000000000b151f2931383e4142424242424242403c362f261d12080000000000000000000000000000000000000007121c252e353b3f404040404040403e39322a21170d02000000000000030e18232c343b4043434343434343434343403b342c231912161a1e212427292b2d2f30313132323231302f2e2d2b292623201d1915110c07020000000000000000000000000000000000000000000000000000000000000000000000000000000002090e14191f23282c2f3336393b3d3f40424343444443434241403e3c3a3734312e2a26211c17110c0600000000000000000000000000000000000000020d17212a32393e404141414141414141413f3b352d241b11060000000000000000000000000000000000000000000000040f19232c343a3e414141414141414141403e39332b22180d020000000000000000000000000000000000010910171e24292e323537393b3b3b3b3b3b3b3b3b38332c241b1208000000000000000000000000000000000000000000000003090f151a1f23282c3033373a3c3f4143444647484848484848484746454341403e3b393633302d2a26221e1a16110c080200000000000000000000000000000000000000000000000000000000030e18222b333a3f4142424242424242403c362f261d120800000000000000030c141b23292f34393d41434547474847464542403c38332d2720191110181f262c32373b3f424446474847474644413e3a35302a241d150d05000000000000000006111c262f383f454848484848484848484846423b332a1f150a000000000000000000000000000009141f29323b41464848484848484848484848484848484848484848484848484848484848484848484848484848484848484846413b32291f140900000000000000000000000000000000000000010c17222b343c43474848484848484848484848453f382f261c11060000000000000000000b16212b343c4246484848484848484848484845403930271d1207000000000000000000000000000000000000000000000000000000000000000007121c262f363c4042424242424242413f3a332b22190e040000000000000000000000000000070f171e252c31373b3f424546484848474644423e3a36302a241d160e05000000000000000000000000000000000000000000040f1a252e373f44474848484848484846413b33291f150a00000000000007121d2730383f44474747474747474747474747474747474747474747474747474746443e372f251b10050000000000000000000000000000040f1a252e373f44474848484848484846413b33291f150a00000000000000000000000000000000000000020e19232d353d434647474747474746423c352c22180d0200000000000000000000000000000000000005111c27313b43494d4e4e4e4e4e4e4e4d4841382f24190f040000000000000000000000000000000000020d18232e3740474b4d4d4d4d4d4d4d4a443c33291f140800000000000009141f2a343e464c4f50505050505050504f4c463e352b211e22262a2e313336383a3b3c3d3e3e3e3e3e3d3c3b39373533302d2925211d18130d070200000000000000000000000000000000000000000000000000000000000000000000000000070d141a20252a2f34383c3f4245484a4c4d4e4f50505050504f4e4d4b494744413e3a36312d28221d17110a03000000000000000000000000000000000008131e29333c444a4d4d4d4d4d4d4d4d4d4d4b463f362d22170c00000000000000000000000000000000000000000000000a15202b353e454b4d4d4d4d4d4d4d4d4d4d4a443d342a1f140800000000000000000000000000000000020a131b22292f353a3e414446474848484848484847443e362d24190e03000000000000000000000000000000000000000001080e141a20252b2f34383c404346494b4e5051535454555555555554535251504e4c4a484543403d3936322e2a26221d18130e0903000000000000000000000000000000000000000000000000000009141f2a343d454b4e4e4e4e4e4e4e4e4d4841382e24190f040000000000030d151e262d343a4045494d50525354545453514f4c48433e38322b231b1a222931373d43474b4e51535454545352504d4a46413b352e271f170e05000000000000000b17222d38424a5154555555555555555555524d453c31261b1004000000000000000000000000030e1a26313b444c5255555555555555555555555555555555555555555555555555555555555555555555555555555555555555524c443b31261a0e0300000000000000000000000000000000000006121d28333d464e535555555555555555555554514a42382d22170b000000000000000005111c28333d464e535555555555555555555554514b42392e23180c00000000000000000000000000000000000000000000000000000000000000020d19242e3841484c4e4e4e4e4e4e4e4e4b453d342b20150b00000000000000000000000000071019212930373d42474b4f51535455555453514e4a46413c352f2720170f0600000000000000000000000000000000000000000915212c364049505455555555555555524c453b31261b110600000000000c18232e39424a50535353535353535353535353535353535353535353535353535353504941372d22160b00000000000000000000000000000915212c364049505455555555555555524c453b31261b110600000000000000000000000000000000000008141f2a353f474e52535353535353524e473e34291e13070000000000000000000000000000000000000a16222d39434d555a5b5b5b5b5b5b5b59534a40362b20150b000000000000000000000000000000000006121e2a35404952585a5a5a5a5a5a59554e453b3025190d0100000000000d1925313c4650575c5d5d5d5d5d5d5d5d5c5850473d332a2a2e33363a3d4042454648494a4b4b4b4b4b4a49484644423f3c3935312d28241e19130d0600000000000000000000000000000000000000000000000000000000000000000000030b12181f252b31363b4044484b4f525456585a5b5c5d5d5d5d5c5c5b59575553504d4a46423d39332e28221c150e07000000000000000000000000000000000c1824303b454e555a5a5a5a5a5a5a5a5a5a5751493f34281d1105000000000000000000000000000000000000000000030f1b26323d4750565a5a5a5a5a5a5a5a5a5a564f463b3025190d010000000000000000000000000000010b141c252c343a40454a4e51535455555555555555544f483f352b20140800000000000000000000000000000000000000050c131920262b31363b4044484c4f5355585a5c5e5f6061626262626161605f5e5c5b595754524f4c4946423e3a36322e29241f1a140f09030000000000000000000000000000000000000000000000010d1925313c464f565b5b5b5b5b5b5b5b59534a40362b20160b00000000020c151f2730383f454c5155595c5f60616161605e5b58544f4a433c352d24232c343b42494e53575b5d5f616161605f5d5a56524c474039312920170e040000000000000f1b27333f4a545c616161616161616161615e574d43372c20150a00000000000000000000000006131f2b37424d565e616161616161616161616161616161616161616161616161616161616161616161616161616161616161615e564d42372b1f13060000000000000000000000000000000000000a16222e3a454f585f61616161616161616161615c544a3f33271b0f03000000000000000915212d39444f585f61616161616161616161615c544b4034281c100400000000000000000000000000000000000000000000000000000000000006121e2a35404a52595b5b5b5b5b5b5b5b574f463c32271c12070000000000000000000000071019222b333a42484e53575b5e60616161615f5d5a57524d474039312921180f05000000000000000000000000000000000000000d1a26323d48525b60616161616161615e574d43382d22170d0200000004101d2934404a545c6060606060606060606060606060606060606060606060606060605b53493e33271b0f03000000000000000000000000000d1a26323d48525b60616161616161615e574d43382d22170d0200000000000000000101010101010101010c1824303c4751595f6060606060605f5950463b2f23170b0000000000000000000000000000000000000d1a26323e4a555f6668686868686868645c52473d32271c1106000000000001050707070707070707070916222e3b46515b636767676767676660574d4135291d10040000000000101d2935414d58626869696969696969696862594f453b32363a3f4346494c4f5153555657575858585757565453514e4c4845413d39342f2a241e18110a0300000000000000000000000000000000000000000000000000000000000000060e151c232a30363c42474b5054585b5e616365676869696a6a6a696867666462605d5956524e49443f39332d272019110a020000000000000000000000000000101c2935414c576066676767676767676767635b5045392d21160a00000000000000000000000000000000000000000008141f2b37434e59616767676767676767676661574d4135291d110400000000000000000000000000000a131d262e373e454c51565a5d5f6161616161616161605a51473c3025180c0000000000000000000000000000000000010810171e242b31373d42474c5054585c5f626467696a6c6d6e6e6f6f6f6e6e6d6c6b69676563615e5c5955524e4b47423e3935302b25201a140e080200000000000000000000000000000000000000000004111d2936424d58616768686868686868645c52473d32271d12070000000a141e273139424950575d6166696b6d6d6e6d6c6a6864605b554e473f372e2c353d454d545a5f64676a6c6d6e6e6d6b6966625d58524b433b322920160c020000000000121e2b37434f5b666d6e6e6e6e6e6e6e6e6e695f54493d32261b0f0400000000000000000000000915222f3b47535e686e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e685e53473b2f2215090000000000000000000000000000000000010d1a26323e4a56616a6e6e6e6e6e6e6e6e6e6e6d665b5044372b1f1306000000000000000c1925313d4a55616a6e6e6e6e6e6e6e6e6e6e6d665c5145382c2014070000000000000000000000000000000000000000000000000000000000000916222e3b46525c64686868686868686761584e43392e23190e03000000000000000000050f18222b343d454c53595f63676a6c6e6e6e6d6c6a67635e58524b433b332a21170d03000000000000000000000000000000000000101d2936424e5a646c6e6e6e6e6e6e6e695f54493f34291e13080000000713202c3945515c666c6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c655b4f43372b1e120500000000000000000000000000101d2936424e5a646c6e6e6e6e6e6e6e695f54493f34291e1308000000000004090c0d0e0e0e0e0e0e0e0e0f1b2834404c58636b6d6d6d6d6d6d6a62574c4033271a0e0100000000000000000000000000000000000f1c2935424e5b6671757575757575756e64594e43382e23180d02000003090d11131414141414141414141825313e4a57636d73737373737372695e5145392c1f13060000000000121f2c3845515e6a747676767676767676746b61574d443c42464b4f5256595b5e6061636364656565646362615f5d5b5855514d4945403b352f29231c150e0600000000000000000000000000000000000000000000000000000000000810181f272e353b42474d52575c6064676a6d70727375757677777676757473716f6c6966625e5a55504a453f38312a231c140c0400000000000000000000000000121f2b3844515d69727474747474747474746c61564a3e32261a0e0300000000000000000000000000000000000000000c1824303c48545f6b73747474747474747472695e5245392c1f13060000000000000000000000000007111c252f38404850575d6266696c6d6e6e6e6e6e6e6e6c63594d4134281b0f00000000000000000000000000000000030b131a21282f363c42484e53585c6064686b6e71737577797a7b7b7b7b7b7b7a7a7977767472706d6b6865625e5b57534e4a45403b36312b251f19130c05000000000000000000000000000000000000000006131f2c3945525e6a73757575757575756e64594e44392e24190e040007121c263039434b545b62686d727578797a7b7a797774706c66605951494036353e474f575f656b707476797a7b7a7a7876726e69635c554d443b32281e1409000000000013202c3946525f6c777b7b7b7b7b7b7b7b7b7065594e42372c20150900000000000000000000000a1724303d4a56636f7a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a6f63564a3d3024170a000000000000000000000000000000000005111d2936424e5a67737b7b7b7b7b7b7b7b7b7b786c6053473b2e22160a00000000000003101c2834414d5966727b7b7b7b7b7b7b7b7b7b786d6154483c3023170b0000000000000000000000000000000000000000000000000000000000000b1825313e4a57636e74757575757575736a60554a40352a20150a0000000000000000010c16212a343d464f575e656a6f7377797a7b7b7a7976736e69635d554d453c33291f150b000000000000000000000000000000000000111e2b3744515e6a767b7b7b7b7b7b7a71665b50453a30251a0f0400000815212e3b4854616d787a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a776c5f5346392d20130600000000000000000000000000111e2b3744515e6a767b7b7b7b7b7b7a71665b50453a30251a0f040000030a1015181a1a1a1a1a1a1a1a1a1a1d293643505c69747a7a7a7a7a7a74685b4f4235291c0f070000000000000000000000000000000000101c2936434f5c697681828282828280756b60554a3f342a1f140900060d14191d202121212121212121212126323f4c5965727f8181818181796d6053463a2d20150f0700000000121f2c3945525f6b7882838383838383837d73695f564c484d52575b5f6265686a6c6e6f707171717171706f6e6c6a6764615e5a55514c46413b342e272018110900000000000000000000000000000000000000000000000000000009111a222a313840464d53595e63686c7074777a7c7e808182838484838382817f7d7b7875726e6a66615b56504a433c352d261e160d05000000000000000000000000131f2c3946525f6c7981818181818181817e72665a4e42372b1f13070000000000000000000000000000000000000005111d2935404c5864707c8181818181818181796d6053463a2d201307000000000000000000000000030e19232d37414a525a62686e7276787a7b7b7b7b7b7b7b75695c5043362a1d10000000000000000000000000000000040c151d242c333a41474e53595e63686c7174787b7d80828485868788888888888786858482817e7c7a7774716e6a67635f5a56514c47423c37312b241e170f07000000000000000000000000000000000000000713202d3a4653606d7982828282828280756b60554b40352b20150b030e19232e38424b555d656d73797e8284868788878684817c77716a635b52483f3d475059616970767b8083858787878685827e7a746e675f564d443a30251b100500000000131f2c3945525e6b76828888888888888882766b5f54483d31261a0f03000000000000000000000a1724303d4a5763707d88888888888888888888888888888888888888888888888888888888888888888888888888888888887d7063574a3d3024170a00000000000000000000000000000000000815212d3946525e6a76838888888888888888887c6f63574a3e3226190d01000000000007131f2c3844505d6975828888888888888888887d7064584c3f33271b0f0200000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8282828282827c71675c51473c31271c11070000000000000008131e28323c464f58616870767b8083868788888785837f7a756e675f574e453b31271c12070000000000000000000000000000000000111e2a3744505d69747f888888888882776c62574c41362c21160b00000915222f3c4855626f7b87878787878787878787878787878787878787878787878786796d6053463a2d20130700000000000000000000000000111e2a3744505d69747f888888888882776c62574c41362c21160b00050d151b212527272727272727272727272a3643505d697683878787878275695c4f4236291f19120a010000000000000000000000000000000f1b2835414d5965707a858e8e8e8e877c71665c51463b30261b10060f181f252a2d2e2e2e2e2e2e2e2e2e2e2e323f4c5965727f8c8d8d8d86796d6053463a2d2620191108000000111e2a37434f5b66707a848d909090908f857b71675e5454595e63676b6e727477797b7c7d7e7e7e7e7d7d7c7a787674716d6a66615c57524c463f38312a221b120a0200000000000000000000000000000000000000000000000009121b232c343b434a51585e646a6f74787c808386898b8d8e8f90909090908f8d8c8a8885827e7a76716c67615b554e473f3830281f170e050000000000000000000000121e2b3844505d6874808c8e8e8e8e8e8e83776b5f53473b2f24180c000000000000000000000000000000000000000a16212d3945515d6975818c8e8e8e8e8e8d8175695d5145382c1f13060000000000000000000000000a15202b353f49535c646c73797e8285878888888888888376695d5043362a1d100000000000000000000000000000050e161e272e363e454c52595f656a6f74787d8184878a8d8f909293949595959595949392918f8d8b898684817e7a77736f6b66625d58534d48423c362f292119100600000000000000000000000000000000000006121f2c3845515d68737d888e8e8e8e877c72675c52473c32271c1209141f2a35404a545d676f777e858a8e919394949492908d88837c756d645a5147454f59626b737b82878c909294949493918e8b86807871685f564c42372c21160b00000000111d2a36424e5965707c87939595959593877b7065594e42372b201409000000000000000000000a1724303d4a5763707d8a9595959595959595959595959595959595959595959595959595959595959595959595959595958a7d7063574a3d3024170a00000000000000000000000000000000000c1824313d4955626e7a8693959595959595958b7f73665a4e4235291d100400000000000a16232f3b4754606c798591959595959595958d8174685c4f43372b1e120600000000000000000000000000000000000000000000000000000000000b1724313d4a56616c77828c8e8e8e8e83786e63584e43382e23180e030000000000030f1a252f3a444e58616a737a81878c909294959594928f8b868079716960574d43382e23180d02000000000000000000000000000000000f1c2835414d58636e78838e959594897e73685e53483d32281d1207000916222f3c4855626f7b88949494949494949494949494949494949494949494949386796d6053463a2d201307000000000000000000000000000f1c2835414d58636e78838e959594897e73685e53483d32281d12070d171f262d313334343434343434343434343643505d6976839094948f8275695c4f42362f2a241c130a0000000000000000000000000000000c1925313d48535e69747e89949b998e83786d62584d42372c21170e1821293036393a3a3a3a3a3a3a3a3a3a3a3a3f4c5965727f8c999a9386796d6053463a37322b231a110600000f1b27333f4a545e68727b858f999d9d978d837970665c5f656a6f73777b7e81848687898a8a8b8b8b8a8a88878583807d7a76726d68635d57514a433c342c241c140b020000000000000000000000000000000000000000000008121b242d353d464d555c63696f757b8084898c90939597999b9c9c9d9d9d9c9b9a989794918e8b87827d78726c665f58514a423a312920170d0400000000000000000000101c2834404c58646f7b87939a9a9a9a93877b6f64584c4034281c11050000000000000000000000000000000000020e1a26323e4a56616d7985919a9a9a9a94887c7064584d4135291d1004000000000000000000000004101b26313c47515b656e767e858a8e92949595959595908376695d5043362a1d1000000000000000000000000000050e172028303940484f565d646a70767b8085898d909496999b9d9fa0a1a2a2a2a2a1a1a09f9d9c9a989593908d8a87837f7b77726e69645e59534d47413a332b22180d02000000000000000000000000000000000004101c2935404c56616c76818c969b998e83796e63594e43392e23190e1a25313c47515c666f79818990969a9d9d9b9b9b9e9c99948e877e766c63594e4c56616b747d858d93989c9f9c9b9b9c9e9b96918a837a71685e53493e33281c11050000000e1a26323d48545f6b76828d99a2a2a2988d81766a5f53483c31251a0e030000000000000000000a1724303d4a5763707d8a97a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2978a7d7063574a3d3024170a0000000000000000000000000000000003101c2834414d5965717e8a96a2a2a2a2a2a29b8f82766a5d5145392c20140700000000010d1a26323f4b5763707c8895a1a2a2a2a2a29c9084786b5f53473a2e22160a00000000000000000000000000000000000000000000000000000000000915212d3945505a65707a85909b9b958a80756a5f554a3f352a1f150a00000000000914202b36414c56606a737c858c92989c9d9a99999a9d9b97918b837b72695f554a40352a1f1308000000000000000000000000000000000c1824303b46515c67727c87929d9b90857a6f645a4f44392e23190e030916222f3c4955626f7c8996a0a0a09e9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9386796d6053463a2d201307000000000000000000000000000c1824303b46515c67727c87929d9b90857a6f645a4f44392e23190e151f2931383d4041414141414141414141414143505d697683909d9c8f8275695c4f423f3b352e251b110700000000000000000000000000000915202c37424c57626d78838d989f948a7f74695e53493e33281d16202a333b4246474747474747474747474747474c5965727f8c99a09386796d60534746433d352c23180d02000b17222d38424c566069737d87919ba49f958b82786e646a70757a7f83878a8d90929495969798989897969594928f8d8986827e79746e68625c554e463e362e261d140b02000000000000000000000000000000000000000007111a242d363f474f575f666e747b81868b9095989c9fa2a4a6a7a8a9a9a8a9a9a8a7a5a3a19e9a97938e89847e77716a635b544b433b32291f160d030000000000000000000c18242f3b47535f6b76828e9aa6a7a4988c8074685c5145392d211509000000000000000000000000000000000007131f2b37424e5a66727e8a96a2a7a79b8f83776b5f54483c3024180d0000000000000000000000000915212c38434e59636d77808890969b9ea0a1a2a2a29d908376695d5043362a1d10000000000000000000000000040e172029323a424a525a61686f757b81878c9195999da0a29f9c9a99979696959595969697989a9c9da0a29f9d9a96938f8b87837e79746f6a645e58524c453d34291f13080000000000000000000000000000000000000c18242f3a454f5a656f7a858f9aa0958b80756a60554a40352a20151f2b36424d58636d78828b939ba19a94918f8e8f91969c9f9891887e756a6055535d68737d868f979e9d97928f8e8e9093989f9c958c837a70655a4f44392d22160a0000000915202c37434e5a65717c88939faaa99e92877b7064594d42362b1f14080000000000000000000a1724303d4a5763707d8a97a4aeaeaea8a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4978a7d7063574a3d3024170a0000000000000000000000000000000007131f2c3844505d6975818e9aa6aeaeacaeab9e9286796d6155483c3023170b0000000004111d2936424e5b6773808c98a4aeacacaeaca094887b6f63574a3e3226190d010000000000000000000000000000000000000000000000000000000005111d28333e49535e69747e89949e9c91867c71665c51463c31261c1106000000030e1a26313c48535d68727c868e969e9b95918d8c8c8e91969c9c958d847a71665c51463b3024190d0200000000000000000000000000000008141f2a35404a55606b76818b96a1968c81766b60554b40352a1f150a091623303c4956636f7c8996a2a89d938e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e86796d6053463a2d2013070000000000000000000000000008141f2a35404a55606b76818b96a1968c81766b60554b40352a1f151c27313b43494d4d4d4d4d4d4d4d4d4d4d4d4d4d505d697683909d9c8f8275695c4f4d4c4740372d23180d0100000000000000000000000000040f1a25303b46505b66717c87919c9b90867b70655a4f453a2f241c27323c454d5254545454545454545454545454545965727f8c99a09386796d605454534e473e342a1e13070006111c26303a444e58616b757f89929ca69d948a80766f757b81868b8f93979a9c9fa1a2a3a4a4a5a4a4a3a2a09e9c9996928e8a85807a746d665f58504840382f261d140a00000000000000000000000000000000000000050f19232c363f485159616971787f868c92979ca1a5a8a9a6a3a19f9d9c9c9c9c9c9e9fa1a3a6a9a7a39e9a958f89837c756d655d554d443b31281e150b01000000000000000007131f2b37424e5a66727d8995a1ada89c9185796d6155493d32261a0e02000000000000000000000000000000000c18232f3b47535f6b77838e9aa6aea2968a7e72675b4f43372b2014080000000000000000000000020e1a26313d49545f6a757f89929aa1a7a8a29d99979696908376695d5043362a1d100000000000000000000000030d162029323b444c545c646c737a80878d92979ca1a09c989592908e8c8a8a89888888898a8a8c8d8f919395989b9ea19f9b97938f8a85807b75706a645d574f463b3024190c00000000000000000000000000000000000007131e28333e48535e68737e89939e9c91877c71675c51473c31271c24303c47535e6974808a949d9f978f8984828182858a9199a29a91877c71665b59646f7a858f98a19b938c8683818283878d959e9e958c81776c61554a3e33271b0f030000040f1b26323d4954606b76828e99a4afa3988c81756a5e53473c3025190e0200000000000000000a1724303d4a5763707d8a97a4b0afa59d9898989898989898989898989898989898989898989898989898989898989898978a7d7063574a3d3024170a000000000000000000000000000000000b17232f3b4854606c7985919daaa8a19fa2a8a295897d7164584c3f33271b0e020000000814202d3945525e6a76838f9ba8a5a09fa3aba4978b7f73665a4e4235291d110500000000000000000000000000000000000000000000000000000000000c17222c37424c57626c77828d97a2988d83786d63584d43382d23180d03000007131f2b37424e59646f7a848e98a099918a84817f7f81858b929b9f968d83786e63584c41352a1e1206000000000000000000000000000000020e18232e39444e59646f7a858f9a9d92887d72675c51473c31261b10091623303c4956626f7b87929da5988c82828282828282828282828282828282828282796d6053463a2d20130700000000000000000000000000020e18232e39444e59646f7a858f9a9d92887d72675c51473c31261b222e39434d54595a5a5a5a5a5a5a5a5a5a5a5a5a5a5d697683909d9c8f8275695c5a5a5852493f34291d1206000000000000000000000000000009141e29343f4a555f6a75808b95a0978c82766c61564b40362b212d38444e575e61616161616161616161616161616165727f8c99a09386796d6161615f5950463b2f24170b00000a141e28323c464f59636d77818a949ea69c92887e7a81878d92979ba0a3a6a9a8a6a4a2a2a1a1a1a2a3a4a6a8a8a5a29e9a95908b857e78716a625a524a41382f261c12080000000000000000000000000000000000020d17212b353e48515a636b737b838a91979da3a8aba6a19d9996949291908f8f8f90919294979a9da1a6aaa5a09a948d867f776f675f564d433a30271d13080000000000000000020e1a26323d4955616d7884909ca8ada195897d72665a4e42362a1f130700000000000000000000000000000004101c2834404c58636f7b87939faba99d9185796e62564a3e32271b0f03000000000000000000000006121e2a36424e5a65717c87919ba4aca59d96918d8b8a89898376695d5043362a1d1000000000000000000000010b151e28323b444d565e666e767d858b92989ea39e9994908c898683817f7e7d7c7b7b7b7c7d7e7f81828487898c8f9295999da19f9b96918c86817b756f6861574c4135291c10030000000000000000000000000000000000010c17212c37414c57616c77828c97a1988e83786e63584e43382e232834404c58646f7b86919ca1978d857d78757475797f87909aa2988e83776c605e6a75818b96a19c9289817a767575777c838c959f9e93887d72665b4f43372b1f13070000000a15212c38434f5a66717c88949faaa99d92867b6f64584d41362a1f130800000000000000000a1724303d4a5763707d8a97a4b0aa9e938c8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8a7d7063574a3d3024170a000000000000000000000000000000020e1a27333f4b5864707c8995a1aa9f9692969fa5998d8174685b4f43362a1e12050000000b1724303c4955616d7a86929fa69b949399a3a79b8f83766a5e5145392d211408000000000000000000000000000000000000000000000000000000000006101b25303b46505b65707b86909b9f948a7f746a5f544a3f342a1f140a00000c1824303c47535f6a75818b96a09a90877f7974727275798089929c9f958a7f74695d52463b2f23170b0000000000000000000000000000000007121c27323d48525d68737e89939e998e84796e63584d42382d22170c15222e3b47535f6a75818c97a19a8f84787575757575757575757575757575757575736a5e5245392c1f1306000000000000000000000000000007121c27323d48525d68737e89939e998e84796e63584d42382d2227333f4a555f65676767676767676767676767676767697683909d9c8f827569676767635b51463a2e2215090000000000000000000000000000020d18232d38434e59636e79848f9a9e93887d73685d52473c3227313d495560696d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d727f8c99a09386796d6d6d6d6b62574c4033271a0e0000030c16202a343d47515b656e78828c96a0a49a9086858c92989ea3a7aba6a29f9c99979695949494959697999c9ea2a6aaa6a19c96908a837b746c645c534a41382e241a1006000000000000000000000000000000000a141f29333d47505a636c757d858d959ca2a8aba59f9a95918d8a87858483828282838486888a8d91959a9fa5aba59f989189817971685f564c42392f241a100500000000000000000915212d3944505c6874808b97a3afa69a8e82766a5f53473b2f23170b0000000000000000000000000000000915212d3944505c6874808c98a4afa4988c8175695d51453a2e22160a0000000000000000000000000915222e3a46525e6a76828d98a3ada59c938b85817e7d7c7c7c76695c5043362a1d100000000000000000000008131d27303a444d565f68707880888f969da39e98928d8884807c7977747371706f6f6f6f6f7071727476787a7c7f8285898d9195999ea29d97928c86807a73695d5144382b1e120500000000000000000000000000000000000005101a25303a45505a65707a85909b9f958a80756a5f554a3f352a2c3845515d6975818c97a29b90857b736c6967696e757e89939f9f94897d7165636f7a86929da1958b80776f6a68686b7179838e99a49a8f83776b5f53473b2f23160a00000004101b27323d4954606b77828e99a5aea3978c8075695e52473b3024190d02000000000000000a1724303d4a5763707d8a97a4b0a99c8f827e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7d7063574a3d3024170a00000000000000000000000000000006121e2a36434f5b6774808c98a5a6998d868e9aa69c9084776b5f52463a2e2115090000020e1b2733404c5865717d8a96a2a1958987929eab9f92867a6e6155493d3024180c00000000000000000000000000000000000000000000000000000000000009141f29343f49545f69747e89949f9b91867b71665b51463b31261b110604101c2834404c5864707b87929d9f93897e756d686666686e76808a95a09c91857a6e63574b3f33271b0f03000000000000000000000000000000000b16202b36414c57616c77828d97a0958a80746a5f54493e34291e13121f2b37424e59646f7a858f9aa0958a80766c6868686868686868686868686868686761584d4236291d11040000000000000000000000000000000b16202b36414c57616c77828d97a0958a80746a5f54493e34292936424f5b6771747474747474747474747474747474747683909d9c8f8275747474746d62564a3d3124170b00000000000000000000000000000006111c27313c47525d67727d88939e9a8f84796e64594e43382d333f4c5965717a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7f8c99a093867a7a7a7a7a74685b4f4235291c0f000000040e18222c353f49535d66707a848e97a1a2989190979da3a9aaa49f9a96938f8d8b898888878888898b8d8f92969a9ea3a9a7a19b948d867e766e655c534a40362c22180e03000000000000000000000000000006101b26303b454f59626c757e878f979fa6ada7a09a948e8985817d7b7977767575757677797b7e8185898e949aa0a7aaa39b938b837a71685e544b41362c21170c010000000000000005101c2834404b57636f7b87929eaaaa9f93877b6f63574b4034281c100400000000000000000000000000020e1a25313d4955616d7985919ca8ab9f94887c7064584c4135291d11050000000000000000000000000c1825313e4a56636f7b87939eaaa99e948a817a7571706f6f6f6d64594d4135281c0f00000000000000000005101a242f39424c565f68717a828a929aa1a099928c87817c7874706d6a68666463626262626363646667696b6d707376797c8184898d92979ca19d97918b83786b5f5245382c1f12050000000000000000000000000000000000000009131e29333e49535e69737e89949e9c91867c71665c51463c31303c4855616d7985919da1968a7e7369615c5b5d636c77828e99a59a8e82766967737f8b97a39c9084796e655e5b5b5f67717c88939f9f94887c7064574b3f32261a0d010000000a16212d38434f5a66717d88949faba89d91867a6f63584c41352a1e1307040404040404040a1724303d4a5763707d8a97a4b0a99c8f82757171717171717171717171717171717171717171717171717171717171717171716b6054483c2f2316090000000000000000000000000000000915222e3a46535f6b7784909ca8a3968a7e8b97a4a093877b6e62564a3d3125180c000006121e2a37434f5c6874818d99a69f9286828f9ba7a2968a7d7165594c4034281c0f030000000000000000000000000000000000000000000000000000000000020d18222d38424d58626d78828d98a2988d82786d62584d42382d22180d0713202c3844505c6874818c98a3998d82776c635c59595d646e78838f9aa2978b8073685c4f43372b1f130600000000000000000000000000000000040f1a252f3a45505b65707b86919c9c91867b70665b50453a30251a0f1a26313d48535e69737d88929b9c92887e756c645c5b5b5b5b5b5b5b5b5b5b5b5b5b564f463c3125190d01000000000000000000000000000000040f1a252f3a45505b65707b86919c9c91867b70665b50453a302a3744505d6a77818181818181818181818181818181818184909d9c8f83818181817e7165584b3e3225180b000000000000000000000000000000000a15202b35404b56616b76818c97a1968b80756a60554a3f3433404c5966738087878787878787878787878787878787878e9aa1958a878787878275695c4f4236291c0f0000000006101a232d37414b545e68727c868f99a3a29d9ca1a8aca59f99948e8a8683817e7c7b7b7a7b7b7c7e8083868a8e93989ea4aba69f98908880776e655c52483e342a20150a00000000000000000000000000010c17222d38424c57616b747e879099a1a9ada59d968f88837d7975716e6c6a69696969696b6c6f7175797d83898f969da5ada59d958c837a70665c52483e33281e130800000000000000000c17232f3b47525e6a76828e99a5afa3978c8074685c5044382d21150a0a0a0a0a0a0a0a0a0a0a0a0a0a0a121e2a36424e5a65717d8995a1ada69b8f83776b5f54483c3024180d010000000000000000000000000e1b2734404d5966727e8b97a3afa3988d82786f696563636363615b52483d3125190c0000000000000000010c17212c36404a545e68717a838c949ca49c958e87817b76716c6864615e5b59585756555555565758595b5c5f616366696d7074787d81868b90959ba095897e72675b4f43372a1e110400000000000000000000000000000000000000020c17222c37424c57626c77828d97a2988d83786d63584d4338333f4b5864717d8995a29d9185796d6257504e515b65717d8995a19e9286796d6a77838f9ba4978b7f73685d534e4f55606b77838f9ba4988c8073675b4e4235291c100300000004101b27323e4955606c77838e9aa5aea2978b8074695d52463b2f24181111111111111111111724303d4a5763707d8a97a4b0a99c8f827569656565656565656565656565656565656565656565656565656565656565656461594f44382c2014070000000000000000000000000000000d1925313e4a56626f7b8793a0aca094877b8894a1a3978a7e7266594d4134281c0f03000915212e3a46535f6b7884909da89c8f837f8c98a4a69a8d8175695c5044382b1f130700000000000000000000000000000000000000000000000000000000000006111b26313b46515b66717b86919b9f94897e74695f54493f34291f140a16232f3c4854606d7985919da194887c71655b514c4d525c67727e8a96a29c9084786c6053473b2f22160a000000000000000000000000000000000008131e29333e49545f69747f8a95a0988d82776c61574c41362b211615202b36414c57616c768089939c9a90877e766e665e564e4e4e4e4e4e4e4e4e4e4e4b453d342a1f1409000000000000000000000000000000000008131e29333e49545f69747f8a95a0988d82776c61574c41362b3744505d6a77848e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e95a09f958e8e8e8e8b7e7165584b3e3225180b00000000000000000000000000000000030e19242f39444f5a65707a85909b9c92877c71665b51463b33404c596673808c9494949494949494949494949494949498a0a69c959494948f8275695c4f4236291c0f000000000008111b252f39424c56606a737d87919ca9a9a9adaaa29b948e88837e7a777471706f6e6e6e6f70717476797d82878d9399a0a8aaa29a928980776d645a50463c31271c110600000000000000000000000007121e29343e49545e69737d879099a2abaca39b938b847d77726d6865625f5e5d5c5c5c5d5e606265696d72777d848b939ba3aca79e958c82786e645a4f453a2f24190e030000000000000007131e2a36424e5965717d8995a0aca89c9084786d6155493d31251917171717171717171717171717171717232f3b47525e6a76828e9aa6ada2968a7e72665b4f43372b1f140800000000000000000000000000101d2936434f5c6875828e9aa7ab9e93877b70665d585656565655504940362b201409000000000000000008131e28333e48525c66707a838c959ea29a928b837c76706a65605c5854514f4d4b4a49484849494a4b4c4e505254575a5d6064686c71757a7f848a8f958f84786d61564a3f33271b0f02000000000000000000000000000000000000000005101b25303b45505b65707b86909b9f948a7f746a5f544a3f35424e5b6774808c99a59a8e8275695d5145414955616d7985929ea295897c706d7a86939fa194887b6f63574b42434f5a66737f8b98a49c8f83766a5d5144382b1f1205000000000a16212d38444f5b66727d8994a0aba89c91857a6e63574c4035291e1e1e1e1e1e1e1e1e1e1e24303d4a5763707d8a97a4b0a99c8f8275695c58585858585858585858585858585858585858585858585858585858585858554f473d32271b1004000000000000000000000000000004101d2935414d5a66727e8b97a3aa9d91857985929ea69a8e8275695d5044382b1f1307000c1925313d4a56626f7b8794a0a5998c807c8995a1a99d9185786c6054473b2f23170a000000000000000000000000000000000000000000000000000000000000000a141f2a343f4a545f6a747f8a949f9b90867b70665b50463b30261b101926323f4b5764707c8995a19d9184786c60544940404a56616d7985929ea094887c6f63574a3e3225190c0000000000000000000000000000000000010c17222d37424d58636e78838e999e94897e73685d53483d32271d121a25303b45505a646e77818a939b99918880776f686058504842424242424242413f3a332b22180e030000000000000000000000000000000000010c17222d37424d58636e78838e999e94897e73685d53483d323744505d6a7784909a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9b9fa7a79f9b9a9a988b7e7165584b3e3225180b000000000000000000000000000000000007121d28333e48535e69747e89949f988e83786d62574d4237404c596673808c99a1a09c9b9b9b9b9b9b9b9b9b9b9b9b9ea5aaa19c9b9b9b8f8275695c4f4236291c0f00000000000009131d27313b45505a646e78828e9aa7b4b6ada2989089827c77726e6a67656362616161626365676a6d71767b81888f969ea6aca49b928980766c62584d43382e23180d0200000000000000000000020d18242f3a45505b65707a858f98a2abaca39a91898179726c66615c59555351504f4f4f50515356595d61666c72798189919aa3aca79e948a80766c61564c41362b1f140900000000000000020e1a25313d4955606c7884909ca7ada195897d7165594e42362a232323232323232323232323232323232328333f4b57636f7b87929eaaa99d9185796d62564a3e32271b0f0300000000000000000000000000111e2b3744515e6a7784909da9a79b8e82766a5f544c4a49494948453f372e241a0f0400000000000000030e19242f3a454f5a646e78828c959ea29990888079726b655e5954504b484542403e3d3c3c3c3c3c3d3e40414345484b4d5154585c6065696e73797e848a897e72675b5045392e22170b0000000000000000000000000000000000000000000009141f29343e49545f69747e89949f9b91867b71665b51463b43505d6976838f9ca4988b7e7266594d413844515d6976828f9ca5988c7f72707c8995a29e9285786c5f53473b3e4a5763707c8995a29e9285796c5f53463a2d2014070000000005101c27333e4a55616c77838f9aa5ada2968b8074685d51463a2f2a2a2a2a2a2a2a2a2a2a2a2a303d4a5763707d8a97a4b0a99c8f8275695c4f4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b49443d352b21160b0000000000000000000000000000000814202c3945515d6a76828e9ba7a79b8e8276828f9ba89e9185796c6054473b2f23160a03101c2834414d5966727e8b97a3a3968a7d7986929faba195887c7064574b3f33261a0e02000000000000000000000000000000000000000000000000000000000000030d18232d38434d58636d78838d98a2978d82776d62574d42372d22171c2835414e5a6773808c98a59a8d8175685c5044383945515d6975828e9ba4988c7f73665a4d4134281b0f02000000000000000000000000000000000005101b26313c46515c67727c87929d9a90857a6f64594f44392e2318131e29333e48525c656f788189929a9a928a8179726a625a534b443c3535353535322e29211910060000000000000000000000000000000000000005101b26313c46515c67727c87929d9a90857a6f64594f44393744505d6a7784909da199959595959595959595959595959aa4a39a959595958b7e7165584b3e3225180b0000000000000000000000000000000000010c16212c37424c57626d78838d989f948a7e74695e53483e404c596673808c99a1968f8e8e8e8e8e8e8e8e8e8e8e8e939da398908e8e8e8e8275695c4f4236291c0f0000000000000a16212c37424c57626c76818a949eaab6b6a99d91867e77716b66625e5b5856555454545556585b5e61656a70767d848c949da6ada49b92887e746a5f554a3f34291e13070000000000000000000007131e2a35404b57616c77828c96a1aaaea49a91887f776f67615b55504c49464443424243434547494d51555b61676f777f88919aa4aea69c92887d73685d52473c31251a0e03000000000000000915212c3844505c67737f8b97a3aea59a8e82766a5e52463b303030303030303030303030303030303030303844505c6873808b97a3afa4988c8175695d5145392e22160a0000000000000000000000000000121f2c3845525f6b7885929eaba4988b7f72665a4e423d3c3c3c3c39342d251c130800000000000000000914202b36414c56616c76808a949ea29990877e766e676059534e48443f4042444545454543413f3c3834333537393b3e4144484c5054595e63686d73787e84786d61564a3f34281d110600000000000000000000000000000000000000000000020d17222d38424d58626d77828d98a2988d82786d62584d4245525e6b7884919ea396897d7063574a3e35414e5b6774818d9aa69a8e8174717e8b97a49c9083766a5d5144373b4854616d7a8793a0a194877b6e6155483b2f22150800000000000b16222d39444f5b66727d8994a0aba79c9085796e62574b4037373737373737373737373737373d4a5763707d8a97a4b0a99c8f8275695c4f423e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3d39332b23190f040000000000000000000000000000000b1824303c4855616d7986929eaaa4988b7f73808c98a5a195887c7063574b3f32261a0d07131f2c3844505d6975828e9aa7a093877a76838f9ca8a4988c8073675b4f42362a1e12050000000000000000000000000000000000000000000000000000000000000006111c26313c46515c66717c86919c9e94897e74695e54493e34291e1e2a3744505d6976828f9ba4978b7e7265594c403435414d5a66737f8c98a59b8e8275695c5043372a1e11040000000000000000000000000000000000000a141f2a35404a55606b76818b96a1968b81766b60554b40352a1f1417222c36404a535d666f77808890989b938b847c746c655d554e463e362d282826221d1710070000000000000000000000000000000000000000000a141f2a35404a55606b76818b96a1968b81766b60554b403744505d6a7784909c9b8f88888888888888888888888889929e9d9189888888887e7165584b3e3225180b00000000000000000000000000000000000005101a25303b46505b66717c87919c9b90857a70655a4f44404c596673808b959e91858282828282828282828282828c99a09387828282828275695c4f4236291c0f000000000004101b27323d48535e69737e88929ca6b0b3b2aa9d91877d7369605a56524e4c4a48484748484a4c4e51555a5f656b727a828b949da6ada49a90867b71665c51463b2f24190d020000000000000000010c18242f3b46515d68737e89949ea8b0a69c92887f766d655d564f4944403d3a383636363637383a3d40454a4f565d656d767f88929ca6aea49a8f857a6f64584d42362b1f14080000000000000004101c28333f4b57636e7a86929ea9aa9e92867a6f63574b3f3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4954606c7884909ca8ab9f93887c7064584c4035291d11050000000000000000000000000000131f2c3946525f6c7986929faca296897c7063574a3e323030302f2d28231b130a0100000000000000030f1a26313c47525d68737d88929ca39a90877e756c645d554e484242464a4d4f5152525251504e4b4844403b36302c2f3235383c41464a4d52575c61676d737873675c5045392e241d160e060000000000000000000000000000000000000000000006101b26313b46505b66717b86919b9f94897f74695f54494653606c7986939fa195887b6f6255493c33404c5966727f8c98a59c8f827573808c99a69b8e8275685c4f42363946525f6c7985929fa295897c6f6256493c3023160a000000000005111c28333e4a55616c78838f9aa6ada1968a7f73685c51454444444444444444444444444444444a5763707d8a97a4b0a99c8f8275695c4f423632323232323232323232323232323232323232323232323232323232302d2821191007000000000000000000000000000000030f1b2734404c5865717d8996a2aea195887c707d8995a2a4988c8073675a4e4236291d110a16232f3b4754606c7985919ea99d90847773808c99a5a89c9083776b5e52463a2e21150900000000000000000000000000000000000000000000000000000000000000000a151f2a353f4a555f6a75808a959f9b90857b70655b50453b30251f2c3945525f6b7885919ea295897c6f63564a3d31323e4b5764707d8996a39d9184786b5e5245392c1f1306000000000000000000000000000000000000030e18232e39444e59646f7a858f9a9d92877c72675c51463c31261b101a242e38414b545d656e767e878e969d958e867e766f67605850483f372e241b16120c0500000000000000000000000000000000000000000000030e18232e39444e59646f7a858f9a9d92877c72675c51463c43505d6975808a959a8d827b7b7b7b7b7b7b7b7b7b7b83909d9c8f827b7b7b7b7b7164584b3e3125180b0000000000000000000000000000000000000009141e29343f4a545f6a75808b95a0978c81766c61564b404b57636e79838e9894897f757575757575757575757f8c99a09386797575757571665a4e4135281b0f00000000000a15212c38434e5a65707a85909aa4aeada7a5a7a2988f857b71675e544a423f3d3c3b3b3b3c3d3f4245494e535a61687078828b949ea8aca2988d83786d62574c41352a1e1307000000000000000005111d2934404c57636e79848f9aa5b0a99e948a80766d645b534b443e3934302d2b2a2929292a2c2e3134393e444b535b646d76808a949faaaba1968b80756a5e53473c3025190d01000000000000000b17232f3a46525e6a75818d99a5afa3978b7f73675c504a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4d5965717d8995a0aca69a8f83776b5f53483c3024180c010000000000000000000000000000131f2c3946525f6c7986929faca194887b6e6255483c2f23232322201d1711090100000000000000000914202b37424d59646f7a858f9aa49c92887e756b635a524b4442484e5256595c5d5e5f5f5e5d5a5854504c47413b352e303840474d52565a5c5e5f5f5e62686c6961564b433d362f2720180f07000000000000000000000000000000000000000000000a141f2a343f4a545f6a747f8a949f9b90867b70665b504754616d7a8794a0a194877a6e6154473b323e4b5865717e8b98a49d90837673818d9aa79a8e8174675b4e41343845515e6b7784919ea3968a7d7063574a3d3024170a0000000000000b16222d3944505b67727e8995a0aca79b9085796d625651515151515151515151515151515151515763707d8a97a4b0a99c8f8275695c4f42362925252525252525252525252525252525252525252525252525252524211c160f070000000000000000000000000000000006131f2b3743505c6874818d99a5ab9e9286796d7a86939fa89b8f83766a5e5245392d20140d1a26323f4b5763707c8895a1a69a8d8174717d8996a2ac9f93877a6e62564a3d3125190c00000000000000000000000000000000000000000000000000000000000306090b0e18232e38434e58636e78838e98a2978c82776c62574c42372c222e3a4754606d7a8693a0a194877a6e6154483b2f2f3c4855626e7b8894a19f9386796d6054473a2e2114080000000000000000000000000000000000000007121c27323d48525d68737e89939e998e83786e63584d42382d2217121c262f38424b535c646c757c848c949b9890888179716a625a514940372d241a100600000000000000000000000000000000000000000000000007121c27323d48525d68737e89939e998e83786e63584d42414d59636e78838d98948a7f746e6e6e6e6e6e6e6e7683909d9c8f82756e6e6e6e696054483c3023170a000000000000000000000000000000010407090a0d18222d38434e59636e79848f999e93887d72685d524747525c67717c87919b90867b7168686868686868727f8c99a09386796d686868665f554a3e3226190d00000000030f1b26323d4954606b76818c97a1acada39b989ba3a1978d83796f665c52483e352f2e2e2e2f303335393d42484f565e666f79828c96a1aba99f948a7e73685d52463b2f24180c00000000000000000a16222e3945515d68747f8b96a1acada2978d82786e645b5249413a332d2824211f1d1c1c1c1d1f2124282d33394149525b646e78838d98a3aea89d92867b6f64584d41352a1e12060000000000000006121e2a36414d5965717c8894a0aca79c9084786c6056565656565656565656565656565656565656565656565e6a75828d99a5ada2968a7e72665a4f43372b1f1408000000000000000000000000000000131f2c3946525f6c7986929faca194877a6d6154473a2e2116161614100c06000000000000000000020e1a25313c48535f6a75808b96a19e948a80766c6259514840474e54595e6266686a6b6b6b6b696764615c58524d46403839424a52585e6366696b6b6b6b6a6865625e59544e474139322a21191007000000000000000000000000000000000000000000030d18232d38434d58636d78838d98a2978d82776d62574d54616d7a8794a1a094877a6d6053473a313e4b5764717d8a97a49d90847774818e9aa79a8d8173675a4d41343744515d6a7784919ea4978a7d7164574a3e3124170b00000000000005111c28333f4a56616d78848f9ba6aca1968a7e73675d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d63707d8a97a4b0a99c8f8275695c4f4236291c18181818181818181818181818181818181818181818181818181714100b0500000000000000000000000000000000000a16222f3b47535f6c7884919da9a89b8f83766a7783909ca89f92867a6d6155493c302417111d2936424e5b6773808c98a4a3978a7e716e7a87939faca3978a7e7266594d4135291c10040000000000000000000000000000000000000000000000000001060b0f121518191b1c27313c47515c67717c87919c9e93897e73695e53493e33292f3b4855626e7b8894a19f9386796c6053463a2d2e3a4754606d7a8693a0a194887b6e6255483b2f22150900000000000004080b0c0d0d0d0d0d0d0d0d0d0d0d16202b36414c57616c77828d97a0958a7f746a5f54493e33291e13141d262f38414a525a636b727a828991989a938b837c746b635b52493f362c22180e030000000000000000000004080b0c0d0d0d0d0d0d0d0d0d0d0d16202b36414c57616c77828d97a0958a7f746a5f54493e47525c67717c86919b91867c71676161616161697683909d9c8f8275696161615e574e43382c20140800000000000000000000000001060a0e1113151718191c27313c47525d67727d88939e9a8f84796e63594e434b55606a757f8a94988d83786e635b5b5b5b65727f8c99a09386796d605b5b5a544d43382d21160a0000000008141f2b37434e5a65717c88939ea8b1a69b918c919ba59f958b82786e645a50473d33292122222426292d31373d444c555d67707a858f9aa5b0a69b90857a6e63574c4034291d1105000000000000020e1a26323e4a56626d7985909ca7b2a79c91867b70665c524940372f28221c181412100f0f10111215181c22282f374049525c66717b87929da8aea3978c8175695e52463a2e22160a00000000000000020d1925313d4854606c78848f9ba7aca094897d71656363636363636363636363636363636363636363636363636e7a86929eaaa99d9185796d62564a3e32261b0f03000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d201409090704000000000000000000000007131e2a36424d5964707b87929da2988d82786e645a5047414951585f656a6e727577787878777673706d68635e58514a43424b545c63696e7275777878787775726e6a655f59524b443c332b2219100600000000000000000000000000000000000000000006111c26313c46515c66717c86919c9e94897e74695e5454616e7b8894a1a094877a6d6053473a313e4a5764717d8a97a49d90847774818e9aa79a8d8173675a4d40343744515d6a7784919ea4978a7d7164574a3e3124170b000000000000000b17222e3945505c67727e8a95a1aca69b9084786d6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a707d8a97a4b0a99c8f8275695c4f4236291c0f0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a0804000000000000000000000000000000000000010e1a26323e4b57636f7c8894a0ada5988c80736774808d99a5a2968a7d7165584c4033271b14202d3945525e6a76838f9ba8a094877b6e6b7784909ca9a69a8e8275695d5145382c201407000000000000000000000000000000000000000000000000070d12171b1f2224262728282a35404a55606a75808b95a09a90857a70655a50453a30303c4956636f7c8996a29e9285786b5f5245392c2c3946535f6c7986929fa296897c6f6356493c3023160a00000000030a101417191919191919191919191919191a242f3a45505b65707b86919c9c91867b70655b50453a2f251a0f141d262f3840495159616870777f868e959d958d867d756d645b51483e342a1f150a0000000000000000030a101417191919191919191919191919191a242f3a45505b65707b86919c9c91867b70655b5045404a555f6a747f8994988e83796e645955555d697683909d9c8f8275695c5555524d453c32271b10040000000000000000000002080d12161a1d202224252626262b35404b56616b76818c97a0968b80756a5f554a434e58636d78828d97958a80756b60564e5965727f8c99a09386796d60534e4d49433a31271c1105000000000c1824303c48535f6b76828d99a4afaa9f948a7f89939ca69d948a80766c62594f453b31281e16171a1d21262c333a434b555e69737d88939ea9aca1968b8074685d5145392d21160a00000000000006121e2a36424e5a66727e8a96a1adaca1968a7f74695f544a40372e251d16110c0805030000000406080c11161d252e37404a555f6a75808c97a3aea99d91867a6e62564a3e32261a0e02000000000000000814202c38444f5b67737e8a96a2aea5998d817570707070707070707070707070707070707070707070707070737f8b97a2aea4988c8175695d5145392d22160a00000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d20140700000000000000000000000000000b17232f3b47525e6a75818c98a39c91867b70665c5248414a535b636a70767a7e81838585858482807d79746f69635c554d4a545d666e757a7e828485858583817e7a76706a645d554e453d342b22180f050000000000000000000000000000000000000000000a151f2a353f4a555f6a75808a959f9b90857b70655b54616d7a8794a1a094877a6d6154473a313e4b5764717e8b97a49d90847774818e9aa79a8e8174675a4d41343844515e6b7784919ea4978a7d7063574a3d3024170a0000000000000006111d28343f4a56616d78848f9ba6aca1958a7e777777777777777777777777777777777777777777777d8a97a4b0a99c8f8275695c4f4236291c0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2a36424e5a67737f8b98a4aea295897c7064717d8a96a2a6998d8174685c4f43372b1e1724303c4955616d7a86929fa99d9184786b6874818d99a6aa9e9285796d6154483c3024170b00000000000000000000000000000000000000000000040b12181e23272b2e3133343535343439434e59636e79848e99a1978c81766c61574c4137303d4a5663707d8a96a39e9184776b5e5145382b2c3845525f6b7885929ea3968a7d7063574a3d3024170a000000050e151b202426262626262626262626262626262629333e49545f69747f8a95a0988d82776c61574c41362b20160b141d262e373f474f565e666d747c838b939b9890877e766d635a50463c31261c1106000000000000050e151b202426262626262626262626262626262629333e49545f69747f8a95a0988d82776c61574c41434e58636d77828d97958a80756b6056505d697683909d9c8f8275695c4f4846423b332a20150a00000000000000000000070d13191e2226292c2f3032333333333239444f5a65707a85909b9c91877c71665b504647515c66717b86909b91877c72675d525965727f8c99a09386796d605346413d3831281f150a0000000004101c2834404c5864707c87939faab0a4998e8378818a949ea59c92887e746b61574d433a30261c120d10151a21283139434d57616c76828d98a4afa79c9085796d62564a3e32261a0e0200000000000916222e3a47535f6b77838f9ba6b2a79c9085796e63584d42382e251c130c050000000000000000000000050c131b252e38434e59646f7a86929da9aea2968b7f73675b4f43362a1e120600000000000000040f1b27333f4a56626e7a86919da9aa9e92867d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d848f9ba7ab9f93877b7064584c4035291d110500000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d20140700000000000000000000000000030f1b28343f4b57636f7b86929ea1968b80746a5f544a404a535c656d757b82878b8e90919292918f8c8985807a746e665f57515c666f7880868b8e91929291908e8a86817c756f675f574f463d342a20170c020000000000000000000000000000000000000000030e18232e38434e58636e78838e98a2978c82776c6257606d7a8693a0a194887b6e6155483b323f4b5865717e8b98a59c90837673808d99a69b8e8174685b4e42353845525e6b7885919ea396897c7063564a3d3023170a00000000000000000c17232e3945505c67737e8a95a1aca69b8f8584848484848484848484848484848484848484848484848b97a4b1a99c8f8275695c4f4236291c0f060606060606060606060606060606060606060606050200000000000000000000000000000000000000000000000815212d3946525e6a77838f9ba8ab9e9286796d616e7a87939fa99d9084786b5f53463a2e221b2733404c5865717d8a96a2a69a8d81756865717d8a96a3aea295897d7164584c4033271b0f020000000000000000000000000000000000000000070e161d23292f33373b3d3f41414241403f3c47525c67727c87929d9e93887d73685e53483e333d4a5763707d8a97a49e9184776b5e5144382b2b3845515e6b7784919ea4978a7d7164574a3e3124170b0000050e1720272c30333333333333333333333333333333333337424d58636d78838e999e93897e73685d52483d32271c1212141c252d353d454c545b626a71798189929a9991887f756c62584d43382d22170b0000000000050e1720272c30333333333333333333333333333333333337424d58636d78838e999e93897e73685d52483d46515b66707b85909a92877d72685d535d697683909d9c8f8275695c4f423a36312921180e040000000000000000020a11181f242a2e3236393b3d3e3f4040403f3e3d48535e69747e89949f988d83786d62574c424a545f69747e8993998e84796f645a5965727f8c99a09386796d6053463a312d261f160d03000000000714202c3844515d6975818c98a4b0ab9f94887d7178828c96a0a49a90867c73695f554b42382e241a1107090f161f27313b454f5a65707b87939eaaada1968a7e72665a4e42362a1e120500000000000d1925323e4a56636f7b87939fabaea2978b7f73685c51463b31261c130a01000000000000000000000000000109131c27313c47525e6975818d99a5b1a79b8f83776b5f53463a2e22150900000000000000000b16222e3a46525d6975818d98a4aea2978d8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b94a0aca69a8f83776b5f53473c3024180c0000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d2014070000000000000000000000000007131f2c3844505c6874808b97a39c9085796e63584d4348525c656e777f868d92979a9d9e9f9f9d9c9995918c867f7871696058626d78818a91979b9d9e9f9e9d9a97928d878079716961584f463c32281e140900000000000000000000000000000000000000000007111c27313c47515c67717c87919c9e93897e73695e5f6c7985929fa295897c6f6256493c33404d596673808c99a59b8e8275727f8c98a59c8f8275695c4f43363a46535f6c7986929fa195887b6f6255493c2f231609000000000000000006111d28343f4b56626d7984909ba7aca097919191919191919191919191919191919191919191919191949da8b3a99c8f8275695c4f4236291c13131313131313131313131313131313131313131313110f0a050000000000000000000000000000000000000000000c1825313d4955626e7a86939faba89b8f83766a5e6b7783909ca8a094877b6f62564a3e31251e2a37434f5c6874818d99a5a3978a7e7265616e7a87939faba5998d8174685c4f43372b1e12060000000000000000000000000000000000000008101820272e353a3f43474a4c4d4e4e4e4d4b49464b55606b75808b96a09a8f857a6f645a4f453a3d4a5763707d8a97a49e9184776a5d5144372a2b3844515e6b7784919ea4978a7d7164574a3e3124170b00010c17202931383d3f40404040404040404040404040404040404046515c67727c87929d9a8f857a6f64594e44392e231b1e202122232b333a4249515860676f778088919a9a91877e746a5f544a3f33281d1105000000010c17202931383d3f40404040404040404040404040404040404046515c67727c87929d9a8f857a6f64594e443f4a545f69737e8993998e84796f645a5d697683909d9c8f8275695c4f42362a251f170f060000000000000000040c141c232a30353a3e4245484a4b4c4c4d4c4c4a49464c57626d78838d989f94897e74695e5348434d58626d77828c97958b81766b615965727f8c99a09386796d6053463a2d211c150d0400000000000b1724303c4854616d7985919da9b1a69a8e82776b707a848e98a1a2988f857b71675d544a40362c23190f05050d151f29333e49545f6a76828e99a5b1a69a8e83766a5e52463a2e2115090000000003101c2935414e5a66737f8b97a3afaa9e92867a6e63574b40352a1f140a01000000000000000000000000000000010b15202b36414d5964707c8894a1adab9f93877b6f62564a3e3125180c000000000000000006121d2935414d5864707c88949faba89f98969696969696969696969696969696969696969696969696969696979da6ada1968a7e72665a4f43372b1f13080000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d201407000000000000000000000000000b17232f3c4854606c7884909ca3978b8074685d5247444f5a646e77818991989ea3a5a09d9b9a9a9b9c9f9c97918a837b736a6168737f8a949ca3a29c97959596999d9e98928b837b736a61584e443a30261b10060000000000000000000000000000000000000000000a15202a35404a55606a75808a95a09a90857a70655e6a7784909da3978a7d7164584b3f35424e5b6874818d9aa6998d8073717d8a97a39d9084776a5e5145383c4855616e7a8794a0a093867a6d6154473b2e2115080000000000000000000c17232e3a45515c68737e8a96a1aca9a19e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9fa6aeb5a99c8f8275695c4f42362920202020202020202020202020202020202020202020201e1b1610090100000000000000000000000000000000000003101c2834414d5965727e8a96a3afa4988c8073675b6774808c99a5a3978b7e72665a4d413528212e3a46535f6b7884909da9a093877b6e625e6b7783909ca8a99c9084786b5f53473b2e22160a00000000000000000000000000000000000008111a222a323940464b4f5356595a5b5b5b5a5855524e4e59646e79848f99a1968c81766c61564c413d4a5763707d8a97a49e9184776a5e5144372b2b3844515e6b7784919ea4978a7d7164574a3e3124170b0007131e29323b43494c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c55606b76818b96a1968b81766b60554a3f352a272b2d2e2f30303132383f464e555d656d767f88929b9990867b71665b5044392d22160a00000007131e29323b43494c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c55606b76818b96a1968b81766b60554a3f424d57626c77818c96968b81766c615d697683909d9c8f8275695c4f4236291c140d060000000000000000040d161e262e353b41464a4e52545658595959595857555350505b66717c87919c9b90857a70655a4f4446505b65707a858f9a92887d73685e65727f8c99a09386796d6053463a2d20130a030000000000010e1a27333f4c5864717d8995a1adada195897d726668727c869099a3a1978d83796f665c52483e352b21170d04030d17212c37424e5a65717d8995a1adab9f93877a6e62564a3d3125180c0000000006131f2b3844515d6a76828f9ba7b3a69a8e82766a5e52463a2f23180d030000000000000000000000000000000000030e1925303c4854606c7884919da9afa3978b7e7266594d4134281b0f0200000000000000010d1924303c48545f6b77838f9ba6b1a9a4a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a4a8afa99d9185796d61564a3e32261a0f030000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d201407000000000000000000000000010e1a27333f4b5864707c8895a19e92867a6f63574c404b56616b76808a939ba3a69f9994918e8d8d8e9093969b9c948d857c736a6c7884909ba6a198908b89888a8c91969d9d958d857c736a60564c42372d22170c010000000000000000000000000000000000000000030e19232e39434e59636e79838e99a1978c81776c616875828e9ba5998c8073675a4e423b45515e6a7683909ca3978b7e716f7b8894a19f9286796d6154483c3f4b5764707d8996a29d9184786b5f5245392c20130600000000000000000006121d2934404b57626d7985909ca7b2adaaaaa7a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a6abb3b5a99c8f8275695c4f42362c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a27211b130b0100000000000000000000000000000000000713202c3844505d6975818e9aa6aea195897c70635864717d8996a2a79a8e8275695d5144382c25313d4a56626f7b8794a0a99d9084786b5f5b6774808c98a5aca094887b6f63574a3e3226190d010000000000000000000000000000000006101a232c343c444b51575b5f6365676868676664625e5a54525d67727d88929d9d93887d73685d53483d4a5763707d8a96a39e9184776b5e5144382b2b3845515e6b7885929ea3968a7d7063574a3d3024170a000c18242f3a444d545859595959595959595959595959595959595959595959646f7a858f9a9d92877c72675c51463b3132373a3b3c3c3d3e3e3e3b3c434b535b646d768089949e988d83776c61564a3e32261a0e0200000c18242f3a444d545859595959595959595959595959595959595959595959646f7a858f9a9d92877c72675c51463b46505a656f7a858f9993887d73695e697683909d9c8f8275695c4f4236291c0f030000000000000000020c161f2830383f464c52575b5e616364656666666564625f5c58545f6a75808b95a0978c81766b61564b4049545e69737d8893998f857a6f6565727f8c99a09386796d6053463a2d20130700000000000004111d2a36434f5b6874818d99a5b1a99d9185796d61606a747d87919ba59f958b81776e645a50463d33291f150c0205101b26323d4955616c7885919da9afa3978a7e7266594d4134281b0f020000000915222e3b4754606d7985929eabafa3978a7e7266594d41352a1e1207000000000000000000000000000000000000000814202c3844505c6874818d99a6b2a79a8e8275695c5043372a1e110500000000000000000814202b37434f5b66727e8a96a2adb4b1a9a29f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa1a7afb3b0a4988c8074695d5145392d22160a000000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d20140700000000000000000000000004111d2a36424f5b6774808c98a59a8e82766a5e524645515c67727d88929ca5a59c948e88848281818183868a8f959b978e857c726f7b8894a1a59a8f867f7c7b7d81858b929a9f978e857c72685e54493e34291e130700000000000000000000000000000000000005090d11131c27323c47525c67727c87929d9e93887e736866737f8b98a49b8f83766a5e5349484a55616d7986929fa094887b6f6c7985919ea295897c7064594d4848505b6773808c98a59a8e8275695c5043372a1e1105000000000000000000010c18232f3a45515c68737f8a96a1adb8aea49c9898989898989898989898989898989898989898989aa1abb5a99c8f8275695c4f423939393939393939393939393939393939393939393939393937332d251d130900000000000000000000000000000000000b17232f3c4854606c7985919daaaa9e9285796d6055616d7a86929faa9e9285796d6054483b2f2834414d5966727e8b97a3a6998d8174685c5864707c8995a1aea4978b7f73665a4e4236291d1105000000000000000000000000000000040e18222c353e464e555c62676c6f727374757473716e6a65605a56616b76818b96a19a8f84796f645a4f444956636f7c8996a29e9285786b5f5245382c2c3945525f6c7885929fa396897c6f6356493d3023160a00101c2935404c565f65666666666666666666666666666666666666666666666668737e89939e998e83786d63584d42373d43464848494a4b4b4a4640394149525b646d77828d989f94897d72665a4e42362a1e12050000101c2935404c565f65666666666666666666666666666666666666666666666668737e89939e998e83786d63584d423e49535e68737d88929a8f857a7065697683909d9c8f8275695c4f4236291c0f0300000000000000000a141e28313a424a51585d62676a6d6f717273737372706e6c68645f59636e79848f999e93887d72675d5247424c57616c76818b96968c81776c65727f8c99a09386796d6053463a2d2013070000000000000713202c3945525e6b7784909ca9b2a6998d8175685c58626b757f89939da79d938a80766c62584f453b31271e140a000a15212c3844505c6875818d9aa6b2a69a8e8275695c5043372b1e12050000000b1724303d4a56636f7c8895a1aeaca093877b6e6256493d3125190d0100000000000000000000000000000000000000030f1b2734404c5865717d8a97a3afaa9d9185786b5f5246392d2014070000000000000000030f1b27323e4a56626d7985919da9b4aba0979292929292929292929292929292929292929292929292959ea8b4ab9f93877b7064584c4035291d1105000000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d2014070000000000000000000000000714202d3945525e6b7783909ca2968a7e7165594d414a56626d79848f9aa4a79c938a837c7875737375777a7e848a9097978e847a707d8a96a3a094897d746f6f71747a80889099a0978e847a70655b50453a2f24190d02000000000000000000000000000000050b1015191d2022242b35404b55606b75808b96a09a8f857a6f656f7c8894a09f93877b6f645b5654565c67727e8a96a29c9084786c6975828e9aa5998d81756a5f58555558616c7884909ca2968a7e7266594d4134281b0f020000000000000000000007121e2935404b57626e7985909ca7b3a99d928b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8f9aa5b2a99c8f8275695c4f4646464646464646464646464646464646464646464646464646433e372f251b1005000000000000000000000000000000020e1a27333f4b5864707c8995a1ada79a8e8275695d515e6a76838f9ba7a195897c7064574b3f322c3844505d6975828e9aa7a2968a7d71655954616d7986929eaaa79b8f83766a5e5245392d2114080000000000000000000000000000000b16202a343e47505860676e73787b7e81818281807d7a76716b645d5a646f79848f9aa1968b81766b61564b4855626f7b8895a29f9286796c5f5346392d2d3a4653606c7986939fa295887b6f6255493c2f22160900121f2b3844515d68717373737373737373737373737373737373737373737373726c77828d97a0958a7f74695f54493f484f5354555657575857524a41384049525c66707b87929e9a8f83776b5f52463a2d2114080000121f2b3844515d68717373737373737373737373737373737373737373737373726c77828d97a0958a7f74695f54493e414c56616b76818b95978c82776d697683909d9c8f8275695c4f4236291c0f030000000000000007111c26303a434c545c63696e73777a7c7e7f8080807e7d7b7874706a645d67727d88939e998f84796e63584e43454f5a646f79848e9993897e7469727f8c99a09386796d6053463a2d2013070000000000000916222f3b4854616d7a86939facafa2968a7d716558505a636d77818b959ea59b92887e746a61574d433930261c120804101c2834404c5965717e8a96a3afaa9d9185786c5f53463a2d2014070000000d1926323f4c5865717e8b97a4b0aa9d9184786b5f52463a2d2115090000000000000000000000000000000000000000000b1824303d4955626e7b8794a1adada093877a6e6155483b2f2216090000000000000000000a16222e3945515d6974808c98a4afa79b8f86868686868686868686868686868686868686868686868c98a4b1a69a8e83776b5f53473c3024180c00000000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d2014070000000000000000000000000916222f3c4855616d7a86939f9f93867a6e615549434f5b67737e8a95a0aa9f958b8178716c686767686a6e73787e868d95968c82777d8a97a49d9184786c636264696f767e879099a0968c82776c62574c40352a1e130700000000000000000000000000020a10161c2125292c2f31323339444e59646e79848e99a1968c81766c6b78848f9ba3978c81766d66626162676e78838f9aa3978c80746865717d8995a19d92867b7169646161646a737e8994a09d92867a6e62564a3d3125180c0000000000000000000000010c18232f3a46515d68747f8b96a2ada89b8e827e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e8a97a4b0a99c8f8275695c5353535353535353535353535353535353535353535353535353524f4941372d22160b00000000000000000000000000000006121e2a37434f5b6774808c98a5afa3978b7e7266594e5a67737f8c98a4a5988c8073675b4e42362f3b4754606c7985919eaa9f93867a6e6155515d6976828e9ba7ab9f92867a6e6155493d3024180c000000000000000000000000000007121d27323c465059626a72797f84888b8d8e8e8e8c8a86827c766f675e5d68737d88939d9d92887d72675d524854616d7a8794a0a093877a6d6154473b2e2e3b4854616e7a8794a0a094877a6d6154473b2e2115080013202c3946535f6c7980808080808080808080808080808080808080808080807e71707b86919b9b91867b70655a5047515a5f616262636465635c53483d37404a545f6a76828e9a9f93877b6e6255493c3023170a000013202c3946535f6c7980808080808080808080808080808080808080808080807e71707b86919b9b91867b70655a50453a454f5a646f79848e9993897e74697683909d9c8f8275695c4f4236291c0f03000000000000020d18232e38424c555e666d747a7f8386898b8c8c8c8c8b8a8784817b766f67616b76818c97a0958b80756a5f544a3f48535d68727d87929a90857b70727f8c99a09386796d6053463a2d2013070000000000000b1824313d4a5763707c8995a2aeaca093877a6e615549515b656f79838c96a0a49a90867c73695f554b42382e241a11070c1824303d4955626e7b8794a0adada094877b6e6155483c2f2316090000000e1b2834414e5a6773808d99a6b2a89b8e8275695c5043372a1e11050000000000000000000000000000000000000000000814212d3a46535f6c7985929eabafa296897c7063574a3d3124170b00000000000000000005111d2935404c5864707b87939faba79b8f83797979797979797979797979797979797979797979808c98a4ada1968a7e72665a4e43372b1f130700000000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d2014070000000000000000000000000b1825313e4a5763707d8996a29c9083776a5e524547535f6b77838f9ba6a5998e83786f66605c5a5a5b5e62676d747b838c9494897e7d8a96a39c8f8276695c55585d646c747e87919b9e93897e73685d52463b2f24180d010000000000000000000000050d141b22282d3135393b3d3f40404047525d67727d88929d9d93887d7368737e8a95a09d92887f77726f6e6f7278818a95a09d92877b6f63616d78848f9aa3988d837b74706e6e70757c858f9aa2978c8175695e52463a2d21150900000000000000000000000007121e2935404c57636e7a85919ca8aa9e92877b7171717171717171717171717171717171717d8a97a4b0a99c8f8275695f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a53493e33271b0f0300000000000000000000000000000915222e3a46535f6b7784909ca8aca093877b6e62564b57636f7c8895a1a89c8f83776a5e524539323f4b5763707c8895a1a89b8f83776a5e524d5a66727e8b97a4aea2968a7d7165594d4034281c0f03000000000000000000000000010d18232e39434e58626b747c848a9094979a9b9b9a9996938e88817970675e616c76818c96a1998f84796f64594e535f6c7985929fa195887b6f6256493c30303d4956626f7c8895a29f9285796c5f5346392d2013070013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b7e7169747f8a959f978d82776c61564d59636b6e6e6f7071716e655a4e413538424d5965727e8b97a3978a7d7164584b3e3225180c000013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b7e7169747f8a959f978d82776c61564c413d48525d67727c87919b90867b707683909d9c8f8275695c4f4236291c0f0300000000000008131e2a353f4a545e6770787f858b8f93959798999999989694918c8781797169656f7a85909b9c91877c71665b5045414b56606b75808a95978c8277727f8c99a09386796d6053463a2d2013070000000000000d1926333f4c5865727e8b98a4b1aa9d9184776b5e524649535d67717a848e98a2a2988e857b71675d534a40362c22190f0814212d3a46535f6c7885919eabafa396897d7064574a3e3124180b000000101c2936424f5c6875828e9ba8b2a6998c8073675a4d4134281b0f0200000000000000000000000000000000000000000005121f2b3844515d6a7784909da9b1a4978b7e7165584b3f3225190c000000000000000000010c1824303c47535f6b77838e9aa6ab9f93877b706c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d7884909ca8a89d9185796d61564a3e32261a0f0300000000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d2014070000000000000000000000000d1a2733404c5966727f8b98a59a8d8174675b4f424a56636f7b8794a0aba094887c71675d55504d4d4f52565c6269717a828b9590857c8996a39c8f8275695c4f4c525a626b75808a949f9b9085796e63574c4035291d110600000000000000000000060f171f262d33383d4245484a4c4c4c4c4b4b56606b76818b96a19a8f847a6f6d78838e98a29a9189837e7b7b7b7e838a939c9f958b80756a5e5c68737e89939d9f958d86807c7b7b7d81868e97a19a90867b7064594d4135291d1105000000000000000000000000010d18242f3b46525d6974808b97a2ada3988c817569656565656565656565656565656565707d8a97a4b0a99c8f82756c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b655b4f44372b1f120500000000000000000000000000010d1925323e4a56626f7b8793a0aca89c9084776b5f524754606c7885919daa9f93867a6e6155493d36424e5a6773808c98a4a4988c8073675b4e4a56636f7b8894a0ada69a8d8175695c5044382b1f130700000000000000000000000007131e2935404b55606a747d868e959b9f9a96949495979b9e99928b837970665c656f7a858f9aa0968b80756b6055515e6a7783909ca3978a7d7164584b3f32333f4b5864717d8a97a39c9083776a5d5144382b1e12050013202c3946535f6c79869399999999999999999999999999999999999999988b7e71646d78838e999e93897e73685d525d69757a7b7c7d7d7e76695d504437333d4a5663707d8a96a3988c7f7265594c3f3326190c000013202c3946535f6c79869399999999999999999999999999999999999999988b7e71646d78838e999e93897e73685d52483d414b56606b75808a95978c82777683909d9c8f8275695c4f4236291c0f030000000000010d1824303b46515c667079828a91969b9c97949291919193959a9d98928b837b716769747e89949f988d82776d62574c41444f59646e79838e9893897e737f8c99a09386796d6053463a2d2013070000000000000e1b2734414d5a6773808d99a6b3a89b8e8275695c4f43414b555f68727c86909aa3a0978d83796f655c52483e342b21170d121e2b3744515d6a7683909ca9b1a5988b7e7265594c3f3326190d000000111d2a3744505d6a7683909da9b1a4988b7e7165584b3f3226190c0000000000000000000000000000000000000000000003101d2936434f5c6975828f9ba8b2a6998c807366594d4033271a0d0000000000000000000008131f2b37434e5a66727e8995a1ada4988c8074685f5f5f5f5f5f5f5f5f5f5f5f5f5f5f65717d8995a1ada4988c8074685d5145392d21160a0000000000000000000000000000000000000003131f2c3946525f6c7986929faca094877a6d6053473a2d2014070000000000000000000000000f1c2835424e5b6774818d9aa4978b7e7265584c404d5965727e8b97a3a89b8f83776b60554b43414142464b51585f687079838c968c818996a29c908376695c504348505a636d78838d98a1968b8074685d51453a2e22160a000000000000000000060f18212930383e44494e5154575859595958575459646f79848f9aa1968b81766b727c8690989f9b948e8a8888888b8f959c9e968d83796f645956616c77818b949c9f97918c898888898c9198a09a92887e74695e53483c3125190d010000000000000000000000000007131e2a35414c57636e7a85919ca8a99d92867a6f635858585858585858585858585863707d8a97a4b0a99c8f827979797979797979797979797979797979797979797979797979797979776c6053463a2d2014070000000000000000000000000004101d2935414e5a66727e8b97a3b0a5998c8074685b4f44505c6975818e9aa6a2968a7d7165594c403945525e6a76838f9ba8a195887c7063574b47535f6c7884919da9a99d9185786c6054483b2f23170a0000000000000000000000000c18232f3a46515c67717c868f98a09a938e8a8887888b90969d9d958b82786d635e68737e88939e9d92877c72675d525b6874818d9aa5998c8073675b4e423636424e5b6773808d99a69a8d8174685b4f4236291c10030013202c3946535f6c79869292929292929292949ca69e9592929292929292928b7e716467717c87929d9a8f84796f64595d69768388898a8a85786c6054494240414a5764707d8a96a3998c7f7266594c403326190d000013202c3946535f6c79869292929292929292949ca69e9592929292929292928b7e716467717c87929d9a8f84796f64594e4339444e59636e78838d9893897e7683909d9c8f8275695c4f4236291c0f03000000000005111d2935414c57636d78828b949b9d96908b888584848586898e949b9d958d83796f646d78828d989f94897e73695e53483d47525c67717c86919a8f857a7f8c99a09386796d6053463a2d2013070000000000000f1c2935424f5b6875828e9ba8b3a6998d8073675a4d4139434d57606a747e88919ba59f958b81776e645a50463d33291f15101c2935424f5b6875818e9ba7b3a69a8d8173675a4d4134271b0e010000121e2b3845515e6b7784919eaab0a3968a7d7063574a3d3124170b00000000000000000000000000000000000000000000000e1b2835414e5b6774818e9aa7b4a79a8d8174675a4e4134281b0e00000000000000000000030f1a26323e4a55616d7985919ca8a89d9185796d61555252525252525252525252525e6a76828e99a5ab9f93877b7064584c4034291d11050000000000000000000000000000000000000005131f2c3946525f6c7986929faca094877a6d6053473a2d201407000000000000000000000000101d2a3643505c6976828f9ca296897c7063564a424f5b6874818e9aa7a4988c7f73675b4f44393434363a3f464d565e67717a848e938e919aa59d9084776a5e51443e48515c66717c87929e9c9185796e62564a3e32261a0e0200000000000000040e18212a333b42494f555a5e6163656666666563615d5d68737d88939d9d92887d726a747d868e949a9e9a97959495979b9d99938c847b71675d52505b656f79828a91979c9c9896949496999d9b96908880766c62584d42372b2014080000000000000000000000000000020d1924303b46525d6974808b97a2aea3978c8074695d524b4b4b4b4b4b4b4b4b4b5763707d8a97a4b0a99d918786868686868686868686868686868686868686868686868686868686867a6d6053473a2d201407000000000000000000000000000814202d3945515d6a76828e9ba7aea195897d7064584c414d5965727e8a97a3a6998d8174685c50433c4955616d7a86929faa9e9185796c60544743505c6875818d99a6ada195887c7064574b3f33261a0e020000000000000000000005111d2834404c57626d78838e98a1999089827d7b7a7b7f848b949d9d948a7f74695e616c77818c97a1998e84796e63595965727e8a97a39c8f83776a5e52473c3c47525e6a77838f9ca3968a7e7165594c4033271a0e010013202c3946535f6c798686868686868686868a96a2988c8686868686868686867e7164606b75818b96a1968b80756b605b6773808c969694887c70655b534e4c4d515b67737f8c98a4988b7e7265584c3f3225190c000013202c3946535f6c798686868686868686868a96a2988c8686868686868686867e7164606b75818b96a1968b80756b60554a3f3d47525c66717b86909a8f847983909c9c8f8275695c4f4236291c0f0300000000000915222e3a46515d69747f8a949d9d948b857f7b797777787a7d8289929b9f958b80756966717c87919c9b90857a6f645a4f44404b55606a747f8a94968b807e8c98a09386796d6053463a2d201307000000000000101d2a3643505d697683909ca9b1a5988b7e7265594c3f323b454e58626c768089939da79d938980766c62584f453b31271e141a2734414d5a6773808d99a6b3a89b8e8275685b4f4235281c0f020000121f2c3945525f6b7885929eabafa296897c6f6256493c3023160900000000000000000000000000000000000000000000000d1a2734404d5a6673808d9aa6b3a89b8e8275685b4e4235281c0f00000000000000000000000a16212d3945515c6874808c97a3ada195897d72665a4e4646464646464646464b57636e7a86929eaaa69a8e83776b5f53473b3024180c00000000000000000000000000000000000000010613202c3946535f6c7986929faca094877a6d6053473a2d201407000000000000000000000000111e2b3744515d6a7784909da194877b6e61554844515d6a7683909ca9a295897c7063574b3e3327272a2e343c444c555f68727c87919b9ca3ab9e9285786c5f5246393f4a555f6b76818d98a1968a7e73675b4f43372b1e1206000000000000020c16202a333c454d545b60666a6d707273737371706d6965616c76818c96a1998f84796f6b747c83898e9295969898989694918d88817a72695f554b49535d67707880868c9093969798989796938f8b857e766d645a50463b30251a0f0300000000000000000000000000000007131e2a35414c58636f7a86919da8a89c91857a6e63574c403e3e3e3e3e3e3e4a5763707d8a97a4b0ada2989393939393939393939393939393939393939393939393939393939393877a6d6053473a2d201407000000000000000000000000000b1824303c4955616d7986929eaaaa9e9286796d6154483d4956626e7b8793a0a99d9184786c5f5347404c5865717d8a96a2a69a8e8275695d5044404c5965717d8a96a2afa4988c8073675b4f42362a1e1205000000000000000000000915212d3945515c68737f8a959f9c91877e77716e6d6f7379828b95a09b91867a6f635a65707a85909aa0958b80756a6056626e7b87939f9f93877b6f63584e49484e58636f7b87939f9f93877a6e6256493d3024180b0000131f2c3946525f6b7679797979797979797b8895a2978a7d7979797979797979786f6359646f7a858f9a9d92877c71675c64707c8894a0998d82776d645e5a595a5d636d77838f9ba295897c7063574a3e3124180b0000131f2c3946525f6b7679797979797979797b8895a2978a7d7979797979797979786f6359646f7a858f9a9d92877c71675c51463b404a555f6a747f8994968b80828f9c9c8f8275695c4f4236291c0f0300000000000c1925313e4a56626e7a85919b9f958b8179736f6c6b6a6b6d71778089949f9d92867a6e626a75808b95a0978c81766b60564b40434e58636d78828d9792877e8b98a09386796d6053463a2d201307000000000000111e2a3744515d6a7784909daab0a4978a7d7164574b3e31333c46505a646d77818b959fa59b92887e746a60574d43392f261c1926333f4c5966727f8c99a5b2a99c8f8275695c4f4336291c10030000131f2c3946525f6c7986929facaea295887b6f6255483c2f22150900000000000000000000000000000000000000000000000d192633404c596673808c99a6b3a89c8f8275685c4f4235291c0f000000000000000000000005111d2834404c58636f7b87939eaaa69a8e82766a5e53473b393939393939444f5b67737f8b97a3ada1958a7e72665a4e43372b1f13070000000000000000000000000000000002070b0e1014202d3a4653606d798693a0aca094877a6d6053473a2d201407000000000000000000000000121f2c3845525e6b7885919ea09386796d60534745525f6b7885919eaba093877a6d6154483b2f221a1d232a323a434d56606a75808a95a0abada093877a6d6154483b38434e5965707c88939f9b8f83776b5f53473b2e22160a00000000000009131e28323c454e575e666c71767a7c7e8080807e7c7976716b656f7a858f9aa0968b80766b6a71787d8285888a8b8b8b8a8885817c76706860574d44414b555e666e757b808487898a8b8b8a8987837f7a736c645b52493f342a1f140900000000000000000000000000000000020d1924303b47525e6975808c97a3ada2968b7f74685c51453a32323232323d4a5763707d8a97a4b0b4aaa3a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a094877a6d6053473a2d201407000000000000000000000000030f1b2734404c5865717d8996a2aea79b8e8276695d51453a46525f6b7784909ca8a094887b6f63564a434f5c6874818d99a5a3978a7e7265594d413d4955616e7a86939faba89c9083776b5f52463a2e211509000000000000000000000d1925313d4955616d7985909ba0958a7f756c65626163687079848f9aa2978c8074685d5e69737e89939e9c92877c71675c5f6b77838f9ba3978c80756a6059555558606974808b97a39a8e82766a5e52463a2d2115080000111e2a36434f5a646b6c6c6c6c6c6c6c6e7b8895a2978a7d716c6c6c6c6c6c6c6c675e535d68737e89939e998e83786d62606c78838e999e93897f766f6a676667696d757e8994a09d9286796d6154483b2f2216090000111e2a36434f5a646b6c6c6c6c6c6c6c6e7b8895a2978a7d716c6c6c6c6c6c6c6c675e535d68737e89939e998e83786d62584d4239434d58626d77828c979186828f9c9c8f8275695c4f4236291c0f0300000000000f1c2835414d5a66727e8a96a2998e83786f6863605e5d5e61666d77828d99a3978b7e7266636e79848f999d93887d72675c52473c47515c66717b8690988d828b98a09386796d6053463a2d201307000000000000111e2b3844515e6b7784919eaab0a3968a7d7063574a3d302a343e48525c656f79838d96a0a49a90867c72695f554b41382e241a25323f4b5865727e8b98a5b2a99d908376695d5043362a1d1003000013202c3946535f6c798693a0acaea295887b6e6155483b2e22150800000000000000000000000000000000000000000000000c1926323f4c5965727f8c99a6b2a99c8f8275695c4f4236291c0f0000000000000000000000000c18232f3b47535f6a76828e9aa5aa9e93877b6f63574b3f332c2c2c303c4854606c7884909ba7a89c9185796d61554a3e32261a0e03000000000000000000000000000000060d13171b1c1e232f3c4855616e7b8794a1ada094877a6d6053473a2d201407000000000000000000000000131f2c3946525f6c7985929f9f9286796c5f534646535f6c7986929fac9f9286796c5f5346392d201312182028313b444e59636e79848f9aa6aea295897c6f63564a3d323d48545f6b77838f9b9f93877b6f63574b3e32261a0d0100000000040f1a25303a444e57606970777d8286898b8c8c8c8b8986827c766f68737e88939e9d92877d7267666c7276797b7d7e7e7e7d7b7975716b655e564e453b39434c545c63696f74777a7c7d7e7e7d7c7a77736e68625a524940372d22180d02000000000000000000000000000000000008131f2a36414d58646f7a86929da8a79c9085796d62564b3f34282525303d4a5763707d8a97a4b0b8afa9a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a094877a6d6053473a2d20140700000000000000000000000006131f2b3744505c6874818d99a5b0a3978b7e72665a4d4136434f5b6774808c99a5a3978b7e72665a4d46535f6b7884909da9a093877b6e6256493d3946525e6a77838f9ca8ac9f93877b6e62564a3d3125190d00000000000000000004101c2935414d5a66727e8a95a19b9084786d635a5554565e67727d8994a09c9185796d6157626c77828c97a2998e83786e635b66727e8a95a19c91867c726a656262646a727b86919ca095897d72665a4e42362a1e110500000e1a26323d48525a5e5f5f5f5f5f5f616e7b8895a2978a7d71645f5f5f5f5f5f5f5c554c56616c77828d979f958a7f74695e66727d88929c9b9188817b7674737375797f87909ba1978c8175695d5145392c20130700000e1a26323d48525a5e5f5f5f5f5f5f616e7b8895a2978a7d71645f5f5f5f5f5f5f5c554c56616c77828d979f958a7f74695e54493e3c46515b66707b8590988d88919d9c8f8275695c4f4236291c0f030000000000111e2b3744505d6975828e969795897d71675d5753515152555b66717d8995a29a8e8175685d67727d88939e998e84796e63584d433f4a545f69747e8993948f929ca09386796d6053463a2d201307000000000000121e2b3845515e6b7884919eabb0a396897c6f6356493d30232c36404a535d67717b858e98a2a2988e857a71675d534a40362c2225323e4b5864717e8b98a4b1aa9d9084776a5d5044372a1d1104000013202c3946535f6c7986939facaea295887b6e6155483b2e22150800000000000000000000000000000000000000000000000c1926333f4c5965727f8c99a6b2a99c8f8275695c4f4236291c0f00000000000000000000000007131f2a36424e5a65717d8995a1aca3978b8074685c5044382c202935414d5965717c8894a0aca4988c8074685d5145392d21160a0000000000000000000000000000000810181e2327292a2d343f4b5764707d8996a2aca09386796d6053473a2d20140700000000000000000000000013202c3946535f6c7986929f9f9285786b5f52454653606d798693a0ab9e9285786b5e5245382c1f12060e161f29323c47515c67727e8995a0aca4978b7e7265584c3f3337434f5b66727e8b97a3988b7f73675a4e4235291d1004000000000a15202c36414c566069727a82898e9296989999999895928d888179716c77818c97a1998e84796e646166696d6f70717171706f6c6965605a534c443c33313a424a52585e63686b6e7071717171706e6b67625d57504840372e251b1106000000000000000000000000000000000000020e1925303c47535e6975818c97a3ada1968a7e73675c5045392e2224303d4a5763707d8a97a4b0b0a69d9999999999999999999999999999999999999999999999999999999994877a6d6053473a2d2014070000000000000000000000000a16222f3b4753606c7884919da9aca094877b6f62564a3e333f4c5864707d8995a2a79b8e8276695d514a56626f7b8794a0a89c9084776b5f52463a36424e5b6773808c98a4afa3978b7e72665a4d4135291c100400000000000000000713202c3845515d6a76828e9aa3978b7f73675c5149474c56616c7884909ca195897d7165595b65707b85909b9f958a80756a60626d79848f9aa3988e857c75716f6f70757b848d98a29a8f84786d61554a3e32261a0e0100000a16212c3640484e52525252525255616e7b8895a2978a7d716457525252525252504b45505b65707b86919b9b90867b7065616b76808a939b9a938c878381808082858a9199a1998f857b6f64594d4135291d100400000a16212c3640484e52525252525255616e7b8895a2978a7d716457525252525252504b45505b65707b86919b9b90867b70655a4f453a3f49545e69737e889397959aa39c8f8275695c4f4236291c0f030000000000131f2c3946525f6b788588898a8c85786c60554c474544454955616d7a8693a09c9083766a5d616b76818c97a0958a80756a5f54493f434d58626c77828c969b9da4a09386796d6053463a2d201307000000000000121e2b3845515e6b7885929eabb0a396897c6f6356493c3023242e38414b555f69737c86909aa4a0968d83796f655c52483e342a24313e4b5764717e8b98a4b1aa9d9084776a5d5044372a1d11040000131f2c3946525f6c7986929facafa295887b6f6255483c2f22160900000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3a89c8f8275685b4f4235291c0f000000000000000000000000020e1a26313d4955616c7884909ca8a89c9084786c6054493d31252e3a46515d6975818d99a5ab9f93877b6f64584c4034281d1105000000000000000000000000000007111a22292f333637393d45505b6773808c98a5aa9e9184786b5f5245392c1f130600000000000000000000000013202c3946535f6c798693a09f9285786b5f52454653606d798693a0ab9e9285786b5e5145382b1e1205040d17202b35404b56616d78848f9ba7a69a8d8174675b4e4235323e4a56626e7a87939f9b8f83766a5e5145382c201307000000040f1b26323d48535e68727b848c949a9e9c98969696989c9e99938b837a71707a85909aa0958b80756b60595d6062646565656462605d59544f49423a322a28303840474d53575b5f61636465656463615e5b57524c453e362e251c1309000000000000000000000000000000000000000008141f2b36414d58646f7b86929da9a79b9084786d61564a3f332824303d4a5763707d8a97a4b0ab9f948c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c877a6d6053473a2d2014070000000000000000000000010e1a26323f4b57636f7c8894a0ada99c9084786b5f53463a303c4854616d7986929eaa9e9285796d60544d5966727e8b97a3a5998c8074675b4f4336323f4b5764707c8995a1ada79a8e8276695d5145382c20140800000000000000000916222f3b4854616d7986929ea094877b6f63574b403b44505c6874808c99a5998d8174685c545e69747e89949e9c91877c71665c68737e88939ca0978e87817d7b7b7d81868d969f9c92887d72675c5045392d21150900000004101a242e363d4245464646464855616e7b8895a2978a7d7164574a4646464645443f3e49545f69747f8a959f978c82776c61646e78818a91989d97938f8d8c8d8e91969b9d978f877d73695e53483c3025190c00000004101a242e363d4245464646464855616e7b8895a2978a7d7164574a4646464645443f3e49545f69747f8a959f978c82776c61564b4138424d57626c77818c96a1a5a59c8f8275695c4f4236291c0f030000000000131f2c3946525f6b767a7b7c7d7e8076695d50443a38373945525f6b7885929f9d9184776a5d5a656f7a85909b9c91867b71665b50453b46505b65707a858f9a9f9f9f9386796d6053463a2d201307000000000000121e2b3844515e6b7784919eabb0a396897d7063564a3d30231c262f39434d57616a747e88929ca59f958b81776d645a50463c3329323e4b5865717e8b98a5b1aa9d9083766a5d5044372a1d11040000121f2c3845525f6b7885929eabafa296897c6f6356493d3023160a00000000000000000000000000000000000000000000000e1a2734414d5a6773818d9aa6b3a89b8e8275685b4e4235281b0f000000000000000000000000000915212d3844505c6873808b97a3aca095897d7165594d41352a323e4a56626e7a86929da9a69a8e82766b5f53473b3024180c0000000000000000000000000000030e19232c343b40424345494f57616d7884909ca8a69a8e8275695c5043372a1e110400000000000000000000000013202c3946525f6c7986929f9f9285786b5f52454653606c798693a0ab9e9285786b5f5245382c1f120500050f19242e3945505b67737e8a96a2a89c8f83766a5d5144382e3a46525e6b7783909c9f9286796d6154483b2f2216090000000814202c37434e59646f7a848d969e9d96908c8a898a8c91979e9d958c83796e737e89939e9c92877c72675c52545657585858575553504d48433d373028201e262e353c42474b4f525556575858575654524f4b46413a342c241c130a010000000000000000000000000000000000000000030e1925303c47535e6a75818c98a3aca095897e72675b5044382d24303d4a5763707d8a97a4b0a99c8f827f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7a6d6053473a2d201407000000000000000000000005111d2a36424e5b6773808c98a4b0a5998d8174685c4f43372c3845515d6a76828e9ba7a195897c706457505d6975828e9aa7a195897d7064584b3f332f3b4854606c7985919eaaaa9e9286796d6155483c3024170b00000000000000000c1825313e4a5763707c8995a29d9184786b5f53463a333f4b5864707d8996a29d9084776b5f5257626d77828d98a2988e83786d63616c76818a939ba098928d8a8888898c91989f9b938a80766b61564a3f34281c11050000000008121c242c3236383939393b4855616e7b8895a2978a7d7164574a3e39393939373437424d58636d78838e999e93887d73685d666f7780878d92979a9c9a99999b9c9a96918c857d746b61574d42372b2014080000000008121c242c3236383939393b4855616e7b8895a2978a7d7164574a3e39393939373437424d58636d78838e999e93887d73685d52473d3b45505a656f7a848f989898988f8275695c4f4236291c0f030000000000111e2a37434f5a646b6d6e7071727370665a4e413c3c3d3f45525f6b7885929f9d9084776a5d535e69747e89949f988d82776c62574c413f49535e68737d88929292929286796d6053463a2d201307000000000000111e2b3744515e6a7784919eaab0a3978a7d7063574a3d3124171e27313b454f58626c76808a939da79d938980766c62584e453b31323f4c5965727e8c98a5b2a99c908376695d5043362a1d10030000121e2b3844515e6b7784919eaab0a3978a7d7064574a3e3124180b00000000000000000000000000000000000000000000010f1c2835424e5b6874818e9ba7b3a79a8d8174675a4e4134271b0e0000000000000000000000000004101c28343f4b57636f7a86929eaaa5998d82756a5e52463a2e37434f5b67727e8a96a2ada1958a7e72665a4e42372b1f130700000000000000000000000000000914202a353e464c4f5052555a6169737e8995a0aca1968a7e7266594d4134281b0f02000000000000000000000000121f2c3945525f6c7885929f9f9286796c5f534646525f6c7985929fac9f9286796c5f5346392d201306000007121d28343f4b56626e7a86929eaa9f9286796d6054473b2e36424f5b6774808d99a295897c7063574a3e3125180b0000000c1925313c48545f6b76818b969f9d948b85807d7c7d80858c959e9e958b80756c77828c97a2998e83796e63594e494a4b4b4b4a494744413d38322c251e16141c242a30363b3f4346484a4b4b4b4b4a4846423f3a352f29221a120a010000000000000000000000000000000000000000000008141f2b36424d5964707b87929ea9a69a8f83786c6155493e3227303d4a5763707d8a97a4b0a99c8f82757272727272727272727272727272727272727272727272727272727271695d5145392c20130600000000000000000000000915212d3946525e6a77838f9ba8aea295897d7164584c40332935414e5a66727e8b97a4a5988c8073675b54606c7985919eaa9e9286796d6154483c2f2c3844505d6975828e9aa7aea295897d7164584c4033271b0f03000000000000000d1a2733404d5966727e8b98a49b8e8275695c5043372f3c4855616e7a8793a0a093877a6d6154505b66707b86919b9f958a7f746a5f656f78818991979c9d9996959596999d9c97918981786e645a4f44392e23170c0000000000000a121a21262a2c2c2c2e3b4855616e7b8895a2978a7d7164574a3e312c2c2c2b28313b46515c67717c87929d9a8f84796f645d656e757c82878b8e9091929291908d8a86817a736b625950453b30251a0f0300000000000a121a21262a2c2c2c2e3b4855616e7b8895a2978a7d7164574a3e312c2c2c2b28313b46515c67717c87929d9a8f84796f64594e43383e49535e68737d888c8c8c8c8c8275695c4f4236291c0f0300000000000e1a26323e48525a5f616263646567655e5449484848494b4f56626e7a8793a09b8f8275695c4f57626d78828d989f94897e73685e53483d424c57616c7681858585858585796d6053463a2d201307000000000000111d2a3744505d6a7683909da9b1a4978b7e7164584b3e322518151f29333d46505a646e78818b959fa59b91887e746a60574d433933404d596673808c99a6b2a89c8f8275695c4f4236291c10030000111d2a3743505d697683909ca9b1a4988b7e7265584c3f3326190d0000000000000000000000000000000000000000000004111d2a3743505d6976838f9ca9b2a5998c807366594d4033261a0d00000000000000000000000000000b17232f3b46525e6a76828d99a5aa9e92867a6e62564b3f333c48535f6b77838f9ba7a89c9185796d61554a3e32261a0e0200000000000000000000000000000d1925313c4650575c5d5e61656b737b85909aa6a59a9085796d6156493d3125190c00000000000000000000000000121f2b3845515e6b7885919ea09386796d60534745515e6b7784919eaaa093877a6d6154473b2e2115080000000c17232e3a46525e6a76828e9ba7a195887c6f63564a3e31333f4c5864717d8a96a3988b7e7266594c4033271a0d010004101d2935414d5965707c87929da0958b827a74706f70747a838c96a19c92877b6f707b85909ba0958a80756a60554a403e3e3e3e3c3a3834302c27211b140c0a12191f252a2f3336393b3d3e3e3e3e3d3b3936332e29241e171008000000000000000000000000000000000000000000000000030e1a25313c48535f6a75818d98a3aba094897d71665a4f43382c303d4a5763707d8a97a4b0a99c8f827569656565656565656565656565656565656565656565656565656565655f574c4135291d110400000000000000000000000c1825313d4956626e7a87939fabab9e9286796d6155483c3025323e4a56636f7b8894a0a89c8f83776a5e5763707c8895a1a79b8e8276695d5145382c2835414d5966727e8b97a3afa5998d8174685c4f43372b1f1206000000000000000f1c2835424e5b6874818d9aa6998c8073665a4d41342d3946525f6b7885919ea295897c6f63564a545f69747f8a949f9c91867b71665d666f777f868c909497989999989794918c867f776f665c52483d33281d110600000000000000080f151a1d1f1f222e3b4855616e7b8895a2978a7d7164574a3e31241f1f1e1f2a353f4a55606b75818b96a1968b80756a605c636a70767b7e81838585858483817e7a756f68615950473e34291f140900000000000000080f151a1d1f1f222e3b4855616e7b8895a2978a7d7164574a3e31241f1f1e1f2a353f4a55606b75818b96a1968b80756a60554a3f37414c56616b767e7e7e7e7e7e7e75695c4f4236291c0f0300000000000a16212c3740484f5354555657595a5953535555555556585b6068737e8a96a2978b7f73665a4d505b66717c87919c9b90857a6f645a4f443a454f5a646f78787878787878766b5f5246392c201306000000000000101d2936434f5c6975828f9ca8b2a5988c7f7266594c4033261a0d17212b353e48525c666f79838d97a1a39a90867c72695f554b4137424e5b6774818e9aa7b4a79a8e8174685b4e4135281b0f0200000f1c2935424f5b6875828e9ba7b3a6998d8073675a4e4135281c0f030000000000000000000000000000000000000000000713202c3945525e6b7884919daab0a4978b7e7164584b3e3225180c000000000000000000000000000007121e2a36424d5965717d8994a0aca2978b7f73675b4f4337404c5864707c88949faba3988c8074685c5145392d21150a000000000000000000000000000000111d2936424d5862686a6b6e71767d858e97a1a59c93897e73685c5145392d21150900000000000000000000000000111e2b3744515d6a7784909da194877b6e61554843505d6976838f9ca9a195887b6f6256493d3023170b00000006121d2935414e5a66727e8b97a4a4988b7e7266594d4034303c4955626e7b8894a19a8d8174685b4e4235281c0f02000714202c3945515d6975818d98a49a8f8479706864636469707a85909ba3988c807469747e89949e9c91877c71675c51473c323231302e2b2824201b1610090200070e141a1f23272a2d2f3031323231302f2d2a26221e19130c0600000000000000000000000000000000000000000000000000000914202b37424e5965707b87929ea9a59a8e83776b6054493d32303d4a5763707d8a97a4b0a99c8f8275695c595959595959595959595959595959595959595959595959595958544e453b3025190d010000000000000000000004101c2834414d5965727e8a96a3afa79b8f82766a5d5145392c222e3a47535f6c7884909da99f93867a6e615a6773808c98a4a3978b7e72665a4d41352925313d4a56626f7b8793a0aca99d9084786c5f53473b2e22160a00000000000000101d2a3643505d6976838f9ca4988b7e7165584b3f322a3744505d6a7683909ca4978a7e7164584b4d58626d78838d98a2988d83786d625d666d747b8084888a8c8c8c8c8a8884807b746d655d544a40362c21160b000000000000000000040a0e111215222e3b4855616e7b8895a2978a7d7164574a3e312417131218232e39444e59646f7a858f9a9d92877c71665c595f656a6e727577787878787674716e69645e574f473e352c22180d020000000000000000040a0e111215222e3b4855616e7b8895a2978a7d7164574a3e312417131218232e39444e59646f7a858f9a9d92877c71665c51463b3a454f5a646e727272727272726e65594d4134281b0f02000000000005101a252e373e434647484a4b4c4d4e575f626262626364676b727a858f9b9c91867b6f63574a4a545f6a75808b95a0968c81766b60554b403e48535d666b6b6b6b6b6b6b6a645a4f43372a1e11050000000000000f1b2835424e5b6874818e9aa7b3a79a8d8174675b4e4235281c0f0f19232c36404a545d67717b858f98a2a2988e847a71675d53494043505d6976828f9ca8b2a6998c8073665a4d4034271a0e0100000e1b2734414d5a6673808c99a6b2a89b8f8276695d5044372b1e12060000000000000000000000000000000000000000000a16232f3b4854616d7a8693a0acaea295897c6f63564a3d3024170a0000000000000000000000000000020e1925313d4954606c78848f9ba7a79b8f83776c6054483c45515d6974818c98a4ab9f93877b6f63584c4034281d1105000000000000000000000000000000121f2c3945525e6a7476787a7d82888f97a0a29b938a81776c62574b4034291d110500000000000000000000000000101d293643505c6976828f9ca295897c6f635649424e5b6874818e9aa7a3978a7d7164584c3f33261a0e010000010d1925313e4a56636f7b8894a1a79a8e8275695c5043372d3a4753606c7986929f9c8f8376695d5043372a1d1104000a17232f3c4855616d7986929ea195897d72675e5756585e68737e8a96a29d9185786c6d77828d97a2988e83786e63584e43382e2423211f1c1814100a050000000003090e13171b1e202224242525252422201d1a16120d0701000000000000000000000000000000000000000000000000000000030f1a26313c48535f6a76818d98a4ab9f94887c71655a4e4337303d4a5763707d8a97a4b0a99c8f8275695c4f4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c49433c33291e130800000000000000000000000713202c3844515d6975828e9aa6b0a4978b7f72665a4e4135291e2b3743505c6874818d99a6a2968a7d71655e6a76838f9ba8a094877b6f63564a3e3125212e3a46535f6b7784909ca9aca094887b6f63574a3e32261a0d01000000000000111e2b3844515e6a7784919da3978a7d7064574a3d312936424f5c6875828f9ba5988c7f7266594c46515b66717b86919c9f948a7f74695f5c63696f74787b7d7e80807f7d7b78746f69635b534b42382e241a1005000000000000000000000000000815222e3b4855616e7b8895a2978a7d7164574a3e3124170b07121c27323d48525d68737e89939e998e83786d625754595e6266686a6b6b6b6b6a6865625d58534c453d352c231a1006000000000000000000000000000815222e3b4855616e7b8895a2978a7d7164574a3e3124170b07121c27323d48525d68737e89939e998e83786d62574d42373d48525c6365656565656565635c53483d3125190c0000000000000009131c252c3237393a3c3d3e3f485460696f6f6f6f6f7173777d848d969c948a80756a5e5247434e58636e79848f999d92887d72675c51473c414b545b5f5f5f5f5f5f5f5e5a52483e32271b0e020000000000000d1a2733404d596673808c99a5b2a89c8f8276695d5044372b1e1207111a242e38424c555f69737d87909aa4a0968c83796f655b524846525f6b7884919eaab1a4978b7e7165584c3f3226190c0000000c1926323f4b5865717e8a97a3b0aa9e9185786c5f53473a2e22160a0000000000000000000000000000000000000000020e1a26323f4b5764707c8995a2aeaca093877a6d6154483b2e2215090000000000000000000000000000000915202c3844505b67737f8b96a2aca094887c7064584d414a55616d7985919da9a69a8e82766b5f53473b2f24180c0000000000000000000000000000000013202c3946535f6c798384878a8e93999f9b96908981786f655b50453a2f23180c00000000000000000000000000000f1c2835424e5b6874818e9aa3978a7d7164584b404c5966727e8b98a4a6998d8074675b4e42362a1d11050000000915222e3a4753606c7885919eaa9d9184786b5f53463a2d3845515e6b7784919d9e9184776b5e5145382b1f1205000d1926323f4b5864707d8995a29d9185796d61564c494c57626e7a86929fa195887c7066707b86909b9f958a80746a5f554a3f352a1f15120f0c0804000000000000000002070b0e1114161718181818171514110e0a06010000000000000000000000000000000000000000000000000000000000000914202b37424e5965707c87939eaaa4998d82766b5f54483c313d4a5763707d8a97a4b0a99c8f8275695c4f423f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3d38322a21170d0200000000000000000000000b17232f3c4854606d7985919eaaaca094887b6f63564a3e32251b2734404c5865717d8a96a2a6998d817468616d7a86929fa99d9084786b5f53473a2e221e2a37434f5b6874818d99a5b0a4988b7f73675a4e4236291d1105000000000000121f2c3845525f6b7885929ea296897c6f6356493d302835414e5b6774818e9ba69a8d8073675a4d404a545f6a747f8a959f9b90867b70665b585e63686c6f7172737372716f6c68635e58514941392f261d130800000000000000000000000000010815222e3b4855616e7b8895a2978a7d7164574a3e3124170b000b16202b36414c56616c77828d979f948a7f74695e534e5256595c5d5e5f5f5e5d5b5955514d47413a332b231a110800000000000000000000000000010815222e3b4855616e7b8895a2978a7d7164574a3e3124170b000b16202b36414c56616c77828d979f948a7f74695e53493e36404a51575858585858585857524a41372c20150900000000000000010a131b21272b2d2e2f30313e4b5864717b7b7b7b7c7d8083888e9698928a82786e63594d423c47525d67727d88939d998e84796e63584d4239424a4f52525252525252514e4840362c21160a000000000000000c1825323e4b5864717d8a97a3b0aa9e9185786c5f53473a2e22150909121c26303a434d57616b747e88929ca69e958b81776d645a504955616e7a8793a0acaea295897c7063564a3d3124170b0000000a1724303d4956626f7b8894a1adada094887b6f63564a3e32261a0e030000000000000000000000000000000000000007121e2a36424e5b6773808c98a5b1a99d9084776b5e5245392c20130700000000000000000000000000000004101c27333f4b57626e7a86929da9a4998d8175695d51454e5a66727e8a96a1ada195897d72665a4e42372b1f13070000000000000000000000000000000013202c3946535f6c79869193969a9f9a938f8b857f776f665d53493e34291e120700000000000000000000000000000d1a2733404d5966727f8c98a5998c8073665a4d414a57636f7c8895a1a89c9083776a5e52463a2e22160a00000006121f2b3744505d6976828f9ca8a094877b6e6255493d303743505d697683909c9f9285796c5f5246392c201306000f1b2834414e5a6773808c99a59b8e8275695d50443c46525e6a76838f9ca4988b7f726669747f8a949f9c91867b71665c51463c31261c11060000000000000000000000000000020507090a0b0b0b0b0a09070501000000000000000000000000000000000000000000000000000000000000000000030f1a26313d48545f6b76828d99a4aa9e93877b7065594d42363d4a5763707d8a97a4b0a99c8f8275695c4f4236323232323232323232323232323232323232323232323232302c2720180f050000000000000000000000020e1b27333f4b5864707c8995a1ada99d9084786c5f53473a2e221824303c4955616d7a86929fa99c9084776b64717d8996a2a5998d8174685c4f43372b1e1b27333f4c5864717d8996a2aea79b8f83766a5e5245392d211508000000000000131f2c3946525f6c7986929fa295887c6f6255493c2f2734414d5a6774818d9aa79a8e8174675a4d41434d58636e78838e98a2988d82776d625753585c5f62646566666564625f5c58534d463f372f261d140b010000000000000000000000050a0d0f15222e3b4855616e7b8895a2978a7d7164574a3e3124170b00040f1a242f3a45505b65707b86919b9b90867b70655a4f464a4d4f5152525251504f4c4945413c36302921191108000000000000000000000000050a0d0f15222e3b4855616e7b8895a2978a7d7164574a3e3124170b00040f1a242f3a45505b65707b86919b9b90867b70655a4f453a3840464a4c4c4c4c4c4c4c4b4740382f251a0f040000000000000000010910161b1e20212225323e4b5865717e888888898a8c8f9493908c8780786f665c52473c35404b56616b76818c97a0958a80746a5f54493e383f434545454545454545423d362e241a1005000000000000000a1723303c4955626f7b8894a1adada094887b6f62564a3e3125190d020a141e28313b454f59626c76808a949da79d938980756c62584e5865717d8a96a2afac9f93867a6d6154483b2f2215090000000815212e3a4753606c7885919eaab0a3978b7e73665a4e42372b1f1409000000000000000000000000000000000000020d18232f3b47525e6b77838f9ba8b2a69a8d8175685c4f43362a1d1104000000000000000000000000000000000b17232e3a46525e6975818d99a4a99d9185796e62564a535f6b76828e9aa6a89c9185796d6155493e32261a0e020000000000000000000000000000000013202c3946535f6c798693a0a2a69f9388837f7a746d655d544b41372d22170c0100000000000000000000000000000c1825323e4b5764707d8a96a39b8e8275695c50434754606d7985929eaa9f93877a6e62564a3e32271b10040000030f1c2835414e5a6774818d99a6a3968a7d7165584c3f3335424f5c6875828f9ba09386796d6053473a2d20140700101d2936434f5c6975828f9ba5988c7f73665a4d4135424e5b6774808d99a69a8e817468626d78838d98a3988d83786d62584d43382d23180d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915202c37434e5a65707c88939eaaa4988d81756a5e53473c3d4a5763707d8a97a4b0a99c8f8275695c4f423629262626262626262626262626262626262626262626262524201b150e0600000000000000000000000006121e2a37434f5b6874808c99a5b1a5998d8174685c5043372b1e14202d3945525e6a76838f9ba8a093877b6e6774808c99a5a296897d7165584c4033271b1723303c4855616d7986929eabab9f93867a6e6255493d3124180c00000000000013202c3946535f6c798693a0a295887b6f6255483c2f2734404d5a6773818d9aa79b8e8174675b4e413c47515c67717c87919c9e94897e74695e544c5053565759595959585653504c47423b352d261d140b0200000000000000000000030a11161a1c1c222e3b4855616e7b8895a2978a7d7164574a3e3124170b000008131e29333e49545f69747f8a959f978c81766c61564b40404244454545454442403d3935302b251e170f070000000000000000000000030a11161a1c1c222e3b4855616e7b8895a2978a7d7164574a3e3124170b000008131e29333e49545f69747f8a959f978c81766c61564b4036353a3e3f3f3f3f3f3f3f3e3b362f261d13090000000000000000000000050a0f1213141825323e4b5865717e8b959596979990898784817b756e665d544a40362f39444f5a656f7a85909b9c91867b70665b50453a3337383838383838383836322c241c120800000000000000000814212e3a4753606c7885919eaab0a3978b7e72665a4e42362a1e1307020c161f29333d47515a646e78828c959fa59b91887e746a60565c6874818d99a5b2a99c9084776b5e5245392c20130700000006121f2b3844505d6975828e9aa6b3a79b8f83776b5f53473c30251a0f05000000000000000000000000000000000009131e2934404b57636f7b87939fabafa3968a7e7265594c4034271b0e020000000000000000000000000000000006121e2935414d5965707c8894a0aba2968a7e72665a4f57636f7b87939faba3988c8074685c5045392d21150a000000000000000000000000000000000013202c3946535f6c7986939da0a49f938884807a746d655d544b41372d22170c0100000000000000000000000000000a1623303c4955626e7b8794a09d9184786b5f524644515d6975828e9aa6a3978a7e72665a4f43372c21160b0100000d1926333f4c5965727e8b98a5a6998d8174685b4f423635414e5b6774818e9ba094877a6d6154473a2e21140700111e2b3744515e6a7784909da4978a7d7164574b3e333f4c5865727e8b98a49c908376695d66717b86919c9f948a7f746a5f544a3f342a1f140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f1b26323d4954606b76828d99a4a99e92877b6f64584d413d4a5763707d8a97a4b0a99c8f8275695c4f4236291c191919191919191919191919191919191919191919191714100a04000000000000000000000000000916222e3a46535f6b7784909ca8aea2968a7d7165584c4033271b111d2936424e5a67737f8c98a4a3978a7e716a7783909ca89f92867a6d6155493c30241714202c3945515d6a76828f9ba7afa2968a7d7165594d4034281c0f03000000000013202c3946535f6c798693a0a295887b6f6255483c2f2734404d5a6773818d9aa79b8e8174675b4e4135404a55606a75808a95a09b90867b70655b504547494b4c4c4c4c4b494744403b36302a231c140b0200000000000000000000040d151c22262829282e3b4855616e7b8895a2978a7d7164574a3e3124170b0000010c17222d37424d58636d78838e999e93887d72685d52473c363738383838373533312d29251f1a130d050000000000000000000000040d151c22262829282e3b4855616e7b8895a2978a7d7164574a3e3124170b0000010c17222d37424d58636d78838e999e93887d72685d52473c322e3132323232323232312f2a241d140b010000000000000000000000060c1216191b1c25323e4b5865717e8b9898999a9a8d827f7b76706a645c544b42382e28333d48535e69737e89949f988d82776c61574c41362b2c2c2c2c2c2c2c2b2a26211a120a00000000000000000006121f2b3744505d6975828e9ba7b3a79a8e82766a5e52463b2f24180e03040e17212b353f48525c667079838d97a1a39990867c72685f606c7884919da9b2a5998d8174685b4f43362a1d1104000000030f1c2834414d5966727e8a96a3afab9f93877b6f64584d42372c21170d0400000000000000000000000000000008111b25303b46515c6874808b97a3afab9f93867a6e6256493d3124180b0000000000000000000000000000000000010d1925313c4854606b77838f9ba7a69b8f83776b5f535c6874808c98a3aa9f93877b6f63584c4034281c1105000000000000000000000000000000000013202c3946535f6c79868f9194989c9a93908b857f776f665d53493e34291e120700000000000000000000000000000814212d3a46535f6c7885919ea093877a6e625549414d5965727e8a96a2a79b8f83776b5f54493d32271d130a02000b1824313e4b5764717d8a97a4a99c9083776a5e52453934414e5a6774818e9aa194877b6e6154483b2e21150800121f2c3845525f6b7885929ea296897c6f6356493d313e4a5764707d8a97a39e9184776b5e5f6a747f8a959f9b91867b71665b50463b31261b1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15212c37434e5a65717c88939faaa3978c8175695e52473d4a5763707d8a97a4b0a99c8f8275695c4f4236291c0f0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b08040000000000000000000000000000010d1925323e4a56636f7b8794a0acab9f92867a6d6155493c3024180d1a26323e4b57636f7c8894a1a69a8d81746d7986929fa79b8f83766a5e5145392d2014101d2935424e5a66737f8b98a4b0a69a8d8175695c5044382c1f1307000000000013202c3946535f6c7986929fa295887b6f6255483c2f2734404d5a6773818d9aa79a8e8174675b4e413439434e59636e79838e99a2978c82776c62574c423c3e3f40403f3e3d3a37342f2b251f18110a0200000000000000000000030d161f272d32353635313b4855616e7b8895a2978a7d7164574a3e3124170b00000005101b26313b46515c67717c87929d9a8f84796e64594e43382d2c2c2c2b2a292724211d19140e08020000000000000000000000030d161f272d32353635313b4855616e7b8895a2978a7d7164574a3e3124170b00000005101b26313b46515c67717c87929d9a8f84796e64594e43382d252525252525252525221e19120b0200000000000000000000000810171e222627292a323e4b5865717e8b8b8b8c8e91948f8b87827b746b62594e44392e232c37414c57626d77828d989e94897e73685d53483d32271f1f1f1f1f1f1f1d1a150f0800000000000000000000030f1c2835414d5a66727e8b97a3afaa9e92867a6e63574c40352a1f150b02050f19232d36404a545e68717b858f99a3a2988e847a716765717d8995a1adaea296897d7165584c4033271a0e02000000000c1925313d4a56626e7a86929eaaafa3988c8075695e53483d33291f160e070100000000000000000000000309111a232d37414c57626d7985909ca8b2a69a8e82766a5e5246392d2115080000000000000000000000000000000000000814202c37434f5b67737e8a96a2ab9f93877b6f6458616d7884909ca8a69a8e82766a5f53473b2f23180c00000000000000000000000000000000000013202c3946535f6c79818284878c91979f9c97908981786f655b50453a2f23180c000000000000000000000000000005121e2b3744505d6975828e9ba3968a7e7165594d404955616d7985919da89f93887c70655a4f44392f251c140e0c0d1824313e4a5764717d8a97a4ab9f93867a6d6154483c34414d5a6774818e9aa194887b6e6154483b2e2115080013202c3946535f6c7986929fa295887b6f6255493c303d495663707c8996a39e9285786b5e58636d78838e98a2988d82776d62584d42382d22180d0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101b26323d4954606b77828e99a5a89d91867a6e63574c404a5763707d8a97a4b0a99c8f8275695c4f4236291c0f0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0c0a0703000000000000000000000004111d2935414e5a66727e8b97a3b0a79b8f83766a5e5145392d20140a16222f3b4753606c7885919da99c908477707c8995a2a4988b7f73675a4e4235291d110d1926323e4a57636f7b8894a0adaa9d9185796c6054483b2f23170a0000000000131f2c3946525f6c7885929fa296897c6f6255493c2f2734414d5a6774818e9aa79a8d8174675a4d4134323c47525c67727c87929c9e93897e73695e53493e333233333232302e2b28241f1a140e070000000000000000000000000a151f2831383e4243413d3b4855616e7b8895a2978a7d7164574a3e3124170b0000000009141f2a353f4a55606b75818b96a0968b80756a60554a3f34291f1f1f1e1c1a1815110d0803000000000000000000000000000a151f2831383e4243413d3b4855616e7b8895a2978a7d7164574a3e3124170b0000000009141f2a353f4a55606b75818b96a0968b80756a60554a3f34291f1919191919191816130e0801000000000000000000000007111a22292e32343536383e4b5865717e7e7e7e7f81858a9097938d867d746a60554a3f342825303b46505b66717c87919c9a90857a6f64594f44392e23181212121212110e09040000000000000000000000000c1925313e4a56626e7b87939fabafa3978b8074685d51463c31271d140b0307111b252e38424c565f69737d87919aa4a0968c83796f6b76828d99a5b1a99d9285796d6155493c3024170b00000000000915212d3a46525e6a76828e99a5b1a89d91867a6f645a4f453b31282019120d08050201000000010306090e141b232c353f49535e68737e8a96a1adada1968a7e72665a4e42362a1d1105000000000000000000000000000000000000030f1b27333f4a56626e7985919da9a4988c8074685c65717d8995a1ada195897d72665a4e42362b1f1307000000000000000000000000000000000000121f2c3845515d69727475787b80868d959ea29b938a81776c61574b4034291d110500000000000000000000000000030f1c2834414d5a66727e8b97a49a8d8175695c504445515d6974808c97a3a4998d82766b60554b41372e251e1a18191e2733404c5865727e8b98a4aea295897d7064574b3e34414e5b6774818e9aa194877a6e6154473b2e2114080013202c3946535f6c798693a0a295887b6f6255483c303c4956636f7c8996a29f9285786b5f525c66717c87919c9f94897e74695f54493f34291f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15212c38434f5a66717d88949faba2978b8074685d51464a5763707d8a97a4b0a99c8f8275695c4f4236291c1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1917130e08010000000000000000000814202d3945515d6a76828e9ba7b0a4988b7f73665a4e4235291d1106131f2b3844505c6975818d9aa69f93877a737f8c98a5a194887c6f63574b3e3226190d0a16222e3b4753606c7885919da9ada195887c7064574b3f33271a0e0200000000121f2b3845525e6b7885919ea396897c7063564a3d302835424e5b6874818e9ba6998c807366594d40332b35404b55606b75808b95a09b90857a70655a50453a302626262523211f1b17130e090300000000000000000000000004101b26313a434a4e4f4e49424855616e7b8895a2978a7d7164574a3e3124170b00000000030d18232e39444e59646f7a848f9a9c92877c71665b51463b30251a1211100e0b080501000000000000000000000000000004101b26313a434a4e4f4e49424855616e7b8895a2978a7d7164574a3e3124170b00000000030d18232e39444e59646f7a848f9a9c92877c71665b51463b30251a100c0c0c0c0b0a0602000000000000000000000000040f19232c343a3f41424344454955616b717171717375797e858e979890867c72675c5045392d2129343f4a545f6a75808b95a0968b81766b60554a40352a1f140a000000000000000000000000000000000000000915222e3a46525e6a76838e9aa6b2a79c9085796e63584d43392f261d150e0809131c26303a444d57616b757e89929ca69e958b8177707c87939eaab0a5998d8175695d5145392d201408000000000005111d2936424e5965717d8994a0abaea3978c81766b61574d433a322a231d1814110f0d0d0c0d0e0f12151a1f262d353e47515b656f7a85909ba7b2a79c9085796d61564a3e3226190d01000000000000000000000000000000000000000a16222e3a45515d6975818c98a4a89c9084786c606a76828e9aa6a89c9085796d6155493d32261a0e02000000000000000000000000000000000000101d2935414c57606667696b6f747b838c96a0a59c93897e73685c5145392d21150900000000000000000000000000000c1925313e4a56636f7b8894a09d9185796d615549404c58646f7b87929da89e93887c72675d53494037302a26252629303944505c6874818d9aa6b1a5988c8073675a4e4135424f5b6875828e9ba094877a6d6054473a2e2114070013202c3946535f6c798693a0a295887b6f6255483c303c4956636f7c8996a39f9285786b5f5255606a75808a95a09b90867b70655b50463b30261b100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101b27323e4955606b77838e9aa5a89c9185796e62574b4a5763707d8a97a4b0a99c8f8275695c4f4236292626262626262626262626262626262626262626262626262626231f19130b0200000000000000000b1824303c4955616d7a86929eabada094887b6f63574a3e3226190d030f1c2834404d5965717e8a96a3a296897d75828f9ba79d9185786c6053473b2f22160a06121f2b3744505c6875818d9aa6b1a5988c8074675b4f43362a1e120500000000111e2b3744515d6a7784909da4978a7d7164574b3e312936434f5c6975828f9ca5988c7e7265594c3f32262e39444e59646e79848e99a1978c81776c61574c41372c2119181715120f0b070200000000000000000000000000000915212d38434c555a5c5a534c4855616e7b8895a2978a7d7164574a3e3124170b000000000007111c27323d48525d68737e89939e988e83786d62574c42372c21160c01000000000000000000000000000000000000000915212d38434c555a5c5a534c4855616e7b8895a2978a7d7164574a3e3124170b000000000007111c27323d48525d68737e89939e988e83786d62574c42372c21160c010000000000000000000000000000000000000a16212b353e454b4e4f505152535459616565656566696d747c85909b988e84786d6155493d3125222d38434e58636e79848f999d92877c72675c51463c31261b100600000000000000000000000000000000000006121e2a36424e5a66727e8a95a1acada1968a8074695f554b41382f27201914100c141e28323c454f59636d76808a949ea69d93897f77828d98a4afab9f94887c7165594d4135291c10040000000000010d1925313d4955606c78838f9aa5b0a89d92887d73695f564d443c352f2924211e1c1a1919191a1c1e22262b31373f475059636c77818c96a1acaca1968b8074685c5145392d211509000000000000000000000000000000000000000006111d2935414c5864707c88939faba195897d71656e7a86929eaaa3978c8074685c5045392d211509000000000000000000000000000000000000000d1924303b454e565a5b5c5f6369717a848e99a5a59a9084796d6156493d3125190c00000000000000000000000000000916222e3a47535f6b7784909ca195897d7165594d4247535e6a75818c97a2a4998e83796e655b5249423b36333233353a424b55606c7884909ca9b4a89b8f8276695d50443843505d6976838f9c9f9386796c6053463a2d20130700131f2c3946525f6c7986929fa295887c6f6255493c303d4a5663707d8996a39e9185786b5e514e59636e79838e99a2978d82776c62574c42372d22170d020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16212d38444f5b66717d89949faba2968a7f73685c514a5763707d8a97a4b0a99c8f8275695c4f42363333333333333333333333333333333333333333333333333333322f2b241d140b01000000000000030f1b2834404c5965717d8996a2aea99d9184786c5f53473b2e22160a000c1824313d4955626e7a87939fa5998c807885919ea69a8d8175695c5044372b1f1306030f1b2834404c5965717d8a96a2afa89c9083776b5f52463a2e22150900000000101d2936434f5c6975828f9ba5988b7e7265594c3f332b3744515d6a7783909da3978a7d7164574b3e312527323d47525d67727d87929d9e93897e73685e53483e33281e130a08060300000000000000000000000000000000000c1825313d49545f6669655e575055616e7b8895a2978a7d7164574a3e3124170b0000000000000b16202b36414c56616c77828d979f94897e74695e53483e33281d1208000000000000000000000000000000000000000c1825313d49545f6669655e575055616e7b8895a2978a7d7164574a3e3124170b0000000000000b16202b36414c56616c77828d979f94897e74695e53483e33281d12080000000000000000000000000000000000030f1b27323d4750575a5b5d5e5f60615e5758585858595c626a737e8a96a095897d7265594d4034281c26313c47525d67727d88939d998e83786e63584d42382d22170c010000000000000000000000000000000000020e1a26323e4a56616d7984909ba6b2a79c91867b71665d534a4139312b25201c191716202a333d47515b646e78828c969fa59b91877e89939ea9b0a59a8e83776c6054483c3025180c000000000000000915212c3844505b66727d89949fa9afa4998f857b71685f564e47403a35302d2a282726262627292b2e32363c42495159626b757e89939da8b1a69b90857a6e63574c4034291d11050000000000000000000000000000000000000000010d1824303c48535f6b77838f9aa6a5998d817569727e8a97a3aa9f93877b6f63574c4034281c10050000000000000000000000000000000000000008131f29333c444a4d4e5053585f68727d88949faba1968a7e7266594d4134281b0f020000000000000000000000000006121e2b37434f5b6773808c98a4998d82766a5e5247424d59646f7a85909ba5a0958b81766d645b534c46423f3e3f41454c545d67727d8994a0a4a8aa9e9285796c6053473a45525e6b7784919d9e9185786b5f5245392c1f120600121f2c3845525e6b7885919ea396897c7063564a3d313e4a5764717d8a97a49d9084776a5e5147525c67727c87929c9e94897e74695e53493e34291e140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101c27333e4955606c77838e9aa5a79b9084796d62564a5763707d8a97a4b0a99c8f8275695c4f424040404040404040404040404040404040404040404040404040403f3b362f261d130800000000000006131f2b3744505c6875818d99a6b2a6998d8175685c5044372b1f1206000815212d3946525e6b77838f9ca89b8f837b8794a0a3968a7e7165594d4034281b0f03000c1824303d4955626e7a87939fabaca093877b6e62564a3e3125190d000000000f1b2835414e5a6774818d9aa6998d8174675a4e41352d3946525f6c7885919ea195887b6f6256493c3023202b36404b56606b76818b96a09a8f857a6f655a4f453a2f251a0f05000000000000000000000000000000000000000e1a2734404d596571767069615a55616e7b8895a2978a7d7164574a3e3124170b000000000000040f1a242f3a45505a65707b86919b9b90857a70655a4f443a2f24190e030000000000000000000000000000000000000e1a2734404d596571767069615a55616e7b8895a2978a7d7164574a3e3124170b000000000000040f1a242f3a45505a65707b86919b9b90857a70655a4f443a2f24190e030000000000000000000000000000000006131f2b37434e59626768696a6b6d6d6960554b4b4b4d5158626d7986929f9a8e8275695c5043362a1d202a35404b56616b76818c97a0958a7f746a5f54493e33291e13080000000000000000000000000000000000000a16212d3945515c68737e8a95a0abada2988d83786e655c534b433c36302c2825232221212b353f49535c66707a848d97a1a399908a909aa5b0aa9f94897d72665b4f43382c2014080000000000000004101c27333f4a55616c77828d98a2acaba1978d837a71686058514b45413d393735343332333435373a3e42474d545b636b747d87909aa5afa99f948a7e73685d52463b2f24180c0000000000000000000000000000000000000000000008141f2b37434f5a66727e8a96a1a99d9185796d76838f9ba7a69a8e82766a5f53473b2f23180c0000000000000000000000000000000000000000020d17212a32393e404143474d56606b77838f9ba7a69a8e8275695c5043372a1e110500000000000000000000000000020f1b27333f4b57636f7b87939f9e92867a6f63584c4148535e69747e89949ea79c92897f766d655e57524e4c4b4c4e51575d666f79838e9a97989ea8a194887b6f63564a3d4754606d7986939f9d9083776a5d5144372b1e110500111e2b3744515d6a7783909da4978a7e7164584b3f333f4c5865727e8b98a59c8f8276695c50434b55606b75808b95a09b90857a70655b50453a30251b10050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16222d38444f5b66727d8994a0aba1958a7e73675b505763707d8a97a4b0a99c8f8275695c4f4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4b4741382f241a0e0300000000000a16232f3b4753606c7885919da9afa2968a7d7165594c4034281b0f030005111d2a36424f5b6773808c98a59e92857e8a97a39f93877a6e6255493d3124180c00000814212d3946525e6a77838f9ca8afa3978b7e72665a4d4135291c10040000000d1a26333f4c5865727e8b97a49b8f8276695d504438303c4855616e7a8793a09f9286796d6054473b2e2119242f39444f59646f79848f99a1968c81766c61564c41362c21160c010000000000000000000000000000000000000e1b2834414e5b6774817a736c655e616e7b8895a2978a7d7164574a3e3124170b0000000000000008131e28333e49545f69747f8a959f978c81766c61564b40352b20150a0000000000000000000000000000000000000e1b2834414e5b6774817a736c655e616e7b8895a2978a7d7164574a3e3124170b0000000000000008131e28333e49545f69747f8a959f978c81766c61564b40352b20150a000000000000000000000000000000000815212e3b4753606b7375767778797a7165594c3f3f4046515e6a7784909d9d9184776b5e5145382b1f19242f39444f5a656f7a85909b9c91867b70655b50453a2f251a0f04000000000000000000000000000000000005111d2834404b57626d79848f9aa4afa99f948a81776e655d554e47413c383432302e2e2d2e2f37414a545e68727b858f99a3a29a969aa2acada3988d82776c61554a3e33271b0f0400000000000000000b17222d39444f5b66717b86909ba5afa89f958c837a726a635c56514d4946434140403f40404244464a4e53585e656d757d868f99a2acaca2978d83786d62574c41352a1e130700000000000000000000000000000000000000000000030f1b26323e4a56616d7985919ca8a295897d717a87939faba195897d71665a4e42362a1f1307000000000000000000000000000000000000000000060f1821282d323435373b444f5b67737f8b98a4aa9e9185786b5f5245392c1f130600000000000000000000000000000b17232f3b47535f6b77828e9aa3978b8074695d5247414d57626d77828c96a0a49b918880777069635e5b5958595a5d62686f78818b95928a8c96a2a4978b7e7265594d404a56636f7c8895a19b8e8175685b4f4236291c100300101d2936424f5c6875828e9ba5998c8073665a4d4135424e5b6774818d99a69a8d8174675b4e42444e59646e79848e99a2978c82776c61574c42372c22170c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101c27333e4a55616c78838f9aa6a69b8f84786c61555763707d8a97a4b0a99c8f8275695c595959595959595959595959595959595959595959595959595959595958524a41362b1f140800000000010e1a26323f4b57636f7c8894a1adab9f93867a6e6155493d3024180b0000010e1a26333f4b5764707c8995a1a19588818d99a69c8f83776a5e5246392d211508000005111d2a36424e5b6773808c98a4b1a79a8e8276695d5145392c2014080000000b1824313d4a56636f7b8894a19e9185786c6054473c34404c5864707d8996a29c9083776a5e5145382c1f131d28323d48525d68727d88929d9d93887d73685d53483d33281d13080000000000000000000000000000000000000e1b2834414e5b677481857e766f68616e7b8895a2978a7d7164574a3e3124170b00000000000000010c17222d37424d58636d78838e999e93887d72675d52473c31271c110600000000000000000000000000000000000e1b2834414e5b677481857e766f68616e7b8895a2978a7d7164574a3e3124170b00000000000000010c17222d37424d58636d78838e999e93887d72675d52473c31271c11060000000000000000000000000000000915222f3c4855626f7b82838485868074675b4f443f3f44515d6a7784909d9f9285786b5f5245382c1f121d28333d48535e69737e89949f988d82776c61574c41362b20160b0000000000000000000000000000000000000c18232f3a45515c67727d88929da7b0a69c938980776f675f58524d4844413e3c3b3a3a3a3b3d3f424c566069737d87919ba5a5a3a5abafa59b91867b71665b4f44392d22160a00000000000000000006111c28333e49545f6a747e89939da6afa79e958c847c746e68625d595552504e4d4c4c4c4d4e5053565a5e646970777e878f98a1abada39a90867b71665b51463a2f24190d0200000000000000000000000000000000000000000000000a16222d3945515d6874808c98a3a69a8d81757e8b97a3a89c9084786d6155493d32261a0e0200000000000000000000000000000000000000000000060f161d222527282b323e4a5763707c8995a2aca09386796d6053473a2d201407000000000000000000000000000007131f2b37424e5a66727d8995a09c91857a6e63584d4246515b66707a848e97a0a39a9189817a746f6a67656565676a6e737a818a93978c8186929fa79a8e8175685c50434d5a66727e8b97a4988c7f7366594d4034271b0e01000e1b2734414d5a6673808c98a59b8f8276695d51454045515e6a76838f9ca4978b7e7265594c403d47525d67727d87929d9e93897e73685e53493e33281e13090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16222d3944505b66727d8995a0aba095897d7266616163707d8a97a4b0a99c8f827569666666666666666666666666666666666666666666666666666666666666645c52473c3024170b0000000005111e2a36424e5b6773808c98a4b0a89b8f83766a5e5245392d2114080000000a17232f3b4854606c7985919ea4978c86909ca5988c8073675b4f42362a1d11050000010e1a26323f4b5764707c8995a1adaa9e9286796d6155483c3024170b0000000915222e3b4753606c7885919da194887c7064584d424045505c6874808c99a5998c8074675b4f4236291d1016212b36414b56616b76818b96a19a8f847a6f645a4f443a2f241a0f0400000000000000000000000000000000000e1b2834414e5b6774818e88817a736b6e7b8895a2978a7d7164574a3e3124170b000000000000000005101b26313b46515c67717c87929d9a8f84796e63594e43382d22180d02000000000000000000000000000000000e1b2834414e5b6774818e88817a736b6e7b8895a2978a7d7164574a3e3124170b000000000000000005101b26313b46515c67717c87929d9a8f84796e63594e43382d22180d0200000000000000000000000000000815212e3b4754606d79868f91928f83776b60564f4c4c4e55606c7885919e9e9285786b5f5245382c1f1216212c37414c57626d77828d989e93897e73685d52483d32271c1207000000000000000000000000000000000007121e2934404b56616b76818b959fa9aea49b92898178716a635e5954504d4b494847474748494b4e51555a616b757f89939fabb0b2b1a79d94897f746a5f54493e33281c1105000000000000000000000b17222d38434d58626d77818b949da6afa79e968e868079736e6965615f5c5b5a5959595a5b5d5f62666a6f757b82899199a1aaaca49b91887e74695f554a3f34291e130700000000000000000000000000000000000000000000000005111d2934404c58646f7b87939faa9d918579828e9ba7a3978c8074685c5044392d211509000000000000000000000000000000000000000000000000040b1116191a1b222f3b4854616e7a8794a0ada094877a6d6053473a2d2014070000000000000000000000000000020e1a26323e4a55616d78848f9ba2968b8074695e53483f49545e68727b858e979fa39b938c85807a777472717273767a7e858b939b91867b838f9ca89d9184786b5f5246515d6976828e9ba295897c7064574b3e3225180c00000c1925323e4b5764707c8995a19e9285796d62574f4d4e57626e7a86929ea094887b6f63564a3d36404b56606b76818b96a09a90857a6f655a4f453a30251a1005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111c28333f4a56616c78848f9aa6a59a8e83776e6e6e6e707d8a97a4b0a99c8f8275737373737373737373737373737373737373737373737373737373737373736e64584c4033261a0d000000000915212d3a46525e6a77838f9ba8b0a4988c8073675a4e4236291d110500000007131f2c3844505d6975828e9aa69d959398a1a195897c7064574b3f33261a0e010000000a16232f3b4854606c7985919eaaaea295897d7164584c4034271b0f03000006121f2b3844505c6975818d99a4988c8075695e544e4d4f57616d7884909ca094897c7064584c3f33271a0e0f1a242f3a444f5a646f7a858f9aa1968b81766b61564b41362b21160b01000000000000000000000000000000000e1b2834414e5b6774818e938b847d766f7b8895a2978a7d7164574a3e3124170b00000000000000000009141f2a353f4a55606b75818b96a0968b80756a5f554a3f34291e1409000000000000000000000000000000000e1b2834414e5b6774818e938b847d766f7b8895a2978a7d7164574a3e3124170b00000000000000000009141f2a353f4a55606b75818b96a0968b80756a5f554a3f34291e1409000000000000000000000000000006131f2c3845515e6a76838f9b9e93887c7168605b59595a5e67717c8894a19d9084776a5e5144382b1e120f1a25303b46505b66717c87919c9a8f857a6f64594e44392e23180d0300000000000000000000000000000000010c18232e39444f5a646f79838d97a0a9ada49b938a837b756f6964605d5a5756555453545556585a5e61666b70777d85919daab7b7ab9f958c82776d63584e43382d22160b000000000000000000000005101b26313c46515b656f78828b949da5ada8a098918a847e7975716e6b69676666656667686a6c6f72767b80868c939ba3ababa39a92897f766c62584d43382d23180d02000000000000000000000000000000000000000000000000000c1824303b47535f6b76828e9aa6a195897d86929faa9e93877b6f63574c4034281c1005000000000000000000000000000000000000000000000000000005090c0e13202d3a4653606c798693a0aca094877a6d6053473a2d2014070000000000000000000000000000000a16212d3944505c67737e8a95a09c91867b70655a4f45424c566069737c858d959da49e97918b8783817f7e7e8082868a90969d948a7f74808c99a5a093877a6e62554a56616d7986929e9f92867a6d6154483b2f23160a00000a16232f3b4854606d7985919da2968a7e7368605b595a5f68737e8a96a29c9084786c5f53473a2f39444f59646f79848f99a1978c81766c61564c41372c21170c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222e3944505b67727e8995a0ab9f93887c7b7b7b7b7b7d8a97a4b0a99c8f83808080808080808080808080808080808080808080808080808080808080808074675a4d4134271a0e010000000c1825313d4956626e7a87939fabada194887c6f63574b3e32261a0d0100000003101c2834414d5966727e8a97a3a7a1a0a3aa9e9185796d6054483b2f23170a0000000007131f2c3844505d6975828e9aa6b2a5998d8174685c5043372b1f12060000030f1c2834404d5965717d8994a09d91867a70665f5b595b6069737e8995a19b9084786c6054483c3023170b08131d28333d48535d68737d88939e9d92887d72685d52483d32281d1208000000000000000000000000000000000e1b2834414e5b6774818e97968f8881797b8895a2978a7d7164574a3e3124170b000000000000000000030d18232e39444e59646f7a848f9a9c91877c71665b50463b30251a10050000000000000000000000000000000e1b2834414e5b6774818e97968f8881797b8895a2978a7d7164574a3e3124170b000000000000000000030d18232e39444e59646f7a848f9a9c91877c71665b50463b30251a10050000000000000000000000000004101d2936424e5a67737e8a96a1998e837a726b676565676a7078838e99a4998d8174685c4f4336291d1009141e29343f4a545f6a75808b95a0968b81766b60554a3f352a1f1409000000000000000000000000000000000007121d28333d48535d67717b858e97a0a8ada59c958d86807a75706c6966646261616061616364676a6d72767c82888f97a1adb8b4a79b8e837970665b51473c31261c12080000000000000000000000000a151f2a343f49535d667079828b939ba3abaaa39c958f8a85817d7a78767473737273737476787b7e82878c91979ea5ada8a199918980766d645a50463c31271c1106000000000000000000000000000000000000000000000000000007131f2b37424e5a66727d8995a1a5998d818a96a3a59a8e82766a5e53473b2f23170c0000000000000000000000000000000000000000000000000000000000000613202c3946525f6c7986929faca094877a6d6053473a2d20140700000000000000000000000000000005111c28343f4b56616d78848f9aa2978c81766c61574c42444e57616a737b838b9299a0a29c97938f8d8c8b8c8d8f92969b9c948b8278707d8996a2a3968a7d7164584f5b66727e8a96a29b8f83766a5e5145392c201307000007131f2c3844505c6874808c97a39b8f857a726b6766676b717a85909ba2978b8073685b4f43372b323d48525d68727d88929d9e93887d73685e53483d33281e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111d28333f4a56616d78848f9ba6a4998d888888888888888d98a5b1ab9f948d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8174675a4d4134271a0e01000004101c2835414d5965727e8a96a3afa99d9185786c6054473b2f22160a00000000000c1825313d4a56626e7b8793a0acadacafa79a8e8275695d5044382c1f13070000000003101c2834414d5966727e8a97a3afa99d9084786c5f53473b2e22160a0000000c1824303c4854606c78838f9aa2978c8278706a6766676b727b858f9aa0958a7f73675c5044382c201307010c16212c36414c56616c76818c97a1998f84796f64594f44392f24190f040000000000000000000000000000000e1b2834414e5b67747e858c9399928b847c8895a2978a7d7164574a3e3124170b0000000000000000000007111c27323d48525d68737e89939e988d83786d62574c42372c21160b0100000000000000000000000000000e1b2834414e5b67747e858c9399928b847c8895a2978a7d7164574a3e3124170b0000000000000000000007111c27323d48525d68737e89939e988d83786d62574c42372c21160b01000000000000000000000000010d1a26323e4a56626e79848f9a9f958c847c7774727273767b828b959f9e93887c7064584c4033271b0e020d18222d38434e58636e79848f999d92877c72675c51463b31261b100500000000000000000000000000000000000b16212c36414b555f69737c858e979fa7aea69f98918b86817c797573716f6e6d6d6d6e6f7173767a7d82878d939aa1a9aeababa89c90867c72685e554b41372d241a10060000000000000000000000030e18232d37414b555e677079818a9199a0a7ada7a19b96918d8a87848281807f7f8080818385888b8e93979da3a9aba49e968f877f766d645b52483e342a1f150a000000000000000000000000000000000000000000000000000000020e1a26323e4955616d7884909ca89d928c909ba6a195897d71655a4e42362a1f130700000000000000000000000000000000000000000000000000000000000005131f2c3946525f6c7986929faca094877a6d6053473a2d201407000000000000000000000000000000000b17232e3a45505c67727d88939e9e93887d73685e544a41454f586169717981888e949a9fa39f9c9a989898999b9e9e99928a82796f6d7a86929fa0998d8074675b54606b77838e9aa3978b7e72665a4e4235291d1004000004101c2834404c58646f7b86919ca1968c847c77747374767c838c96a19b90857a6e63574b3f33272b36414b56616b76818b96a19a8f857a6f645a4f443a2f241a0f0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222e3945505c67737e8a95a1aa9f9795959595959595979fa9b5b0a69e9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a8e8174675a4d4134271a0e0100000713202c3844515d6975828e9aa6b2a69a8d8175695c5044382b1f130600000000000915212e3a46525f6b7784909ca8b5b9afa3978b7e7266594d4135281c100300000000000c1825313d4a56626e7b8793a0acaca094887b6f63574b3e32261a0d0100000814202c3844505b67727d88939d9e948b827b77747374777d848d97a1998f84796e62574b3f33271b0f030005101a252f3a454f5a65707a85909aa0968b81766b60564b40362b20160b0000000000000000000000000000000d1a26333f4b57636c737a81888f96968e878a96a2978a7d7164574a3e3124170b00000000000000000000000b16202b36414c56616c77828c979f94897e74695e53483d33281d120700000000000000000000000000000d1a26333f4b57636c737a81888f96968e878a96a2978a7d7164574a3e3124170b00000000000000000000000b16202b36414c56616c77828c979f94897e74695e53483d33281d1207000000000000000000000000000a16222e3a46515d68737d88919a9e958e8883817f7e8082878c949d9e958c82766b6054483c3024180b0006111c26313c47525d67727d88939d998e83786d63584d42372d22170b000000000000000000000000000000000005101a252f39434d57616a737c858d959ca4aaaaa39d97928d898582807d7c7b7a7a7a7b7c7e8083868a8e93989ea5aba9a39e9fa4a2988e847a70675d53493f362c22180e05000000000000000000000006111b252f39434c555e676f7880878e959ba1a7aca7a29d999693918f8e8d8c8c8c8d8e8f9194979b9fa3a8aaa59f99938c857d756d645b524940362c22180e03000000000000000000000000000000000000000000000000000000000915212d3944505c6874808b97a3a49c999ba2a89c9084786d6155493d31261a0e0200000000000000000000000000000000000000000000000000000000000003131f2c3946525f6c7986929faca094877a6d6053473a2d2014070000000000000000000000000000000006121d28343f4a56616c77828d97a29a8f857a70665c524940464e575f676f767d83898e93979a9c9e9e9e9e9c9a97928d87807870676a7783909393939083776a5e5b66717c88949f9e92867a6e62564a3e3226190d010000000c1824303c47535e6a75808a949d9e968e888381808183878d959e9d93897e74695d52463b2f23242f3a444f5a646f7a858f9aa1968c81766b61564c41362b21160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111d28343f4b56626d7884909ba6a9a3a2a2a2a2a2a2a2a3a9acacacaca9a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69a8e8174675a4d4134271a0e0100000b1723303c4854606d7985919eaaaca3968a7e7165594d4034281b0f03000000000005121e2a36434f5b6774808c99a5acacaca093877b6e62564a3d3125190c0000000000000915212e3a46525f6b7784909ca9aca4988b7f73675a4e4236291d1105000004101c27333f4a56616c76818b959d9d948d878381808183888e969f9a91877d72675c51463a2f23170b00000009131e28333e49535e68737e89939e9d92877d72675d52473d32271d110600000000000000000000000000000b17232f3b46515a61686f767d848b929993959ca4978a7d7164574a3e3124170b0000000000000000000000040f1a242f3a45505a65707b86919b9b90857a6f655a4f44392f24180d01000000000000000000000000000b17232f3b46515a61686f767d848b929993959ca4978a7d7164574a3e3124170b0000000000000000000000040f1a242f3a45505a65707b86919b9b90857a6f655a4f44392f24180d0100000000000000000000000006121d2935404b56616c767f8890979e9994908d8c8c8d8f92989e9b948c837a70655a4f43382c20140800000a15202a35404b56616b76818c97a0958a7f74695f54493e33281c1004000000000000000000000000000000000008131d27313b454e58616a727b838b92999fa6aba8a29d9995918e8c8a898887878788898a8c8f92969a9fa4a9aaa59e9892939ba4a0968c83786f655b51483e342a20170d03000000000000000000000009131d27313a434c555d666e757c848a90969ba0a5a9a9a6a2a09d9c9a999999999a9b9c9ea0a3a7aba7a39e99948e88817a736b635b524940372e241a1006000000000000000000000000000000000000000000000000000000000005101c2834404b57636f7b87929ea7a7a6a7a7a3978b8074685c5044392d2115090000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d20140700000000000000000000000000000000010c17232e39444f5a65707b86909ba1968c82786e645b524940454d555d646b72787d82878a8d8f91929291908d8a87827c756e665e677480868686868686796d61616c77828e99a4998d82766a5e52463a2e22160a0000000008131f2b36424d58636e78828b939aa09993908d8d8d8f93989f9a938a81776d62574c41352a1e1d28333d48535d68737d88939e9d93887d72685d52483d32271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e3a45515c67737e8a96a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09a8e8174675a4d4134271a0e0100000e1b27333f4c5864707c8995a0a0a09f93877a6e6255493d3124180c000000000000020e1a27333f4b5864707c8995a0a0a0a09c9084776b5f53463a2e21150900000000000005121e2a36434f5b6874808c99a0a0a09b8f83766a5e5246392d2115080000000b17222e39444f5a656f79838b949b9e98938f8d8d8d9094999f9891887f756b61564b4035291e1206000000020c17222c37424c57616c77828c97a2998e84796e64594e44392e22170b000000000000000000000000000007131e2a353f4850575e656c737a81888f969da0a0978a7d7164574a3e3124170b00000000000000000000000008131e28333e49545e69747f8a959f978c81766b61564b4035291d11050000000000000000000000000007131e2a353f4850575e656c737a81888f969da0a0978a7d7164574a3e3124170b00000000000000000000000008131e28333e49545e69747f8a959f978c81766b61564b4035291d1105000000000000000000000000010d18242f3a454f5a646d767e868c92979a9c9a9898999b9c9995908a827a71685e53493e32271b0f040000030e19242f39444f5a656f7a8590999991867b70655a5044392d2014080000000000000000000000000000000000010b162029333d464f586069717980878e949aa0a5a9a9a5a19e9b99979594949494949597999b9ea2a6aaa9a49f99938d8689929ca69e948b81776d635a50463c32281f150b0100000000000000000000010b151f28313a434b545c636b72797f858a9094999ca0a3a5a8a9a8a7a6a6a6a6a6a7a9a9a7a5a29f9b97938e89837d7670686159514940372e251c1208000000000000000000000000000000000000000000000000000000000000000c17232f3b47525e6a76828e999a9a9a9a9a9a92877b6f63574b4034281c10040000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d201407000000000000000000000000000000000006121d28333e49545f69747e89939e9e948a80766d645b524941434b535a60676c72767a7e81838485858483817e7a76716b645c58647079797979797979776d6068737e89949f9f94887c7165594e42362a1e120600000000030e1a25313c47515c66707981898f95999c9c9a9a9a9c9c99958f8981786f655b51463b30241916212c36414c56616c76818c9799998f84796f64594f44382c1f1307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121d29343f4b56626d7984909393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393938e8174675a4d4134271a0e010000111e2a37434f5b6874808c93939393938f83776a5e5246392d211508000000000000000b17232f3c4854606d79859293939393938d8074685b4f43372a1e1205000000000000020e1a27333f4c5864707d89939393939393867a6e6255493d3124180b00000006111d28333e49535d67717982898f95999c9c9a9a9a9c9b98938d877f766d63594f443a2f23180d010000000005101b25303b45505b65707b85909999958b80756b60554a3f33271b0e0200000000000000000000000000020d18232d363e454c535a61686f767d848b929393938a7d7164574a3e3124170b000000000000000000000000010c17222c37424d58636d78838e939393887d72675d5145392d20140700000000000000000000000000020d18232d363e454c535a61686f767d848b929393938a7d7164574a3e3124170b000000000000000000000000010c17222c37424d58636d78838e939393887d72675d5145392d2014070000000000000000000000000007121e29333e48525b646c747b81868a8e9092939392918f8d89847e7870685f564c42372c21160a0000000007121d28333d48535e69737e898c8c8c8c82776c6155493c2f23160a000000000000000000000000000000000000040e17212b343d464e575f676e757c83898f94999da1a5a8aaa7a5a3a2a1a0a0a0a1a2a4a5a8aaa7a4a19c98938e88827b818a949ea69d93897f756b62584e443a31271d13090000000000000000000000030c161f283139424a525960676e74797f84888c909496999b9d9e9fa0a0a0a0a09f9e9c9a9895928f8b87827d77726b655e574f473f372e251c130a000000000000000000000000000000000000000000000000000000000000000007131e2a36424e5965717d898d8d8d8d8d8d8d8d82766a5e52473b2f23170c000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d2014070000000000000000000000000000000000000b17222d37424d58626d77818c96a09c92897f766d645b534b4341484f555b61666a6e717476777878777674726e6a655f5952545f686c6c6c6c6c6c6c6c6566707a858f9aa4998e82776b6054493d3125190d01000000000009141f2a35404a545e676f777e84898d8f9192939392908d89847e776f665d53493f34291e130f1a252f3a454f5a656f7a858c8c8c8c8b81766b6054483b2f2215090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c18232e3a45515c68737f86868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868174675a4d4134271a0e010000131f2c3946525f6b7784868686868686868073675b4e42362a1d1105000000000000000713202c3844515d697682868686868686867d7064584c3f33271b0e02000000000000000b1723303c4854616d7986868686868686867e7165594c3f3326190c000000000b16212c37414b555f6770777e84898d9091929392918f8c88827c756d645b51473d33281d120700000000000009141e29343e49545e69747e898c8c8c8c877c72675b4f43362a1d1004000000000000000000000000000007111b242c343a41484f565d646b72798086868686867d7164574a3e3124170b0000000000000000000000000005101b26313b46515c67717c868686868684796e6155483b2f221508000000000000000000000000000007111b242c343a41484f565d646b72798086868686867d7164574a3e3124170b0000000000000000000000000005101b26313b46515c67717c868686868684796e6155483b2f22150800000000000000000000000000010c17222c364049525a626970757a7e8184858686868583817d78736d665e564d443a30251b100500000000010b16212c37414c57626d778080808080807d7063574a3d3024170a00000000000000000000000000000000000000050f19222b343c454d555d646b71787d83888d9195989b9ea0a2a3a4a5a6a6a6a5a4a3a2a09e9b9894918c87827d777078828c96a0a59b91877d746a60564c43392f251b10050000000000000000000000040d161f27303840474e555c62686e73787c8184878a8c8e90919293949494939291908e8c8986837f7b76716c66605a534c453d352d251c130a010000000000000000000000000000000000000000000000000000000000000000020e1a25313d4955606c788181818181818181817d71655a4e42362a20170c020000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d20140700000000000000000000000000000000000005101b26313b46515b65707a848e97a19b91887f766d655d554e4740444a50555a5e626567696b6b6b6b6a6865625e5a544e484d565d5f5f5f5f5f5f5f5f646e78828c96a19d93887c71665a4f43382c201509000000000000030e19242e38424c555d656c73787d8083858686868583817d78736c655d544b41382d23180d08131e28333e48535e68737e8080808080807c6f6356493c3023160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121d2934404b57626e7879797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797972665a4d4034271a0e010000131f2c3946525f6b767979797979797979797064574b3f32261a0e010000000000000004101c2935414d5a66727979797979797979776d6155483c3023170b00000000000000000714202c3845515d6a757979797979797979797165584c3f3326190c0000000005101b252f39434c555e656d73787d8183858686868583807c77716a635b52493f362b21160c01000000000000020d17222d37424d57626d7780808080808080776a5d5144372a1e110400000000000000000000000000000009121a222930373e454c535a61686f757979797979796f63574a3d3124170a000000000000000000000000000009141f2a353f4a55606b75797979797979786d6155483b2f22150800000000000000000000000000000009121a222930373e454c535a61686f757979797979796f63574a3d3124170a000000000000000000000000000009141f2a353f4a55606b75797979797979786d6155483b2f221508000000000000000000000000000005101a242e37404850585e656a6e72757778797979787674716d68625c544d443b32281e1409000000000000050f1a25303b45505b6670737373737373726b6155483c2f2316090000000000000000000000000000000000000000071019222a333b434b525960666c72777c8185898c8f9193959698989999999898969593918e8c8884807b77716b66707a848e97a1a3998f867c72685e554b41372d22160b000000000000000000000000040d151e262e353d444b51575d62676c7074787b7d80828485868687878786868483817f7c7a76736f6a65605b554f48423a332b231b130a01000000000000000000000000000000000000000000000000000000000000000000000915212c3844505c6771737373737373737373736c615549423b32291e13080000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d2014070000000000000000000000000000000000000009141f2a343f49535e68727c858f98a29a918880776f675f58514b443f44494e5256595b5d5e5e5e5e5d5b5956524e49433d444b515353535353545c646d76808a949ea1968c81766b6055493e32271b10040000000000000007121c26303a434b535b61676c70747678797979787674716d67615b534b42392f261b1106010c17222c37414c57616c72737373737373726b6054483b2f221509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c18232f3a46515c666c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6960564a3e3225190c000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c675e53473b2f23160a0000000000000000000c1925313d4a5560696c6c6c6c6c6c6c6c6c665c5145382c201407000000000000000004101c2935414d59636b6c6c6c6c6c6c6c6c6c685f54493d3024170b000000000009131e27313a434c545b62676c71747678797979787673706b665f59514940372d241a0f05000000000000000006101b26303b46505b666f7373737373737370675b4f4336291d1004000000000000000000000000000000000910171e252c333a41484f565d646b6c6c6c6c6c6c675e53473b2e2216090000000000000000000000000000030d18232e39434e59636b6c6c6c6c6c6c6c665c5145392d201407000000000000000000000000000000000910171e252c333a41484f565d646b6c6c6c6c6c6c675e53473b2e2216090000000000000000000000000000030d18232e39434e59636b6c6c6c6c6c6c6c665c5145392d20140700000000000000000000000000000008121c252e363f464d53595e6266686a6c6c6c6c6b6a6764615c57514a433b322920160c020000000000000009131e29343f4a545e646666666666666662594f44382c2014070000000000000000000000000000000000000000000710182129313940484e555b61676c7075797c80828587888a8b8c8c8c8c8c8b8a888784827f7c7874706b66605e68727c868f99a0a0988e847a70665d53493e33271b0f02000000000000000000000000030c141c242b323940464c51575c6064686b6e717375777879797a7a7a797978767472706d6a66635e5a554f4a443d3730292119110901000000000000000000000000000000000000000000000000000000000000000000000004101c28333f4b555f6567676767676767676766625a57534d443a3025190d0100000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d20140700000000000000000000000000000000000000030d18232d37424c56606a737d869099a19a92898179716a635c564f4a443f4246494c4e5051515151504f4c4a46423d38323a404446464950575e666e768089929ca3998f857a6f645a4e43382d21160a0000000000000000000a141e283139414950565c6064676a6b6c6c6c6b6a6864615c565049413930271e140a000005101b25303a45505a62666666666666666661594f43382c1f13070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121e2935404a545b5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5d574e44392d2216090000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5c554c42372b1f13070000000000000000000915212d39444e575d5f5f5f5f5f5f5f5f5f5b544a3f34281c10040000000000000000000d1925313c4751595e5f5f5f5f5f5f5f5f5f5d564d43382c2014080000000000010c161f28313a424950565c6064676a6b6c6c6c6b6967635f5a544e473f372e251b12080000000000000000000009141f29343f49545d6466666666666666645e554a3f33271a0e020000000000000000000000000000000000060d131a21282f363d444b52595e5f5f5f5f5f5f5c554c41362b1f120600000000000000000000000000000007111c27323d4751595e5f5f5f5f5f5f5f5b544a4034291d11040000000000000000000000000000000000060d131a21282f363d444b52595e5f5f5f5f5f5f5c554c41362b1f120600000000000000000000000000000007111c27323d4751595e5f5f5f5f5f5f5f5b544a4034291d1104000000000000000000000000000000000a131c252d343b42484d5256595c5e5f5f5f5f5e5d5b5855504b453f38312920170e040000000000000000020d18222d38424c5358595959595959595650473e33281c100400000000000000000000000000000000000000000000060f171f272f363d444a50565b6064696c707376787a7c7d7e7e7f807f7e7e7d7c7a7875736f6c68645f5a5556606a737d8791939393938c82786f655b4f43372b1e120500000000000000000000000000020a121921282e353b40464b53595c5c5f626467686a6b6c6d6d6d6d6d6c6b6a686663615e5c5b575049443e38322c251e170f0800000000000000000000000000000000000000000000000000000000000000000000000000000b17232e39434d54595a5a5a5a5a5c626464646464635f564c4135291d110500000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d201407000000000000000000000000000000000000000006111b26303a444e58616b747d878f98a09b938b837c746e67615b55504b47433f404243444545454442403d3a3635373a3d41454a4f555b616870788089929ba49b91877d73685e53483d32271c1005000000000000000000020c161f2730373e454b5054585b5d5f5f5f5f5f5d5b5855504b453e372f271e150c0200000009141e29343e4850565959595959595959564f473d32271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18232e38424a5052535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353514c453c32281d11050000000a16212c3740484f52535353535353535353504b433a30251a0e0300000000000000000005111c27323c454c515353535353535353524f4a42382e23180c000000000000000000000914202b353f474e52535353535353535353514c443b31271b1004000000000000040d161f2830383f454b5054585b5d5f5f5f5f5e5d5a57534f49433c352d251c13090000000000000000000000020d18222d38424b53585959595959595958544c43392e22160a00000000000000000000000000000000000000020910171e252c333a41484e52535353535353504b433a30251a0e02000000000000000000000000000000000b16202b363f484e5253535353535352504a42382e23180c00000000000000000000000000000000000000020910171e252c333a41484e52535353535353504b433a30251a0e02000000000000000000000000000000000b16202b363f484e5253535353535352504a42382e23180c0000000000000000000000000000000000010a131b222a31373c42464a4d4f515253535352504e4c4844403a342e261f170e050000000000000000000006111c26303a42484b4c4c4c4c4c4c4c4a453e352c21160b000000000000000000000000000000000000000000000000050d151d242b32393f444a4f54585c606467696b6d6f7071727273727271706f6d6b696663605c58534e494e58626b757f8686868686868681776c5f5346392d201306000000000000000000000000000000080f161d23292f3a46525c656969696969696969655f60606160606067696969696969696862584d42362d27211a140c0500000000000000000000000000000000000000000000000000000000000000000000000000000006121d27323b43494c4d4d50575f666d717171717170685e5246392d20130700000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d20140700000000000000000000000000000000000000000009141e28323c464f59626b747d868e979f9d958d867f78726c66615c57534f4c48464341403f3e3d3d3d3e3f40424446494d51565b60666c737a828a929ba49c92897f756b61574c41372c21160a0000000000000000000000040d151e252d343a3f44484c4e505253535352514f4c48443f3a332d251d150c0300000000020d17222c363e454a4c4c4c4c4c4c4c4c4a453e352b21160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c2630383f434646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464645413b332a21160b0000000005101a252e373e434646464646464646464644403931281e140900000000000000000000000b16202a333b4145464646464646464646433f382f261c110600000000000000000000030e19232d363d424546464646464646464644403a322920150a0000000000000000040d161e262d343a3f44484c4e515253535352504e4b47433e38322b231b130a0100000000000000000000000006111b26303941484b4c4c4c4c4c4c4c4c48423a31271c1106000000000000000000000000000000000000000000050c131a21282f363d424546464646464644403931281e13080000000000000000000000000000000000040f19242d363d424546464646464646433f3830261c1207000000000000000000000000000000000000000000050c131a21282f363d424546464646464644403931281e13080000000000000000000000000000000000040f19242d363d424546464646464646433f3830261c1207000000000000000000000000000000000000010911181f262b31363a3d404344454646464544423f3c38342f29231c150d050000000000000000000000000a141e2830373c3f4040404040403f3e3a342c231a100500000000000000000000000000000000000000000000000000030b121a20272d33393e43484c5054575a5d5f616264656565666565656462615f5c5a5754504c47433e465059636d767979797979797979766b5f5346392d20130600000000000000000000000000000000040b121824313e4a57636e75757575757575756f64585354535c687275757575757575736a5e5245382c1f16100902000000000000000000000000000000000000000000000000000000000000000000000000000000030a1119202931383d454c535a626970787d7d7d7d7d7a6e6154473b2e21140800000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d201407000000000000000000000000000000000000000000020c16202a343d475059626b747c858d959c9f98918a847d77726d68635f5b585552504e4c4b4a4a4a4a4a4b4c4e505356595d61666b71777e858c949ca49b938a80776d63594f453a30251a0f04000000000000000000000000030c141b22282e33383c3f4244454646464544423f3c38342e28221b130b0300000000000006101a242c343a3e404040404040403f3e39332c23190f04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e262d3337393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393835302921180f04000000000009131c252c32373939393939393939393938342f281f160c020000000000000000000000040e18212930353839393939393939393937332d261d140a00000000000000000000000007111b242b32363939393939393939393938352f2920170e03000000000000000000040c141b22292e34383c3f4244454646464544413f3b37322d27201911090100000000000000000000000000000a141e2730363c3f404040404040403f3c3730281f150b000000000000000000000000000000000000000000000001080f161d242b32363939393939393938342e271f160c0200000000000000000000000000000000000008121b242b3236393939393939393937332d261e140b000000000000000000000000000000000000000000000001080f161d242b32363939393939393938342e271f160c0200000000000000000000000000000000000008121b242b3236393939393939393937332d261e140b000000000000000000000000000000000000000000060d141a20252a2e313436383939393938373533302c28231e18110a0300000000000000000000000000030c161e252b303233333333333333312e29221a110800000000000000000000000000000000000000000000000000000001080f161c22282e33383c4044484b4e50525456575859595959585857565452504d4a4744403c37343e47515b646b6c6c6c6c6c6c6c6c6b645a4f43372b1e12050000000000000000000000000000000000000b1825323e4b5865717e828282828282807366594d47515d6a7782828282828282796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000060d141c232a323940484f565e656c747b828a8a8a8a857b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d20140700000000000000000000000000000000000000000000040e18222b353e475059626a737b838b9299a09c958f89837d78746f6b6764615f5c5b5958575756575758595b5d5f6265696d72777c82898f969ea29a928981776e655b51473d33291e13090000000000000000000000000000020910171d23282c303335373839393939373633302c28231d17100901000000000000000008121a22292e313333333333333333312e28211a11070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c141c22272b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c29241f170f06000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2b28231d160d0400000000000000000000000000060f171e24292c2c2c2c2c2c2c2c2c2c2b27221c140b020000000000000000000000000009121a20262a2c2c2c2c2c2c2c2c2c2c2b29241e170e050000000000000000000000020a11171d23282c3033353739393939383735322f2b26211b150e0700000000000000000000000000000000020c151e252b30323333333333333332302c261e160d0300000000000000000000000000000000000000000000000000050c131a20262a2c2c2c2c2c2c2c2b28231d150d04000000000000000000000000000000000000000009121a21262a2c2c2c2c2c2c2c2c2b27221c140c0200000000000000000000000000000000000000000000000000050c131a20262a2c2c2c2c2c2c2c2b28231d150d04000000000000000000000000000000000000000009121a21262a2c2c2c2c2c2c2c2c2b27221c140c020000000000000000000000000000000000000000000003090f14191e212527292b2c2c2c2c2c2a292623201c17120d0600000000000000000000000000000000040c141a1f23262626262626262625221d171008000000000000000000000000000000000000000000000000000000000000040b11171d22272c3034383b3e41444648494a4b4c4c4c4c4c4b4a49474643413e3b38342f2b2c353f49525a5f5f5f5f5f5f5f5f5f5f5a52493e33271b0f020000000000000000000000000000000000000b1825323e4b5865717e8b8f8f8f8f8d807366594d44515d6a77848f8f8f8f8f86796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000910181f262e353c434b525961686f777e858d94978f867c736a5f52463a2d20140700000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca094877a6d6053473a2d21140b0b09060200000000000000000000000000000000000000061019232c353e4750586169717880888f959ca09a948e8984807b7774716e6b696766656463636364656667696c6e7275797e83888e949aa19f97908880776e655c53493f362b21170c0200000000000000000000000000000000060c12171c202326292a2c2c2c2c2c2b292724201c17120c0600000000000000000000000810171d2225262626262626262625221d17100800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1e202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201f1d19130d060000000000000000010910161a1e1f2020202020202020201f1c18120b04000000000000000000000000000000050d13191c1f2020202020202020201e1b17110a02000000000000000000000000000000080f151a1d1f2020202020202020201f1c18130c050000000000000000000000000000060c12171c202326292b2c2c2c2c2c2a2826231f1b16100a04000000000000000000000000000000000000030c131a1f2326262626262626262624201b140c0400000000000000000000000000000000000000000000000000000001080f151a1d1f2020202020201f1c17120b0400000000000000000000000000000000000000000000080f151a1e1f202020202020201e1b17110a0200000000000000000000000000000000000000000000000000000001080f151a1d1f2020202020201f1c17120b0400000000000000000000000000000000000000000000080f151a1e1f202020202020201e1b17110a020000000000000000000000000000000000000000000000000004090d1215181b1d1e1f2020201f1e1c1a1714100c070100000000000000000000000000000000000002090f141719191919191919191816110c06000000000000000000000000000000000000000000000000000000000000000000060b11161b2024282c2f323537393b3c3d3e3f3f403f3f3e3d3c3b393734322f2b28241f242d3740494f525353535353535353524f4940372c21160a000000000000000000000000000000000000000b1825323e4b5865717e8b989c9c9a8d807366594d44515d6a7784919c9c9c9386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000009121b222931383f474e555d646b727a81899097998f867d736a61584d42362a1e120500000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca194877a6d6154473b2e2118181816120e080100000000000000000000000000000000000007111a232c353e464f575f676e767d848b91979d9f9a95908c8784807d7a7876747371717070707171737476787b7e82858a8e94999fa19b948d867e766e655c534a41372e241a0f0500000000000000000000000000000000000001060b1014171a1c1e1f2020201f1e1c1a1714100b060100000000000000000000000000060c12161819191919191919191815110c0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131312100d08020000000000000000000000050a0e111313131313131313131312100c0701000000000000000000000000000000000002080d1012131313131313131313120f0b0600000000000000000000000000000000000004090e111313131313131313131312100c07010000000000000000000000000000000001060b1014171a1c1e1f2020201f1e1c1916130f0a0500000000000000000000000000000000000000000002090f131719191919191919191917140f090200000000000000000000000000000000000000000000000000000000000004090e1113131313131313120f0c0700000000000000000000000000000000000000000000000000040a0e111313131313131313120f0b060000000000000000000000000000000000000000000000000000000000000004090e1113131313131313120f0c0700000000000000000000000000000000000000000000000000040a0e111313131313131313120f0b0600000000000000000000000000000000000000000000000000000000000105090c0e10121313131312110f0d0b0804000000000000000000000000000000000000000000000003070a0c0d0d0d0d0d0d0d0c090601000000000000000000000000000000000000000000000000000000000000000000000000050b0f14181c1f2326282b2c2e30313232323332323231302e2c2a2825221f1b17131b252e373e4346464646464646464646433e372e251b1005000000000000000000000000000000000000000b1825323e4b5865717e8b98a5a69a8d807366594d44515d6a7784919ea9a09386796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000000007121b242c343b424a515860676e767d848c939a9990877d746b61584f463c31261a0e0200000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca195887b6e6255483c2f25252524221e19130b0300000000000000000000000000000000000008111a232c343d454d555c646b727980868c92979da19c9894908c8a878482817f7e7d7d7d7d7d7e7f818385878a8e92969a9fa19c969089827b746c645c534a41382f251c12080000000000000000000000000000000000000000000004070b0d0f11121313131211100e0b080400000000000000000000000000000000000106090c0d0d0d0d0d0d0d0d0b0905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004070b0d10111213131312110f0d0a07030000000000000000000000000000000000000000000000000003070a0c0d0d0d0d0d0d0d0c0b08030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003080c101316191c1e2022232425262626262625242321201e1b1916130f0b09131c252c32373939393939393939393937322c251c130900000000000000000000000000000000000000000b1825323e4b5865717e8b98a5a69a8d807366594d44515d6a7784919eaaa09386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000020e19232d363e464d545c636a717980878f969d9990877d746b62594f463d342a1f14090000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca396897d7064574b3e32323232312f2a241d150c0200000000000000000000000000000000000008111a222b333b434b525961676e747b81868c91969a9fa09c999693918f8d8c8b8a8a8a8a8a8b8c8d8f9194979a9ea29f9a95908a857e777169625a524a41382f261d130a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040608090a0b0b0c0c0c0b0a09080604020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306080b0d0f101112131313131212100f0d0b0907040000000000000000000000000000000000000000000000000000000000000000000000000000000104070808080808080808080806040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070b0e101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100e0b0702000000000000000000000000000000000000000000000005080b0c0c0c0c0c0c0c0c0c0c0b090501000000000000000000000005080b0c0c0c0c0c0c0c0c0c0c0b09050100000000000000000000000000000000000000000000000000040708080808080808080808070400000000000000000000000000000000000000000000000000030608080808080808080808080807050100000000000000000000000000000000000000000000000000000000000000000003070a0d0f11131516171819191919191817161513110f0c0a060300010a131b21272a2c2c2c2c2c2c2c2c2c2c2a27211b130a0100000000000000000000000000000000000000000b1825323e4b5865717e8b98a0a09a8d807366594d44515d6a7784919ea0a09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000007131f2a353f4850575f666d747c838b9299a09a90877e756b625950473d342b22180e030000000000000000000000000000000000000000000000000000000000000000121f2c3845525f6b7885929eaba5988c7f73665a4e433f3e3e3e3e3b362f271e1409000000000000000000000000000000000000000810192129313940484f565d63696f757b80858a8e93969a9da0a09e9c9a9998979796969798999a9c9ea0a19e9a97938e8a857f79736d665f58504840382f261d140b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040608090a0b0b0c0c0c0b0a0908060402000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105080b0e101214161718181919181817161513110f0c090602000000000000000000000000000000000000000000000000000000000000000000000000000000000004080c0f1215171a1b1d1e1f1f20201f1f1e1d1c1a181613100d09050100000000000000000000000000000000000000000000000000000000000000000001070c11131515151515151515151513100b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306080a0c0d0e0f0f0f0f0f0e0d0c0a080502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d13171b1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1b17130d060000000000000000000000000000000000000000050b111517181919191919191919191815110c060000000000000000050c111517181919191919191919181815110c0600000000000000000000000000000000000000000000060c10131515151515151515151513100c06000000000000000000000000000000000000000000040a0f1214151515151515151515151514110d08020000000000000000000000000000000000000000000000000000000000000000000000020507080a0b0c0c0c0d0c0c0b0b0a08060502000000000000010910161b1e1f20202020202020201f1e1b161009010000000000000000000000000000000000000000000b1825323e4b5865717e8b939393938d807366594d44515d6a7784919393939386796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000000b1824303c47515a626970787f868e959ca39a91887e756c625950473e352b22191006000000000000000000000000000000000000000000000000000000000000000000111e2b3744515d6a7783909da9a79b8f83776b5f554e4c4b4b4b4a47413930261b100400000000000000000000000000000000000000070f171f272e363d444b52585e646a6f74797e82868a8e919496989a9c9d9e9fa0a0a09f9e9d9c9b999794918e8b87827e79736e68625b544d463e362e261d140b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105080b0e101214161718181919181817161513110f0c0906020000000000000000000000000000000000000000000000000000000000000000000000000000000004090d1114181a1d1f212224242525252525242321201d1b1815120e0a0601000000000000000000000000000000000000000000000000000000000000000000000001060b1014181b1f212426282a2b2c2c2c2c2c2c2b2a282725221f1c1915110d0803000000000000000000000000000000000000000000000000000000000000030b12181d20222222222222222222211f1c17110a010000000000000000000000000000000000000000000000000000000000000000000000000000000206090d10121517191a1b1c1c1c1c1c1b1a181614120f0c080501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810181e23272929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292927231e181008000000000000000000000000000000000000070f161c21242525252525252525252524221d1811090000000000000810171d21242525252525252525252524211d17100900000000000000000000000000000000000000020a11181c2021222222222222222221201c18110a02000000000000000000000000000000000000070f151b1f212222222222222222222222201e19130d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0e1113131313131313131313110e0a0500000000000000000000000000000000000000000000000b1825323e4b5865717e868686868686807366594d44515d6a7784868686868686796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000000e1a2733404c58636c747b828a91989fa09a91887e756c635a50473e352c2319100700000000000000000000000000000000000000000000000000000000000000000000101d2936424f5c6875818e9aa7ab9f93877c71675f5a5858585857524b42372c2115090000000000000000000000000000000000000000050d151d242b333940474d53595e64696d72767a7e8184878a8c8e8f909292939393929291908e8c8a8885827e7a76726d68625d57504a433b342c241c140b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004090d1114181a1d1f212224242525252525242321201d1b1815120e0a06010000000000000000000000000000000000000000000000000000000000000000000000060b1015191d212427292c2e2f30313232323231312f2e2c2a2825221e1a16120d08020000000000000000000000000000000000000000000000000000000000000001070c12171c2024282b2e313335363738393939393838363533312f2c2925211d18140e0903000000000000000000000000000000000000000000000000000000030d151d24292d2e2e2e2e2e2e2e2e2e2e2c28221b130b0100000000000000000000000000000000000000000000000000000000000000000000000005090e1216191c1f2123252728292929292828262523211e1b1815110d08040000000000000000000000000000000000000000000000000000000000000000000000000000000007111a22292f3336363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636332f29221a11070000000000000000000000000000000007101921282d3032323232323232323232312e29221b12090000000008111a22282d3132323232323232323232312e29221b12090000000000000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2c28231c140b020000000000000000000000000000000008111920262b2e2e2e2e2e2e2e2e2e2e2e2e2d2a251e170e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b57647079797979797979797165594c44505d697579797979797979766b5f5246392c1f13060000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b68747e858d939393939392887f766c635a51483e352c231a100700000000000000000000000000000000000000000000000000000000000000000000000e1b2734404d5966727e8b97a3afa4998d8379706a6765656565635d53493d3226190d000000000000000000000000000000000000000000030b121a21282f353c42484d53585d62666a6e7275787b7d7f81828485868686868685848381807d7b7875726e6a66615c57514b453f38312a221a120a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b1015191d212427292c2e2f30313232323231312f2e2c2a2825221e1a16120d080200000000000000000000000000000000000000000000000000000000000000050c11171c2125292d303336383a3c3d3e3e3f3f3e3e3d3c3b393734312e2a27221e19130e080200000000000000000000000000000000000000000000000000000000050c12181d23272c3034373a3d3f414344454646464645444342403e3b3835312d29241f1a140e0801000000000000000000000000000000000000000000000000010b151f272f35393b3b3b3b3b3b3b3b3b3b38332d251d130900000000000000000000000000000000000000000000000000000000000000000001060c11151a1e2225282b2e3032333535363636353433312f2d2b2824211d19140f0a0500000000000000000000000000000000000000000000000000000000000000000000000000030e19232c343b4042434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434342403b342c23190e030000000000000000000000000000040f19232b33393d3f3f3f3f3f3f3f3f3f3f3d3a342d241b1106000005101a232c33393d3f3f3f3f3f3f3f3f3f3f3d3a342c241b1006000000000000000000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b3b38342e261d140a00000000000000000000000000000007101a232b32373a3b3b3b3b3b3b3b3b3b3b3b3936302920170d03000000000000000004070808080808080808080807050200000000000000000000000000000000000000000000000000000000000000000001040708080808080808080808070400000000000000000000000000000000000000000000000000000000000a16232f3c48535e686c6c6c6c6c6c6c6c68605549414d58636a6c6c6c6c6c6c6c6b645a4f43372a1e11050000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b687582868686868686868680766d645b51483f362c231a11080000000000000000000000000000000000000000000000000000000000000000000000000c1825313d4a56626e7b87939eaaaa9f958b827b7673727171716f655a4e4235281c0f0000000000000000000000000000000000000000000001080f161d242a30363c42474c51565a5e6265696b6e70727476777879797979797877767573716f6c6966625e5a56514b46403a342d261f18100800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c11171c2125292d303336383a3c3d3e3e3f3f3e3e3d3c3b393734312e2a27221e19130e0802000000000000000000000000000000000000000000000000000000030a11171d22282d3135393d40424547484a4b4b4c4c4b4b4a49474543413e3a37332e29241f19130c0600000000000000000000000000000000000000000000000000020910171d23292e33383c404447494c4e505152525353525251504e4c4a4845413d3935302b251f19130c05000000000000000000000000000000000000000000000007121d273139404548484848484848484847443f372f251b100400000000000000000000000000000000000000000000000000000000000000060c12171c21262a2e3235383a3d3f4041424242424241403e3c3a3734312d2925201b16100b0500000000000000000000000000000000000000000000000000000000000000000000000914202a353e464c4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4c463e352a20140900000000000000000000000000000a16212b353d44494b4c4c4c4c4c4c4c4c4c4a453f362d23180c01000b16212c353e45494b4c4c4c4c4c4c4c4c4b4a453e362c22170c01000000000000000000000000000006111c262f383f4548484848484848484848453f382f261c110600000000000000000000000000050f19222c353d4347484848484848484848484846413b32291f1409000000000000060c10131515151515151515151514110e0802000000000000000000000000000000000000000000000000000000000001070d11141515151515151515151513100c0700000000000000000000000000000000000000000000000000000007131f2b37424d565c5f5f5f5f5f5f5f5f5d574e433c4751595e5f5f5f5f5f5f5f5f5a52483e32261a0e020000000000000000000000000000000000000000000000000000000000000000000000000f1b2835424e5b6773797979797979797979766d645b52493f362d241a1108000000000000000000000000000000000000000000000000000000000000000000000000000915222e3a46525e6a76828d98a3ada79d948d8783807e7e7e7e76695d5043362a1d10000000000000000000000000000000000000000000000000050b12191f252b31363c40454a4e5256595c5f62646668696a6b6c6c6c6c6c6b6b6968666462605d5956524e4a45403a352f29221c150d06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a11171d22282d3135393d40424547484a4b4b4c4c4b4b4a49474543413e3a37332e29241f19130c0600000000000000000000000000000000000000000000000000060d151b22282e33383d4145494c4f5153555657585858585757555452504d4a47433f3a35302a241e1710090200000000000000000000000000000000000000000000040c131b22282e343a3f44484c505356585a5c5e5f5f5f5f5f5f5e5d5b595754514d4a45413c36312b241d160f07000000000000000000000000000000000000000000000c18232f39434b5154555555555555555554504941372c21150a0000000000000000000000000000000000000000000000000000000000040b11171d23282d32363a3e414447494b4d4e4f4f4f4f4f4e4c4b494643403d3935302c27211c161009030000000000000000000000000000000000000000000000000000000000000000000d1925313c4650575c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5750463c3125190d0000000000000000000000000004101b27323d474f55585858585858585858585650483f34291d120604101c28333d474f56585858585858585858585650483e34291d110500000000000000000000000000000b17222d38424a5154555555555555555554514a42382d22170b000000000000000000000000030d17212b343e474e535555555555555555555555524c443b31261a0e03000000020a11171c2021222222222222222222201e19140d05000000000000000000000000000000000000000000000000000000030b12181d2022222222222222222221201c18120a0200000000000000000000000000000000000000000000000000030f1a26303b444b505353535353535353514c453c353f474e5253535353535353524f4840372c21160a000000000000000000000000000000000000000000000000000000000000000000000000000d1a26333f4b5761696c6c6c6c6c6c6c6c6c6b645b524940362d241b1208000000000000000000000000000000000000000000000000000000000000000000000000000006121e2a36424e5a65707c87919ba4aba69e98938f8d8b8b8b8376695d5043362a1d100000000000000000000000000000000000000000000000000001070e141a20252b3035393e4246494d50535557595b5c5e5e5f5f5f5f5f5f5e5d5b5a585653504d4a46423e39342f29241e17110a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d151b22282e33383d4145494c4f5153555657585858585757555452504d4a47433f3a35302a241e17100902000000000000000000000000000000000000000000000810181f262d33393f44494d5255595b5e6062636465656565646362605e5c5956534f4b46413b362f29221b140c040000000000000000000000000000000000000000060e161e252c333a40454b5054585c5f626567696a6b6c6c6c6c6b6a69686663605d5a56514c47423c362f2821191109010000000000000000000000000000000000000004101d2934404b555d616161616161616161605b53493d32261a0e01000000000000000000000000000000000000000000000000000001080f161c23282e34393e42464a4e51535658595b5b5c5c5c5b5a59575553504d4945413c37322d27211b140e070000000000000000000000000000000000000000000000000000000000000000111d2936424d58626869696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696862584d4236291d11000000000000000000000000000713202c38434e596165656565656565656565625a50453a2e2216090814212d39444f596165656565656565656565625a50453a2e21150900000000000000000000000000000f1b27333f4a545c616161616161616161615c544a3f33271b0f0300000000000000000000020b151f29333c4650595f61616161616161616161615e564d42372b1f13060000020b141c23282c2e2e2e2e2e2e2e2e2e2e2d2a251f170f0500000000000000000000000000000000000000000000000000030d151d24292d2e2e2e2e2e2e2e2e2e2e2c28231c140c020000000000000000000000000000000000000000000000000009141f29323a4044464646464646464645413a332d353d42454646464646464646433e372e251a1005000000000000000000000000000000000000000000000000000000000000000000000000000a17232f3a454f585e5f5f5f5f5f5f5f5f5f5f5a524940372e241b1209000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313d49545f6a757f89929aa0a5a9a39f9b999898908376695d5043362a1d1000000000000000000000000000000000000000000000000000000003090f141a1f24292d32363a3d404346494b4d4e50515252535353525251504f4d4b494744413e3a36322d28231e18120c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810181f262d33393f44494d5255595b5e6062636465656565646362605e5c5956534f4b46413b362f29221b140c0400000000000000000000000000000000000000010a121a222a31383e454a5055595e6265686a6d6e70717172727171706f6d6b6966635f5b56524c47413a342d251e160e05000000000000000000000000000000000000060f18202830373e454b51565c6064686c6f7274757778797979797877767472706d6a66625d58534d47413a332b231b130a010000000000000000000000000000000000000713202c3945515c676d6e6e6e6e6e6e6e6e6d655a4e4236291d100400000000000000000000000000000000000000000000000000040c131a21272e343a3f44494e52565a5d60626466676869696968676664625f5c5955514d48433e38322c261f18110a03000000000000000000000000000000000000000000000000000000000000121f2c3945525e6a747676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676746a5e5245392c1f12000000000000000000000000000b17232f3c4854606b717272727272727272726c62564a3e3125190c0b1724303c4955616b727272727272727272726c62564a3e3125190c0000000000000000000000000000121e2b37434f5b666d6e6e6e6e6e6e6e6e6d665b4f43372b1e1205000000000000000000000a141d27313b454e58626b6e6e6e6e6e6e6e6e6e6e6e685e53473b2f221509000009141d262e34383b3b3b3b3b3b3b3b3b3b3a36302921170d030000000000000000000000000000000000000000000000010b151f272f35393b3b3b3b3b3b3b3b3b3b39342e261e140a00000000000000000000000000000000000000000000000000020d1720282f3438393939393939393938353029232b313639393939393939393937322c251c1309000000000000000000000000000000000000000000000000000000000000000000000000000006121e29333d464d51535353535353535353524f4940372e251c120900000000000000000000000000000000000000000000000000000000000000000000000000000000000915212c37434e58636d7680888f95999c9e9fa0a0a09d908376695d5043362a1d10000000000000000000000000000000000000000000000000000000000003090e13181d21262a2d3134373a3c3e4042434445464646464645444342403f3c3a3734312e2a26211d18120d0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a121a222a31383e454a5055595e6265686a6d6e70717172727171706f6d6b6966635f5b56524c47413a342d251e160e050000000000000000000000000000000000010a131c242c343b434950565b61656a6e717477797b7c7d7e7e7e7e7e7d7b7a7875726f6b67625d58524c453e37302820170e0500000000000000000000000000000000060f18212a323a41494f565c62676c7175787b7e8182848586868686858483817e7c7976726e69645e58524b443d352d251c130a0100000000000000000000000000000000000814212e3b4754616d797b7b7b7b7b7b7b7b766a5e5145382b1e1205000000000000000000000000000000000000000000000000070e161d252c32393f454b50555a5e6266696c6f71737475757575757472706e6c6965615d59544f49443e37312a231c140d05000000000000000000000000000000000000000000000000000000000013202c3946535f6c798383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383796c5f5346392c2013000000000000000000000000020e1a27333f4b5864707c7e7e7e7e7e7e7e7e7e72665a4d4135281c100e1a2733404c5865717d7e7e7e7e7e7e7e7e7e72665a4d4135291c10040000000000000000000000000013202c3946525f6c777b7b7b7b7b7b7b7b776c5f5246392c20130600000000000000000008121c252f39434d57606a747b7b7b7b7b7b7b7b7b7b7a6f63564a3d3024170a0005101b262f383f454748484848484848484846413b33291f1409000000000000000000000000000000000000000000000007121d27313940454848484848484848484845403830261c110600000000000000000000000000000000000000000000000000050e161d23282b2c2c2c2c2c2c2c2c2b29241e1920262a2c2c2c2c2c2c2c2c2c2a26211a130a010000000000000000000000000000000000000000000000000000000000000000000000000000010c17212b343c414546464646464646464646433e372e251c130a00000000000000000000000000000000000000000000000000000000000000000000000000000000000004101b26313c47515b646d767d84898d90929393939393908376695d5043362a1d100000000000000000000000000000000000000000000000000000000000000003080c1115191d2124282a2d2f3233353637383939393939383837353432302e2b2825211e1a15110c070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131c242c343b434950565b61656a6e717477797b7c7d7e7e7e7e7e7d7b7a7875726f6b67625d58524c453e37302820170e05000000000000000000000000000000000a131c252e363e464d545b61676c71767a7d81848688898a8b8c8c8b8a8a888684827e7b77736e69635d575049413a322920170e050000000000000000000000000000050f18212a333c444c535a61676d73787c8185888b8d8f90929293939292918f8d8b8986827e7a756f6a635d564f473f372e251c130a00000000000000000000000000000000000815212e3b4854616e7b8888888888888885786b5e5145382b1e1205000000000000000000000000000000000000000000000008111820282f363d444a50565c61666a6e7276797b7e80818282828282817f7d7b7875716d6965605a554f49423c352e261f170f060000000000000000000000000000000000000000000000000000000013202c3946535f6c798690909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909086796c5f5346392c201300000000000000000000000005111e2a36434f5b6774808c8c8c8c8c8c8c8c8276695d5044382b1f13111d2a36434f5b6874818c8c8c8c8c8c8c8c8276695d5145382c2014070000000000000000000000000013202c3946535f6c798688888888888886796c5f5346392c201306000000000000000006101a242e37414b555f69727c86888888888888888882786e6256493d3023170a000a16222d37414a5054555555555555555555524c453b31261b0f03000000000000000000000000000000000000000000010d18242f39434b5154555555555555555554514a42382d22170b0000000000000000000000000000000000000000000000000000040c12181c1f20202020202020201f1c18130f151a1d1f202020202020201f1e1a1610090100000000000000000000000000000000000000000000000000000000000000000000000000000000051019222a3035383939393939393939393937322c251c130a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202a353f49525b646c72787d8183858686868686868376695d5043362a1d100000000000000000000000000000000000000000000000000000000000000000000105090d1115181b1e21232527282a2b2c2c2c2c2c2c2c2b2a29272523211f1c1915120e0905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c252e363e464d545b61676c71767a7d81848688898a8b8c8c8b8a8a888684827e7b77736e69635d575049413a322920170e05000000000000000000000000000008121c252e37404850585f666c72787d82868a8d90929496979898989897969593918e8b87837f7a746f68625b534c433b322920170d04000000000000000000000000030d17212a333c454e565d656c72797e84898d919497999b9d9e9fa0a09f9e9d9c9a9895928e8a85817b756e686159514940372e251c1208000000000000000000000000000000000815212e3b4854616e7b8894959595959285786b5e5145382b1e12050000000000000000000000000000000000000000000109121a222a323a41484f555c61676d72767b7e8285888a8c8e8f8f8f8f8e8d8c8a8785817d7975706b66605a544d463f3830292118100700000000000000000000000000000000000000000000000000000013202c3946535f6c7986939c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9386796c5f5346392c20130000000000000000000000000915212d3a46525f6b7784909898989898989285796c6054473b2f221614212d3946525e6b7784909898989898989285796d6154483c3023170b0000000000000000000000000013202c3946535f6c798693959595959386796c5f5346392c20130600000000000000050e18222c364049535d67717a848e9595959595958d847a70665d52463a2e211508000e1b27333e49535c616161616161616161615e574d42372b1f140800000000000000000000000000000000000000000006111d2935404b555d616161616161616161615c544a3f33281b0f03000000000000000000000000000000000000000000000000000001070c1012131313131313131312100c0804090e11131313131313131313110e0a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000710181f25292c2c2c2c2c2c2c2c2c2c2c2a27211b130a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e19232d374049525a61676c717477787979797979797974685c4f4336291d100000000000000000000000000000000000000000000000000000000000000000000000000105080c0f121416181a1c1d1e1f1f2020201f1f1e1d1c1b191715120f0c090502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121c252e37404850585f666c72787d82868a8d90929496979898989897969593918e8b87837f7a746f68625b534c433b322920170d0400000000000000000000000006101a242e374049525a626971777d84898e92969a9c9fa1a3a4a5a5a5a5a4a3a1a09d9a97948f8b85807a736c655d554d443b32291f160c0100000000000000000000000a151f29333c454e575f676f767d848a8f94999da1a3a6a8a9a7a6a6a6a6a7a9a9a7a4a19e9a96918c868079726b635b524940372e241a10060000000000000000000000000000000815212e3b4854616e7b8894a1a2a29e9285786b5e5145382b1e12050000000000000000000000000000000000000000010a131b242c343c444b535a60676d73787d82878b8e9295979997969696969698989694918d8a86817c77716b655f58514a423b332a22191108000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09386796c5f5346392c20130000000000000000000000000c1825313d4956626e7a87939fa5a5a5a5a195887c6f63574a3e3225191724303c4955616e7a87939fa5a5a5a5a195897d7064584c3f33271b0e0200000000000000000000000013202c3946535f6c798693a0a2a2a09386796c5f5346392c201306000000000000030d17202a343e48515b656f79838c96a0a2a2a2988f857b72685e544b40352a1e120500111e2a37434f5b656d6e6e6e6e6e6e6e6e6e695f54483c3024180c0000000000000000000000000000000000000000000a16222e3a46515d676e6e6e6e6e6e6e6e6e6d665b5044372b1f12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e14191d1f2020202020202020201f1e1b161009010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111b252e3740484f565c6165686a6b6c6c6c6c6c6c6c6a62584c4034271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000205080a0c0e0f10111213131313131211110f0e0c0a080603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101a242e374049525a626971777d84898e92969a9c9fa1a3a4a5a5a5a5a4a3a1a09d9a97948f8b85807a736c655d554d443b32291f160c0100000000000000000000030e18222c364049525b646c747b82898f949a9ea2a6a9a7a5a3a2a1a0a0a1a2a3a5a7aaa7a3a09b96918b857e776f675f564d443b31271d13090000000000000000000007121c27313b454e576069717981888f959ba0a5a9a7a4a09e9c9b9a99999a9a9c9ea0a3a7aaa6a29d97918b847d756d645b524940362c22170d0200000000000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000000000000000000000000a131c252d363e464e565d646b72787e84898e93979793908e8c8a898989898a8b8c8f91949896928d88827d76706a635c544c453c342c231a11070000000000000000000000000000000000000000000000000013202c3946535f6c798693939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939386796c5f5346392c20130000000000000000000000030f1c2834414d5965727e8a97a3a39f9fa4a4988c7f73665a4e4135291c1a27333f4c5865717d8a96a3a49e9ea2a5998c8074685b4f43372a1e120600000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000010b151f29323c46505a636d77818b959ea8ada49a90877d736960564c42392f24190d0100121f2c3945525f6b777b7b7b7b7b7b7b7b7a7064584c4035291d110500000000000000000000000000000000000000030f1b27323e4a56626e797b7b7b7b7b7b7b7b786c5f5346392d20130600000000000000040708080808080808080807040100000000000000000000000004060808080808080808060300000000000000000000000003060808080808080808080806020000000000000000000000000000000000000000000000000000000000000000000003080d101213131313131313131313110e0a050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131c252e363e444a5055585b5d5f5f5f5f5f5f5f5f5e5950463b3024180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e18222c364049525b646c747b82898f949a9ea2a6a9a7a5a3a2a1a0a0a1a2a3a5a7aaa7a3a09b96918b857e776f675f564d443b31271d1309000000000000000000000a151f2a343e48525b646d767e868d949aa0a5aaa6a29e9b999795949494949596989b9ea1a5aaa7a29c969089817971685f564d43392f251b10050000000000000000030e19232e38434d576069727b838b939aa0a6aba5a09b9794918f8e8d8d8d8d8e8f9194979a9fa4a9a8a39c968f877f766d645b52483e34291f140900000000000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e12050000000000000000000000000000000000000009121c252e374048505860686f767d83898f9597938e8a8784817f7e7d7c7c7c7d7e808285888b8f9499938e88827b746d665e564e463e352c2319100600000000000000000000000000000000000000000000000013202c3946535f6c798686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686796c5f5346392c2013000000000000000000000007131f2c3844505d6975828e9aa39992939aa49b8f82766a5d5145382c1f1d2a36424f5b6874818d99a59a929198a29c9084776b5f53463a2e22150900000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000009131d27313a444e58626c758089939da7afa59b92887e746b61574e443a31271d12070000121f2c3845525e6a7682888888888888888175695d5145392d22160a0000000000000000000000000000000000000008141f2b37434f5b67737e8888888888888883776b5f5246392c2013060000000000060c101315151515151515151513110c07010000000000000000060c10131515151515151514120f0a040000000000000000040a0f1214151515151515151514120e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131c242c33393f44484c4f515253535353535353524e473e342a1f13070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002040608090a0a0a0a09080705030100000000000000000000000000000000000000000000000000000002040607080808080806050300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151f2a343e48525b646d767e868d949aa0a5aaa6a29e9b999795949494949596989b9ea1a5aaa7a29c969089817971685f564d43392f251b1005000000000000000006111c26313c46505a646d76808890979fa5aba6a09b96928f8c8a8888878787888a8c8e91959a9fa4aaa8a19a938b837a71685f554b41372c22170c010000000000000009141f2a35404a555f68727b858d959da5aba6a099948f8b8885838181808081818385878a8e93989ea4aba7a099918980766d645a50453b30261b1005000000000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000000000000000000007111b242e374049525a626a727981888e9597918c87827e7a77757371706f6f6f70717375787b7f83888d9298938d867f787068605850473e352b22180f050000000000000000000000000000000000000000000000131f2c3946525f6b767979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979766b5f5246392c1f1300000000000000000000000a16232f3b4754606c7985919e9f93878894a09e9285796d6054483b2f23202d3946525e6b7784909ca1958986919ea093877b6f62564a3e3125190d00000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000008111b252f39434c56606a747e87919ba5afa69d938980766c62594f453c32281f150b010000111d2a36424e5a66717d8995959595959185796d62564a3e32261a0e030000000000000000000000000000000000000c1824303c48545f6b77838f95959595958a7e72665a4f43372a1e1105000000020a11181c20212222222222222222201d18120b030000000000020a11171c2021222222222222211f1b160f08000000000000080f161b1f212222222222222222211e1a150e0700000000000000000000000000000000020608080808080808080808080808080808080808080808080808080706050402000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a121a21282e34383c404244454646464646464645423c352c22180d020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003070b0e111315161717171716151312100d0b080400000000000000000000000000000000000000000004080c0f111214141515151413110f0c09050000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26313c46505a646d76808890979fa5aba6a09b96928f8c8a8888878787888a8c8e91959a9fa4aaa8a19a938b837a71685f554b41372c22170c01000000000000000c17222d38434d58626c768089919aa2a9a9a29b958f8a8682807d7c7b7a7a7b7b7d7f8285898e93999fa7aca59d958d847a71675d53493e33281d1207000000000000040f1a26313c47515c66707a848e979fa7aca39c958e89837f7b787674737373737476787b7e82878d939aa1a9aba39b928980766c61574d42372c21160b000000000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e12050000000000000000000000000000000000050f19232d364049525b646c747c848b9298918b85807b76726e6b68666463626263636567696c6f73777c81878d9398918a827a726a625950473e342a21170d0200000000000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b645a4f43372a1e1100000000000000000000010e1a26323f4b5764707c8895a19d908484919da195897c7064574b3e322623303c4955616e7a87939f9e9285828f9ba3978b7e72665a4d4135291c1004000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000006101a232d37414b555e68727c869099a3ada89e948b81776e645a50473d332a20160d030000000e1a26323d4955616d7884909ca2a2a2968a7e72665a4e43372b1f1307000000000000000000000000000000000005111d2935404c5864707c8894a0a2a29d9185796d61564a3e32261a0e020000020b141c23282c2e2e2e2e2e2e2e2e2e2d29241d150d03000000010b141c22282c2e2e2e2e2e2e2e2e2b27211a12090000000009121a21272b2e2e2e2e2e2e2e2e2e2d2b26201810070000000000000000000000000003090e121415151515151515151515151515151515151515151515151515141312100e0c0a0704010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810171d23282c3033363839393939393939393936312b231a1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0f13171a1d202123232424232322201e1c1a1714100b05000000000000000000000000000000000001080f14181b1d1f202122222221201e1c1915110c0701000000000000000000000000000000000000000000000000000000000000000000000000000c17222d38434d58626c768089919aa2a9a9a29b958f8a8682807d7c7b7a7a7b7b7d7f8285898e93999fa7aca59d958d847a71675d53493e33281d120700000000000006111d28343f4a545f6a747e88919ba3aca89f979089837e7a7673716f6e6d6d6e6f707375797d82888e959ca4ada79f968d83796f655a50453a2f24180d0200000000000915202b37424d58636e78828c96a0a9aba29a928a837d77736f6c69686766666768696b6e72767b81888f979fa8ada49b91887e73695e53493d32271c10050000000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000000000000000020d17212b353f48525b646d757e868e96948d87807a746f6a66625f5c59585656555657585a5c5f63676b70767b82888f96948c847c736b625950463c33291e140a000000000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a52483e32261a0e0000000000000000000005111d2a36424e5b6773808c98a49a8d81818e9aa5988c8073675a4e42352927333f4c5864717d8a96a29b8f82808c98a59a8e8276695d5145382c201407000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000040e18222c353f49535d67707a848e98a2aba9a0968c83796f655c52483e352b21180e04000000000915212d3944505c6874808b97a3aea69a8f83776b5f53473b3024180c00000000000000000000000000000000000a16212d3945515d6975818c98a4aea4988c8174695d5145392d22160a0000000a141d262e34383b3b3b3b3b3b3b3b3b39352f271f150b01000009131d262d34383b3b3b3b3b3b3b3a37322c241b1107000007111b242c32373a3b3b3b3b3b3b3b3b3a37312a22190f050000000000000000000000070e151a1e212222222222222222222222222222222222222222222222222121201e1d1b191614110d09050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c11171c202427292b2c2c2c2c2c2c2c2c2c2a25201911080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b10161b1f23272a2c2e2f303030302f2e2d2b292624211c160f07000000000000000000000000000000020b131a2025282a2c2d2e2e2e2e2e2c2b2825211d18130d06000000000000000000000000000000000000000000000000000000000000000000000006111d28343f4a545f6a747e88919ba3aca89f979089837e7a7673716f6e6d6d6e6f707375797d82888e959ca4ada79f968d83796f655a50453a2f24180d0200000000000b17232e3945505b66717b86909aa3ada89e968d867e78726e6a66646261616161626466696d71767c838b929ba4ada89f958b81766c61564b40352a1e130700000000020e1a26313d48535f6a75808a949ea8ada39990888078726c67635f5d5b5a59595a5b5d5f62666b70767d858d959ea8ada39a8f857b70655a4f44382d21150a0000000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e1205000000000000000000000000000000000a141f29333d47515a646d767f889098918a837b756f69635e5a56524f4d4b4a4a4a4a4a4b4d5053575b60656a70767d848b93968e867d746b61584e443b30261c11070000000000000000000000000000000000000000000a16212c3740484f525353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353524f4840372c21160a000000000000000000000814212d3946525e6a77838f9ca4978b7e7e8b97a49b8f83766a5e5145382c2a36424f5b6774818d99a5988c807c8995a29e9286796d6154483c3023170b000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600030c16202a343e47515b656f78828c96a0aaaba1978e847a70675d534a40362d23190f06000000000005101c2834404b57636f7b87929eaaab9f93877b7064584c4034281c1105000000000000000000000000000000020e1a26323e4a56616d7985919da9ab9f93877b7064584c4035291d1105000006111c262f383f4548484848484848484845403931271d12070005101b252f383f444748484848484847433d362d23180d02020d18232d363d4347484848484848484847423c342b21170c0000000000000000000007101820262b2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2c2b2a282523201d1915110d080300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b1014171a1c1e1f202020202020201f1d1a140e070000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080f161c22272b2f3336393b3c3d3d3d3d3c3b39383533302d282119100700000000000000000000000000000a141d252b313437383a3b3b3b3b3b393734312d29241e18110a030000000000000000000000000000000000000000000000000000000000000000000b17232e3945505b66717b86909aa3ada89e968d867e78726e6a66646261616161626466696d71767c838b929ba4ada89f958b81766c61564b40352a1e13070000000004101c28333f4a56616c77828d98a2aca99f968c847b746d67625d5a57565454545455575a5d61656b71788089929ba4aea79d93887e73685d51463a2f23180c0000000007131f2b36424e5965707b86919ca6b0a59b91877e766e67605b5753504e4d4d4d4d4e5053565a5f656b737b838c96a0aaaba1978c82766b6055493e32261a0e0300000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000000000000006111b26303b454f59636c767f8891988f878078716a635d58534e4a4d50535556575757575554514e4b4f54595f656b7279818991988f867d736a60564c42382e23180e03000000000000000000000000000000000000000005101a252e373e4346464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646433e372e251a1005000000000000000000000c1824303d4955626e7a86939fa195887c7b8894a19e9286796d6154483c2f2d3945525e6a7783909ca295897c7a86939fa295897d7064584c3f33271b0e020000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306010b151e28323c464f59636d77818a949ea8aca2998f857c72685e554b41382e241b1107000000000000000c17232f3b47525e6a76828d99a5b0a4988c8074685c5145392d21150900000000000000000000000000000007131f2b37424e5a66727e8a96a2ada69a8e83776b5f53473c3024180c0000000b17222d38424a51545555555555555554514b43392f23180c000a16212c37414a5054555555555555534f483f352a1f130707131e2a353f484f535555555555555555534e463d33281d11050000000000000000050f19222a31373a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a39383634322f2c2926221d19140f09040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080b0e1011121313131313131313110d090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b131a21272d32373c3f434547494a4a4a4a49484644423f3d39332b23190f0400000000000000000000000007121c262f363d4143454647484848474644413d39342f29231c150d050000000000000000000000000000000000000000000000000000000000000004101c28333f4a56616c77828d98a2aca99f968c847b746d67625d5a57565454545455575a5d61656b71788089929ba4aea79d93887e73685d51463a2f23180c000000000915212d3844505c67727e89949fa9ada2978d847a7169625b56514e4b4948474748494b4d51555a60676e768089929ca7afa59a8f84796e63574b4034281c10040000000b17232f3b47535e6a76818d98a3ada99e93897f756c645c554f4a474442414040404244464a4e545a6169717a848e98a3ada99e93887c71665a4e43372b1f130700000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e12050000000000000000000000000000010c17222d38424d57616b757e8891978e867d756e665f58524c4d52565a5d5f61636364646362605e5b57524d4e545a61686f777f8790988f867c72685e544a3f352a1f140900000000000000000000000000000000000000000009131c252c32373939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393937322c251c130900000000000000000000030f1b2834404c5965717d8a96a29e9286797885919da295897d7064574b3f32303c4855616e7a86939f9f9286797784909ca5998c8074685b4f43372a1e12060000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130609131d26303a444e58616b757f89939ca6aea49a90877d736a60564c43392f261c1209000000000000000007131e2a36424e5965717d8994a0aca89d9185796d6155493e32261a0e0200000000000000000000000000000c18232f3b47535f6b77838e9aa6ada1968a7e72665a4f43372b1f13080000000f1b27333f4a545c6161616161616161615d554b4034291d10040f1b27323e49535b61616161616161605951463b3024180c0b17232f3b4651596061616161616161615f584f44392d22150900000000000000000c17212b343c42474848484848484848484848484848484848484848484848484847464443413e3c3935322e2925201a150f0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d151d242c32383e43484c4f52545556575756555453514e4c49443d352b21160b0000000000000000000000020d19242e3841484d505253545555555452504d4945403a342d261f170f060000000000000000000000000000000000000000000000000000000000000915212d3844505c67727e89949fa9ada2978d847a7169625b56514e4b4948474748494b4d51555a60676e768089929ca7afa59a8f84796e63574b4034281c10040000000d1925313d4955616c78848f9aa5b0a69b90867b71685f57504a45413e3c3b3a3a3b3c3e4144494f555c656d76808b95a0abaca1968a7f73685c5045392d2115090000020f1b27333f4b57636f7b87929ea9aea3978c82776d635a524a443f3a37353433333435373a3e42484f575f68727c86919ca7afa4998e82766b5f53473b2f23170b00000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e1205000000000000000000000000000008131e29343f49545e69737d8791988e857c746b635c544e4c53585e6266696c6e6f707171706f6d6a67635e59534c4f565d656d757e8790988e847a70665b51463c31261b10040000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a26211a130a010000000000000000000006121f2b3744505c6875818d9aa69c8f837675818e9aa5988c8073675b4e4236333f4b5864717d8a96a29c8f837674818d99a69c9084776b5f53463a2e2215090000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201307111b252f38424c56606a737d87919ba5aea59c92887e756b61584e443b31271d140a000000000000000000020e1a25313d4955606c7884909ba7ada195897d72665a4e42362a1f13070404040404040404040404040404101c2834404c58636f7b87939faba89d9185796d61564a3e32261a0f03000000121e2b37434f5b666d6e6e6e6e6e6e6e6d675c5145392c201307131f2b37434f5a656d6e6e6e6e6e6e6b63584c4034281c100e1a2733404c57626b6e6e6e6e6e6e6e6e6a61564a3e3125180c0000000000000005111d28333d464e53555555555555555555555555555555555555555555555555545353514f4d4b4845423e3a35302b26201a140d06000000000000000000000000000000000000000000000000000000000205090b0e0f101010100f0d0b0905020000000105080a0c0d0d0d0c0a08050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161f272f363d44494f54585b5e60626363636362615f5d5b58554f473d32271b10040000000000000000000006121e2a35404a53595c5e6061616161615f5d5956514c463f38312921180f0600000000000000000000000000000000000000000000000000000000000d1925313d4955616c78848f9aa5b0a69b90867b71685f57504a45413e3c3b3a3a3b3c3e4144494f555c656d76808b95a0abaca1968a7f73685c5045392d211509000004101d2935414d5965717d8995a0acaca0958a7e746960564d463f393532302e2e2e2e2f3234383d444b535b656e79838e99a4b0a79c9085796d6155493d3125190c000006121e2b37434f5c6874808c97a3afa99d92867b70655b51484039332e2b2927262627282a2e32373d454d56606a74808b96a1adaa9f93877b6f64574b3f33271b0e02000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000000000020e19242f3a45505b66707a858f998f867c736a6259524a50575e64696e7276787b7c7d7d7d7d7b7976736f6a645e57504b535b636c757e8791968c82786d63584d42372c21160a000000000000000000000000000000000000000000010910161a1e1f20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201f1e1a1610090100000000000000000000000a16222e3b4753606c7885919da5998d8074727e8a97a39c8f83766a5e51453936424f5b6774808c99a5998c8073717d8a96a3a094877b6f62564a3e3125190d0000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130f19232d37414a545e68727c858f99a3ada79d938a80766c63594f463c32291f150b02000000000000000000000915212c3844505c67737f8b97a2aea69a8e82766a5f53473b2f231711111111111111111111111111111115212d3944505c6874808c98a4afa4988c8074695d5145392d21160a0000000013202c3946525f6c777b7b7b7b7b7b7b796d6154473b2e21140c1824303c48535f6b777b7b7b7b7b7b74685c5145392d21150f1c2835424e5b68747b7b7b7b7b7b7b7b7266594c4033261a0d000000000000000915222d39444f585f61616161616161616161616161616161616161616161616161605f5e5c5a5755514e4a46413c37312b251f18110a0200000000000000000000000000000000000000000000000004090e1215181a1c1d1d1d1c1b1a1815120e0a05080d111417191a1a1a181714120e0a0500000000000000000000000000000000000000000000000000000000000000000000000000000000030d161f28313941484f555b6064686b6d6f707070706f6e6c6a676561594f44382c201407000000000000000000000916222e3a46525c64696b6c6d6e6e6e6d6c6966615c57514a423b332a21180f0500000000000000000000000000000000000000000000000000000004101d2935414d5965717d8995a0acaca0958a7e746960564d463f393532302e2e2e2e2f3234383d444b535b656e79838e99a4b0a79c9085796d6155493d3125190c00000713202c3845515d6976828e9aa5b1a79b8f84786d62584e443c342e292523222121212325282d32394149535c67727d88939fabada195897d7165594d4135281c1003000915222e3a47535f6c7884909ca8b0a4988c8175695e54493f362e27221e1c1a1a1a1a1c1e21262c333b444e58636e7985909ca8b0a4988c8074685b4f43372a1e1105000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e12050000000000000000000000000008131f2a35414c57626d77828c9791877d736a6158504a525a62696f757a7e828587898a8a8a8a8886837f7b756f69615a5149515a626b757e8993948a7f74695f54493d32271c100500000000000000000000000000000000000000000000050a0e1113131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313110e0a05000000000000000000000000010d1926323e4a57636f7b8894a0a2968a7d716e7b8794a09f92867a6d6155483c3945525e6a7783909ca296897d706e7a87939fa3978b7e72665a4d4135291c100400000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201318212b353f49535c66707a848e97a1aba89e958b81776e645a51473d342a20170d03000000000000000000000004101c27333f4b57636e7a86929ea9ab9f93877b6f63574c4034281e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e25313d4955616d7985919ca8ab9f93877b7064584c4034291d11050000000013202c3946535f6c79868888888888887b6e6154483b2e2115111c2834404c5864707c888888888885796d6155493d3125190f1c2835424f5b687582888888888888807366594d4033261a0d000000000000000c1825313e4a56616a6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d6c6a696664615e5a56524d48423d373029231b140c0400000000000000000000000000000000000000000002090f151a1e21242728292a2a29282624211e1a151014191d2123252626262523211e1b1610090100000000000000000000000000000000000000000000000000000000000000000000000000010b151f28313a434b525a60666b7074777a7b7d7d7d7d7b7a787674716b6054483c2f231609000000000000000000000b1824313e4a56636e7577797a7b7b7b7a7875726d68625b544d453c332a21170e0400000000000000000000000000000000000000000000000000000713202c3845515d6976828e9aa5b1a79b8f84786d62584e443c342e292523222121212325282d32394149535c67727d88939fabada195897d7165594d4135281c1003000a16232f3c4854616d7986929eaaaea2968a7e73675c51463c322a221d19161514141516191c21272f37414b55606b77828e9aa6b2a69a8e8275695d5144382c1f1306000b1824313d4a56626f7b8894a0acaca094887c7064584d42372d241c16120f0e0d0d0e0f12151b2129323c47525d6874808b97a4b0a89c9084776b5f52463a2d211408000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e1205000000000000000000000000020d1925303b47525d68737e899494897f756b62584f4a535c646c747a81868b8e9294969797979695928f8b86817a736c635b5248505a636d76818b9591867b70655a4f43382d21160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935424e5a66737f8b98a49f93877a6e6b7884909da296897d7064584b3f3c4855616d7a86939f9f92867a6d6b7784909ca79b8e8276695d5145382c20140700000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2016202a333d47515b646e78828c969fa9aaa0968c83796f665c52483f352b22180e05000000000000000000000000000b17232f3a46525e6975818d99a5afa3978c8074685c5044382d2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a36424e5a66717d8995a1ada69a8e83776b5f53473c3024180c000000000013202c3946535f6c79869395959594887b6e6154483b2e211515212d3945515d6874818c95959595897d71665a4e42362a1e121c2835424f5b6875828f959595958d807366594d4033261a0d000000000000000d1a2633404c5966727b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a79777573706d6a66625d59534e48423b342d261e160e0600000000000000000000000000000000000000060d141a20252a2e313335363636363533312e2a26211c1f25292d303233333332302d2a27211b130a0100000000000000000000000000000000000000000000000000000000000000000000000009131d27313a434c555d646b71777c80848688898a8a8988878583817d7063574a3d3024170a000000000000000000000b1825323e4b5865717e8486878888888785827e79736d665e574e453c332920160c01000000000000000000000000000000000000000000000000000a16232f3c4854616d7986929eaaaea2968a7e73675c51463c322a221d19161514141516191c21272f37414b55606b77828e9aa6b2a69a8e8275695d5144382c1f1306000c1925323e4b5764707d8995a2aeab9f92867a6e62564b3f342a2018110d0a080707080a0c10161d252f39444f5a66727d8a96a2aeaa9e9285796d6054473b2e221509000d1a2733404c5965727e8b97a3b0a99d9084786c5f54483c31261b120b06030000000002050a1017202a35404c57636f7b8794a0acaca093877b6e6255493c3023170a000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000000007131e2a35414c58636e7a8590978c82776d63595048525c656e767e858c92979b9b98959493939496999b97928c857d756d645a5148515b656f79848e988d82766b6055493e32271b0f0300000000000000000000000000000000000001060a0c0d0d0d0d0d0d0d0c0a06010000000000000002070a0c0d0d0d0d0d0d0d0b0804000004080b0d0d0d0d0d0d0c0a0703000004080b0d0d0d0d0d0d0d0c0a060200000000000000000000000004070809090909090807050100000000000000000000000000000000000000000814202d3945515e6a76838f9ba79c9084776b6874818d99a5998c8074675b4f423f4b5864707d8996a29c8f83766a6874818d99a59e9286796d6154483c3023170b00000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201e28323c454f59636d76808a949ea8aba1988e847a71675d544a40362d23191006000000000000000000000000000006121e2a35414d5965717c8894a0aca89c9084786d6155493d373737373737373737373737373737373737373b47525e6a76828e9aa6ada1968a7e72665a4e43372b1f1307000000000013202c3946535f6c798693a0a2a194887b6e6154483b2e21151a26323d4955616d7985919da2a29a8e82766a5e52463a2e23171c2835424f5b6875828f9ca2a29a8d807366594d4033261a0d000000000000000d1a2633404d5966738088888888888888888888888888888888888888888888888786858482807d7a76726e69645f59534d463f38302820180f0600000000000000000000000000000000000710171f252c31363a3d40424343434341403d3a36322d272a3035393c3e4040403e3c3a37322c251c1309000000000000000000000000000000000000000000000000000000000000000000000006101b252f39434c565e676e767d83888c90939596979796959492908a7d7063574a3d3024170a000000000000000000000b1825323e4b5865717e8b939494959493918e8a857e78706860574e453b32281d1309000000000000000000000000000000000000000000000000000c1925323e4b5764707d8995a2aeab9f92867a6e62564b3f342a2018110d0a080707080a0c10161d252f39444f5a66727d8a96a2aeaa9e9285796d6054473b2e221509000e1b2734414d5a6673808c98a5b1a89b8f83766a5e52463a2e23180e060100000000000000040b131d27323e4955616d7986929eabada195887c6f63564a3d3124180b000f1c2835424e5b6774818d9aa6b3a69a8d8174685c4f43372b20140900000000000000000000050e19242f3b47535f6b7784909da9afa3968a7d7164584b3f3225190c000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e12050000000000000000000000000b17232f3b46525e6974808b9691867b70665b5147505a646e77808890979d99938f8b89878686888a8d91979d978f877f766c63594e49535d67727c879293887c71665a4f43372c2014080000000000000000000000000000000000060c1216191a1a1a1a1a1a1a1916120c060000000000070d1316191a1a1a1a1a1a191814100a0a101518191a1a1a1a1a1917130e080a101418191a1a1a1a1a1a1916120d07000000000000000000070c10141515151515151514110d08010000000000000000000000000000000000000b1724303c4855616d7a86929ea6998d81746865717d8a96a29c9083776a5e5245424e5b6774808c99a5988c80736764717d8a96a2a295897d7064584c3f33271b0e02000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2026303a444d57616b757e89929ca6aca3998f867c72685f554b42382e251b1107000000000000000000000000000000010d1925313c4854606c77838f9ba7ada195897d71655a4e4444444444444444444444444444444444444444444b57636f7b87929eaaa89d9185796d61564a3e32261a0e03000000000013202c3946535f6c798693a0aca194887b6e6154483b2e21151e2a36424e5a66727d8995a1adaa9e92877a6f63574b3f33271b1c2835424f5b6875828f9ca8a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d95959595959595959595959595959595959595959595949392908e8c8986827e7a75706a645e575049423a322a21180f06000000000000000000000000000000081119222930373d42464a4c4e4f50504f4e4c4a46423e3832353c4145494b4c4d4c4b4946433e372e251b1005000000000000000000000000000000000000000000000000000000000000000000010c17222c37414b555e68707981888e94989c9fa1a3a4a3a3a2a09e978a7d7063574a3d3024170a000000000000000000000b1825323e4b5865717e8b98a0a1a2a1a09e9a96908a827a726960574d44392f251a10050000000000000000000000000000000000000000000000000e1b2734414d5a6673808c98a5b1a89b8f83766a5e52463a2e23180e060100000000000000040b131d27323e4955616d7986929eabada195887c6f63564a3d3124180b00101c2936424f5c6875828e9ba7b2a5998c8073675a4e4235291d120600000000000000000000010b16212d3945515d6a76828f9ba8b0a4978b7e7265594c3f33261a0d00111d2a3743505d6976838f9ca8b1a4978b7e7265594c4033271b0f03000000000000000000000007131e2a37434f5c6874818d9aa7b2a5998c8073665a4d4034271a0e000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e1205000000000000000000000004101c2834404b57636e7a8691968a7f74695e54494d57626c768089929a9c958e88837e7c7a79797b7d81868c929a9991887e746a60564b4b55606b76818c978e82776b5f54483c3024180c000000000000000000000000000000000810181e22252626262626262625221e1810080000010a12191e23252626262626262624201b15151b212426262626262626231f1a13151b20242626262626262625221e181109000000000000020a12181d2022222222222222211d19130c0400000000000000000000000000000000020f1b2733404c5864717d8996a2a2968a7d7164616e7a87939f9f93867a6e61554845515e6a77838f9ca295897d7064616e7a86939fa5998d8174685b4f43372a1e1206000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c252e38424c565f69737d87919aa4aea49a91877d746a60564d433930261c130900000000000000000000000000000000000814202c38434f5b67737e8a96a2aea59a8e82766a5e52515151515151515151515151515151515151515151515c6873808b97a3afa4988c8074685d5145392d21160a00000000000013202c3946535f6c798693a0aca194887b6e6154483b2e2117232f3b47525e6a76828e9aa6b2afa3978b7f73675b4f43372c201c2835424f5b6875828f9ca8a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a1a1a09f9d9b9896928e8a86817b756f69625b544c443c332a21180f050000000000000000000000000007101a232b333b42484e5256595b5c5d5d5c5b5956524e49443d40474d5155585959595855534f4940372c21160a00000000000000000000000000000000000000000000000000000000000000000008131e29343e49535d67707a828b92999fa4a9aaa6a29f9d9c9c9c9d978a7d7063574a3d3024170a000000000000000000000b1825323e4b5865717e8b989c9c9d9fa2a6a6a19b948c847b72695f554b41372c22170c010000000000000000000000000000000000000000000000101c2936424f5c6875828e9ba7b2a5998c8073675a4e4235291d120600000000000000000000010b16212d3945515d6a76828f9ba8b0a4978b7e7265594c3f33261a0d00111e2b3744515d6a7783909da9b0a3978a7d7164584b3f3226190d01000000000000000000000005111d2935414e5a6773808c99a6b2a69a8d8174675a4e4134281b0e00121e2b3845515e6b7784919daaafa296897c7063564a3d3124180b000000000000000000000000020e1b2733404c5965727e8b98a5b1a79b8e8175685b4f4235281c0f000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000000814202c3844505c6874808b979084796e63584d48535e69747e88929b9c938b837c77726f6d6d6d6e71757a818890999a90877c72675d52474e5964707b869293887c7064594d4135291d1004000000000000000000000000000008121a22292e3233333333333333322e29221a1208000a131c232a2f3233333333333333302c261f1f272c31333333333333322f2b241d1f262c3033333333333333322f2a231b120900000000020b141c23292c2f2f2f2f2f2f2f2d2a241e160d0400000000000000000000000000000006121e2b37434f5c6874818d99a59f93877a6e615e6b7783909ca2968a7d7164584c4855616d7a86929f9f9286796d615e6a7783909ca89c9084776b5f53463a2e221509000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2d36404a545e68717b858f99a3aca69c92897f756b62584e443b31271e140a010000000000000000000000000000000000040f1b27333f4a56626e7a86919da9aa9e92877b6f635d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d606c7884909ca8ab9f93877b6f64584c4034291d110500000000000013202c3946535f6c798693a0aca194887b6e6154483b2e211c27333f4b57636f7b87939faaa8a8a79b9084786c6054483c30241c2835424f5b6875828f9ca8a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6aeaeaba5a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a4a4a6a8aaa8a5a29e9b96928c87817a746d655e564e453c332a21170e040000000000000000000000040e18222c353d454d53595e626568696969696765625e5a554f484a52585d616466666664625f5a52493e33271b0f0200000000000000000000000000000000000000000000000000000000000000030e19242f3a45505a656f79838c949ca4aaaba49e9a9692908f8f8f90918a7d7063574a3d3024170a000000000000000000000b1825323e4b5865717e8b908f8f9092969ba0a7a69e968e857b71675d53483e33281d12070000000000000000000000000000000000000000000000111e2b3744515d6a7783909da9b0a3978a7d7164584b3f3226190d01000000000000000000000005111d2935414e5a6773808c99a6b2a69a8d8174675a4e4134281b0e00121f2c3845525e6b7885919eabaea295887b6f6256493c3023170a000000000000000000000000000d1926323f4b5865717e8b97a4b0a89b8f8275685c4f4236291c1000121f2c3945525f6b7885929fabaea194887b6e6155483b2f221509000000000000000000000000000b1824313e4a5764707d8a96a3b0a99c8f8376695c5043362a1d10000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000000c1824303c4855616c788490968a7e73685c51464e5964707b86909a9d938a8178716b66636160606265696f767e87909a988e84796e63584d48535e6975818c988d8175695d5145392d2114080000000000000000000000000005101a242c343a3e404040404040403e3a342c241a1007111c252e353b3f4040404040403f3d3831292931383d4040404040403f3c362f262931383d3f4040404040403e3a352d241b11060000000a141d262e34393b3c3c3c3c3c3b39352f281f160c0100000000000000000000000000000915222e3a46535f6b7884909da99c9084776b5e5b6774808c99a5998d8174675b4f4b5864707d8996a29b8f83766a5e5b6774808c99a5a094877b6f63564a3e3125190d000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392f353f48525c667079838d97a1aba79d948a80766d635950463c32291f150c02000000000000000000000000000000000000000b16222e3a46515d6975818c98a4afa3978b80736a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a717d8995a0aca69a8e83776b5f53473b3024180c0000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e21202c3844505c6873808b97a3a09b9ba1a094887c7064584c4035291d2835424f5b6875828f9ca8a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b3aca29a9696969696969696969696969696969798999b9ea1a4a8aba7a29d98928c857e77706860574e453c332920160c02000000000000000000000b16202a343e474f575e656a6e72747676767574726f6b66605a52545c63696e71737373716e6b645a4f43372b1e12050000000000000000000000000000000000000000000000000000000000000008141f2a36414c57626c77818b959ea6aea8a099938e8986848282828385877d7063574a3d3024170a000000000000000000000b1825323e4b5865717e8483828284868a8f959ca4a8a0978d83796f655a4f453a2f24180d0200000000000000000000000000000000000000000000121f2c3845525e6b7885919eabaea295887b6f6256493c3023170a000000000000000000000000000d1926323f4b5865717e8b97a4b0a89b8f8275685c4f4236291c1000131f2c3946525f6c7986929facada194877a6e6154483b2e211508000000000000000000000000000a1724303d4a5663707c8996a2afa99c908376695d5043372a1d100013202c3946535f6c7986929facada094877a6d6054473a2e211407000000000000000000000000000916232f3c4956626f7c8895a2afaa9d9084776a5d5044372a1d11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000030f1b2834404c5965717d89959185796e62574b47535e6a76818c97a0968b81786f67605a5654535355595e646c757e88929d968b80756a5f53484d5864707b87939185796d6155493d3024180b000000000000000000000000000b17222c363e454a4d4d4d4d4d4d4d4a453e362c22170d18232e3740464b4d4d4d4d4d4d4c49433b32323b43494c4d4d4d4d4d4b4741382f323b43494c4d4d4d4d4d4d4b463f372d23180c010005111b262f383f454848484848484846413a31281e130800000000000000000000000000000d1925313e4a56636f7b8794a0a6998d8174685b5864707d8995a29c9083776b5e524e5b6773808c99a5988c8073675a5864707d8995a2a3978b7e72665a4d4135291c10040000000000000013202c3946535f6c798693a0acaca09386796c5f534841393d47515a646e78828c959fa9a89f958b82786e645b51473e342a21170d03000000000000000000000000000000000000000006121d2935414d5864707c88949faba89c9084787777777777777777777777777777777777777777777777777777828d99a5ada1958a7e72665a4e42372b1f13070000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e2125313d4854606c7884909ca1968f8f98a3998d8175695d5145392d212835424f5b6875828f9ca8a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b3a79b908a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b8d8f9194989ca0a5aba9a39d979089827a726960574e453b32281e130900000000000000000006111c27323c465059616970767a7e8182838382817e7b76716b645d5d666e757a7d8080807d7b766b5f5346392d201306000000000000000000000000000000000000000000000000000000000002050e1925303c47525d68737e89939da7b0a89e968f88827d797776757576787a7b7063564a3d3024170a000000000000000000000b1825313e4b5764707877767575777a7e848a929aa2a89f958b81766c61564b40352a1e130800000000000000000000000000000000000000000000131f2c3946525f6c7986929facada194877a6e6154483b2e211508000000000000000000000000000a1724303d4a5663707c8996a2afa99c908376695d5043372a1d100013202c3946535f6c7986939facada093877a6d6053473a2d201407000000000000000000000000000916222f3c4855626f7b8895a2aeaa9d9084776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201407000000000000000000000000000815222f3b4855616e7b8895a2aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e12050000000000000000000006121f2b3744505c6975818d998d8175695d51464b57636f7b87929e9a8f84796f665d554f4a474647494d535a636c76818b95928e867b7064574b48535f6b77838f968a7d7165594c4034271b0f02000000000000000000000004101c28333e485056595959595959595650483e33281c121e2a353f49515759595959595959544d44393a444d5459595959595958524b413639444d54595959595959595751493f34291d1105000b16222d38414a5154555555555555524c433a2f251a0e0300000000000000000000000004101c2935414d5a66727e8b97a3a3968a7d71645855616d7986929f9f93877a6e6155515e6a76838f9ca295897c70645754616d7986929fa79b8e82766a5d5145382c2014070000000000000013202c3946535f6c798693a0acaca09386796c625a524b43454f59626c76808a949da7aaa0968d83796f665c52493f352c22180f05000000000000000000000000000000000000000000010d1924303c48545f6b77838f9aa6aca0958984848484848484848484848484848484848484848484848484848487929eaaa89c9185796d61554a3e32261a0e030000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e212935414d5965717d8994a09e92858793a09d9185796d61564a3e32262835424f5b6875828f9ca8a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7e808285888b90949a9fa5aca8a29b938c847b726a60574d443a2f251b100600000000000000000c17232e39444e58626b737b81878b8d8f90908f8d8b87827c766e66656f7880868a8c8d8c8a86796d6053463a2d201307000000000000000000000000000000000000000000000000000004080b0f11141f2a36414d58636f7a85909aa5afa89f958c847d76716d6a6968696a6b6e6f695f53473b2f221609000000000000000000000a16232f3b48535e676c6b6969696a6e727980889099a3a79d93887d73685d51463b3024190d0200000000000000000000000000000000000000000013202c3946535f6c7986939facada093877a6d6053473a2d201407000000000000000000000000000916222f3c4855626f7b8895a2aeaa9d9084776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815222e3b4855616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e1205000000000000000000000915222e3a4753606c78859195897c7064584c434f5b6874808c98a094897d72685d544b433e3b3a3a3c4148515a646f7a858986827e7a7164584b424e5a66727e8b978d8175685c5043372a1e110500000000000000000000000714202c38444f5a6266666666666666625a4f44382c2016222e3a46515b63666666666666655f564b40404b565f656666666666645d53483c404b565f65666666666666635b50453a2e211509000f1b27333e49545c616262626262625d564c41362b2014090000000000000000000000000713202c3845515d6976828e9ba79f93877a6e6155515e6a76838f9ba2968a7d71655854616d7986929f9e9286796d6154515e6a76838f9ba89e9286796d6155483c3023170b0000000000000013202c3946535f6c798693a0acaca093867b746c645d554d4d57616b747e88929ca6aba2988e857b71675e544a40372d231a100600000000000000000000000000000000000000000000000814202b37434f5b66727e8a96a2ada59b939191919191919191919191919191919191919191919191919191919299a3aea4988c8074685c5145392d21160a000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e222e3a46525d6975818d99a59b8f8284909da2968a7e72665a4e42362a2835424f5b6875828f9ca8a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f727070707070707070707070707071727375787b8084898e949aa1a8ada59e968d857c72695f554b41372c22170c0100000000000004101c28343f4a55606a747d858c92979a9c9d9d9c9a97938e8881786f6c77818a9196999a999386796d6053463a2d201307000000000000000000000000000000000000000000000003080c1014181b1e20242f3b47525e6975808b96a1acaba1978d837a726b65615e5c5b5c5d5f61625e574d42372b1f13070000000000000000000007131f2b37424c555c5f5e5d5c5c5e62676e767e87919ba5a49a8f84796e63574c41352a1e130700000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815222e3b4855616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e1205000000000000000000000b1824313d4a56636f7b88949185796c60544846535f6b7884909c9b9084786c61564b4239322e2d2d30363f48535d68737f7d7976726e695f54483e4a56626e7b87939184786b5f5246392d20140700000000000000000000000916232f3c4855616c737373737373736c6155483c2f231825313e4a57636d73737373737371675c504345515c687173737373736f64594d4143505c67717373737373736d62564a3d3124170b00111e2a37434f5b666d6f6f6f6f6f6e685d52473c31251a0f0300000000000000000000000b17232f3c4854616d7985929ea99c9084776b5e524e5a6773808c98a4998d8174685b5764707d8995a29b8f83766a5d514e5a6773808c98a5a295897d7164584c4033271b0f0200000000000013202c3946535f6c798693a0acaea2978d867e766e675f57555f69737c87909aa4ada39990867c72695f554c42382e251b1108000000000000000000000000000000000000000000000000030f1b27323e4a56626d7985919da8ada49f9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea3abab9f93877b6f64584c4034281d1105000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e27323e4a56626e7a86929ea4988c7f818d99a69a8e82766a5f53473b2f2835424f5b6875828f9ca8a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f7265636363636363636363636363646567696c6f73787d838990979ea6aea89f978e857b71675d53493e34291e13080000000000000815212d3944505c67727c868f979ea29c9793929192939699928a8278727d89939ca29d97949386796d6053463a2d201307000000000000000000000000000000000000000000040a0f14181d2124272a2d2f34404c58636f7a86919da8afa49a8f857b7168615a55514f4f4f50525555534d453b31261a0f0300000000000000000000030f1a25303a434b505251504f4f51565c646c757f89939da8a1968a8074695d52463b2f24180d01000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e1205000000000000000000000d1a2633404c5965727e8b978e8275695d50444956626e7b8794a0988b7f73675b50443a3027222021252d36414c57626d73716d6966625e574d433a46525f6b77849094877a6e6155483c2f23160900000000000000000000000a1724303d4a5763707d80808080807d7063574a3d30241926323f4c5965727f8080808080786b5e51454955616d79808080808075695d524645515e6b7880808080807e7165584b3e3225180b00121f2c3945525f6b777b7b7b7b7b7a6f64594d42372b1f140800000000000000000000020e1a27333f4b5864707c8995a1a6998d8174685b4f4b5763707c8995a19c9084776b5e5a6773808c98a4988c8073675a4e4b5764707c8995a1a5998d8174685c4f43372b1e120600000000000013202c3946535f6c798693a0acb3a89f98908881797169615d67717b858f98a2aca49b91877d746a60574d433a30261d130900000000000000000000000000000000000000000000000000000a16222e3945515d6974808c98a4afafabaaa7a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a6aaabaeb2a69a8e82766b5f53473b2f24180c00000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e2b37434f5b67737e8a96a2a195887c7d8a96a29f93877b6f63574b3f332835424f5b6875828f9ca8a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f726559565656565656565656565657585a5c5f63676c72777e858c949ca5aea9a0978d83796f655a50453a2f24190e0300000000000c1825313d4955616d78838e98a1a198918b87858485878a8e93948a8176838f9aa59c938c878786796d6053463a2d20130700000000000000000000000000000000000000040a10151b2024292d303437393c3e45515c6874808b97a2aea99e93887d73695f564f49454342434446484947423b33291f150900000000000000000000000009141e28313940444645434343454b525a636d77818c96a1a79c91857a6e63574c4035291d1206000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e1205000000000000000000000f1c2835424e5b6774818d988c7f73665a4d414b5865717d8a97a194887c6f63574b3f33281e1613141b252f3a46515b636765615d5956524d453c36434f5c6875818e96897d7064574a3e3125180b00000000000000000000000a1724303d4a5763707d8a8d8d8d8a7d7063574a3d30241926323f4c5965727f8c8d8d8d85786b5e51454e5a66727d898d8d8d867a6e62564b45515e6b78858d8d8d8b7e7165584b3e3225180b00121f2c3845525e6a75808888888881756a5e53483c3024180d0100000000000000000005111e2a36434f5b6774808c99a5a3968a7d7165584c4754606d7985929e9f93877a6e625e6a76838f9ca195897c7063574b4854606d7986929ea99c9084786b5f53473a2e22160900000000000013202c3946535f6c798693a0acb9b1a9a29a928b837b736c666f79838d97a1aaa69c92897f756b62584e453b31281e140b01000000000000000000000000000000000000000000000000000005111d2935404c5864707b87939fabb6aea49c98989898989898989898989898989898989898989898989aa1abb6ada195897d72665a4e42372b1f130700000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e303c47535f6b77838f9ba79e9185797a86929ea3978b8073685c5044382c35424f5b6875828f9ca8a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f7265594c4a4a4a4a4a4a4a4a4a4a4a4c4e5053575b61666c737a828a939ca5aea89f958b81776c61574c41362b1f140900000000000f1b2834404d5965717d8995a0a4998f86807a7877787a7d82888f92887d86929fa2968b817b7a7c796c6053463a2d201307000000000000000000000000000000000001080f151b21262c3035393d404346484a4c55616d7985919ca8afa4988d82766c61574d443d3936353637393b3c3a36312921170e03000000000000000000000000020d161f272e34373938373636394048515b656f7a85909ba6a2968b8074685d51463a2e23170b000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000111d2a3743505d6976838f968a7d7064574b414d5a6673808c999e9285796c6053473b2f23170c0709131e29343f4951575a5855514d4a46413b3334404d5966727f8c988b7e7265594c3f3326190d00000000000000000000000a1724303d4a5763707d8a979a978a7d7063574a3d30241926323f4c5965727f8c999a9285786b5e5147535f6b76828e9a9a968b7e73675b4f45515e6b7885929a988b7e7165584b3e3225180b00111d2936424e59636e79848f9592877b7064584d4135291d11050000000000000000000915212d3a46525f6b7784909ca89f93877a6e61554944515d6976828e9ba3968a7d7165616d7986929f9e9285796d60544845515d6a76828f9ba7a094877b6f63564a3e3225190d00000000000013202c3946535f6c798693a0acb9b0a9a5a49c958d857d766e77818b959fa9a79d948a81776d635a50463c33291f160c02000000000000000000000000000000000000000000000000000000000c1824303c47535f6b76828e9aa6b2a89c928b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8f9aa5b2a89c9185796d6155493e32261a0e0200000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e34404c5864707c88949fa69a8e827576828e9ba79c9084786c6054483c3035424f5b6875828f9ca8a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f7265594c3f3d3d3d3d3d3d3d3d3d3e3f4144474b50555b61697078818a939ca6b0a79d93897e73685d52473c30251a0e0200000000111d2a3643505c6975818e9aa69e93887d746e6b6b6b6e71767d848d8e838794a19e9285796f6d7070685d5145382c1f120600000000000000000000000000000000050c131a20262c32373c4145494c50525557595a66727d8a95a1adaa9e93877b70655a4f46423e39342f292a2d2f2f2e2a251f170f060000000000000000000000000000040d161d23282b2c2b2a29292e363f49535e68737e8a95a0a89c9185796e62564b3f33271c10040000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000121e2b3845515e6b77849194887b6e625549424f5b6875828e9b9d9083776a5d5144382b1f130600010d18232d373f464b4d4c4845413d3a363029323e4b5764717d8a978d8173675a4d4134271b0e00000000000000000000000a1724303d4a5763707d8a97a4978a7d7063574a3d30241926323f4c5965727f8c999e9285786b5e514c57636f7b87939fa69b8f84786c605448515e6b7885929e988b7e7165584b3e3225180b000d1a25313c47525d68737e8994988c8175695d5145392d2115080000000000000000000c1825313d4956626e7a87939fa99c9084776b5e5246414d5a66727e8b97a4998d81746864707c8995a29b8f82766a5d5144414e5a66737f8c98a4a3978b7e72665a4e4135291d1004000000000013202c3946535f6c798693a0acb2a89e98989e9f978f888078808a939da7a99f958c82786e655b51483e342a21170d04000000000000000000000000000000000000000000000000000000000007131f2b37424e5a66727d8995a1ada79a8d817e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e8a97a4afa3988c8074685c5145392d21150a0000000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e3945515d6874808c98a4a3968a7e72727e8b97a3a094897c7165594d413535424f5b6875828f9ca8a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f7265594c3f323030303030303030313234373b3f444a50575e666f77818a949ea8afa59a90857a6f64584d42362b1f130800000000121f2b3845525e6b7784919da79a8e82766b635f5e5f61666b727a838d8e9099a49c8f8276696064645e564b4034281c1004000000000000000000000000000000070f161e252b32383d43484d5155595c5f616465676a76828e9aa6b2a69a8e82766b5f5956524e49453f3a342e272222211e1a140d0500000000000000000000000000000000040b12171c1e1f1f1d1c1d242d37414c57626d78848f9ba6a1968a7e73675b5044382c2015090000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000121f2c3945525f6c78859293877a6d60544743505c6976838f9c9b8f8275695c4f4236291d1003000006111b252d353b3f403f3c3935312d2a2523303d4956636f7c89968e8175685b4e4235281b0f00000000000000000000000a1724303d4a5763707d8a97a4978a7d7063574a3d30241926323f4c5965727f8c999e9285786b5e51505c6874808c98a3a8a094887c7165594d515e6b7885929e988b7e7165584b3e3225180b000915202b36404b56616c78848f9b9185796d6155493d3124180c0000000000000000030f1c2834414d5965727e8a97a3a6998d8174685b4f433e4a56636f7b8894a19c9084776b6773808c98a4988c7f73665a4e413e4a57636f7c8895a1a79b8e82766a5d5145392c201408000000000013202c3946535f6c798693a0acaea2968d8c959ea19a928a8288929ba5aaa0978d837970665c53493f362c22180f05000000000000000000000000000000000000000000000000000000000000030e1a26323e4955616d7985909ca8a99d9185797171717171717171717171717171717171717176828e9aa6ab9f93877b6f63584c4034281c11050000000000000000000013202c3946535f6c798693a0aca194887b6e6154483b313d4955616d7985919da99f93877a6e6e7a87939fa5998d8175695d51453a35424f5b6875828f9ca8a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f7265594c3f3226232323232323232426282b2f33383f454c545d656f78828c97a1acaca1968b8075695e53473b3024180c0000000013202c3946535f6c7986929fa4988b7e72665a525152555a6169717b85909ba2a79a8e8174675b5757534c443a2f24180c00000000000000000000000000000109111921282f363d43494e54595d6165686b6e707273757a86929eaaada195897d716b6865625e5a55504b453f39322b241d150e090300000000000000000000000000000000000001070c0f1213121010121b25303a45505c67737e8a96a1a79b8f84786c6055493d3125190d0200000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e12050000000000000000000013202c3946535f6c7986939386796c5f534644505d6a7783909d9b8e8174675b4e4135281b0e0200000009131b232a2f323433302c2925211e19222f3c4855626f7b88958f8275685b4f4235291c0f00000000000000000000000a1724303d4a5763707d8a97a4978a7d7063574a3d30241926323f4c5965727f8c999e9285786b5e5155616d7985909c9e9b9e998d81756a5e52515e6b7885929e988b7e7165584b3e3225180b00040f19242f3a45505b67727e8a96968a7e7165594d4034281b0f020000000000000007131f2c3844505d6975828e9aa6a3968a7d7165584c3f3b4753606c7885919da093877a6e6a76838f9ba195887c7063574a3e3b4754606c7985919eaa9e9286796d6155483c3024170b000000000013202c3946535f6c798693a0acaca09386838c959ea49c948e919aa4aba2988e857b71685e544a41372d241a100700000000000000000000000000000000000000000000000000000000000000000a15212d3945505c6874808c97a3aea2968a7e7266656565656565656565656565656565656f7b87939faba69a8e82766b5f53473b2f24180c000000000000000000000013202c3946535f6c798693a0aca194887b6e6154483b36424e5a66727d8995a1a79b8f83776a6a77838f9ba79d92867a6e62564a3e35424f5b6875828f9ca8a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f7265594c3f32261917171717171718191c1f23282d343b424b535d66707a858f9aa5b0a89d91867b6f63584c4035291d110500000013202c3946535f6c798693a0a4978a7d7063574a4446494f575f69737e8995a1a79a8e8174675a4d4a47423b32281d120700000000000000000000000000010a131b232b333a41484e545a5f64696d7175787a7d7e8182828a96a2aeab9e92857c7a7875726e6a66615c56514a443d362e271f160e0500000000000000000000000000000000000000000000000000000109131e29343f4a56626d7985919ca8a094897d7165594d42362a1e120600000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e12050000000000000000000013202c3946535f6c7986939286796c5f524644505d6a7784909d9a8e8174675a4d4134271b0e01000000010911191e2326272624201c19151115222e3b4855616e7b88958f8275695c4f4236291c0f00000000000000000000000a1724303d4a5763707d8a97a4978a7d7063574a3d30241926323f4c5965727f8c999e9285786b5e515a65717d89959d938e939d92867a6e6357515e6b7885929e988b7e7165584b3e3225180b000008121d28333f4a56626e7986929a8e8175695c5043372a1e1105000000000000000a16232f3b4754606c7985919eaaa093877a6e6255493c3744505c6975818e9aa3968a7d716d7986929e9e9285796c6054473b3844505d6975828e9ba7a295897d7164584c4033271b0f020000000013202c3946535f6c798693a0acaca093867a838c969fa69f9b9ca3aca39990867c73695f564c42382f251b120800000000000000000000000000000000000000000000000000000000000000000005111c2834404c57636f7b87939eaaa69a8f83776b5f585858585858585858585858585c6874808c97a3ada195897d72665a4e42362b1f1307000000000000000000000013202c3946535f6c798693a0aca194887b6e6154483b3b47525e6a76828e9aa6a3978b7f736666727e8a96a2a2968a7e72665a4e4337424f5b6875828f9ca8a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f7265594c3f3226190c0a0a0a0a0a0b0d0f12171c22293039414b545e69737e89949faaaea3978c8074695d5145392d21150900000013202c3946525f6c7985929fa4978a7d7064574a43403f454d57626d7884909da79a8e8174675a4d413b37302920160c01000000000000000000000000010a131c252d353d444c52595f656b7075797d818487898b8d8e8f929ba6b2aca0948b898784817e7a76726d68625c554f484039312820170f050000000000000000000000000000000000000000000000000000020c17232e3a45515d6874808c98a4a5998d82766a5e52463a2e23170b00000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e12050000000000000000000013202c3946535f6c7986939386796c5f534644505d6a7784909d9a8e8174675b4e4134281b0e01000000070f171d2226282826231f1c18151115222f3c4855626e7b88958f8275685c4f4236291c0f00000000000000000000000a1724303d4a5763707d8a97a4978a7d7063574a3d30241926323f4c5965727f8c999e9285786b5e525e6a76828e9a988c818c98978b7f73675c515e6b7885929e988b7e7165584b3e3225180b00030e19242d363e45515d6975828e9a9184786b5f5246392c201307000000000000010e1a26323f4b5764707c8895a1a99c9084776b5e52463934404d5965727e8a97a3998d8174707c8995a19b8e8276695d51443835414d5a66727e8b97a4a5998d8174685c4f43372b1e12060000000013202c3946535f6c798693a0acaca09386797a848d969fa8a7a8ada59b91887e746a61574d443a30261d130900000000000000000000000000000000000000000000000000000000000000000000000c18232f3b47535e6a76828e9aa5ab9f93877b6f64584c4b4b4b4b4b4b4b4b4b4b55616c7884909ca8a89c9085796d6155493e32261a0e02000000000000000000000013202c3946535f6c798693a0aca194887b6e6154483b3f4b57636f7b87939eaa9e92867a6f63626e7a86929ea79b8f83776b5f53473b424f5b6875828f9ca8a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f7265594c3f3226190c0000000000000003060b11171f272f39424c57616c77828e99a5b0a89d9185796d6155493d3125190d010000121f2b3845515e6a7784909da5988c7f73675b534f4d4b4a4a505c6874818d9aa69a8e8174675a4d41342b251f170e04000000000000000000000000000a131c252e363f474f565d646b71767c81858a8d919396989a9b9c9ea4adb4b1a69d979593918e8a87827d78736d676059524a433a322921170e05000000000000000000000000000000000000000000000000000006121d2934404c58646f7b8793a0aa9e92867a6e63574b3f33271b0f03000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000131f2c3946525f6c79859293867a6d60534743505d697683909c9b8e8275685b4f4235281c0f02000006101921282e323535322f2b2824211d1823303c4956626f7c89958e8275685b4f4235281c0f00000000000000000000000a1724303d4a5763707d8a97a4978a7d7063574a3d30241926323f4c5965727f8c999e9285786b5e57636f7b87939e94887c87939c9084786c60555e6b7885929e988b7e7165584b3e3225180b0008141f2b353f484f545966727e8b9893877a6d6154483b2e22150800000000000005111d2a36424e5b6773808c98a4a6998d8174685b4f4336313d4956626e7b8794a09c908477737f8c98a4988b7f73665a4d4135313e4a56636f7b8894a1a99c9084786b5f53473a2e2216090000000013202c3946535f6c798693a0acaca0938679717a848d96a0a9b2ab9e93897f756c62584f453b32281e150b01000000000000000000000000000000000000000000000000000000000000000000000007131f2a36424e5a65717d8995a1aca4988c8074685c50453e3e3e3e3e3e3e424d5965717d8995a1ada3988c8074685c5045392d21150900000000000000000000000013202c3946535f6c798693a0aca194887b6e6154483b44505c6773808b97a3a69a8e82766a5e5d6975818d99a59f93877b6f63584c40424f5b6875828f9ca8a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f7265594c3f3226190c06060606060606060604060d151d27303b45505b66717c88949fabada2968a7e72665a4d4135291d10040000101d2a36434f5c6875818d99a59b8f83786d645f5c59585756565965727f8c98a59a8e8174675a4d4134271a140d050000000000000000000000000008121c252e374048515960686f767c82888d91969a9da0a2a5a6a8a9a8a8a7a8a8a9a8a4a2a09d9a97938e89847e78726b645c554c443b332920170d030000000000000000000000000000000000000000000000000006121e2935414d5965707c8894a0ada3978b7f73675b4f43382c201408000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000121f2b3845515e6b78849194887b6e615548424f5c6975828f9b9c8f8376695d5043372a1d110400020d18222b333a3f41413f3b3834312d292324313e4a5764707d8a968d8174675a4e4134281b0e00000000000000000000000a1724303d4a5763707d8a97a4978a7d7063574a3d30241926323f4c5965727f8c999e9285786b5e5c6874808b979b8f8377838f9a95897d7165595e6b7885929e988b7e7165584b3e3225180b000c1824303c47515a6062636f7c899595887c6f6256493c3023160a0000000000000814212d3946525e6a77838f9ca8a3968a7d7165584c40332e3a46535f6b7884909d9f93877a75828e9ba195887c6f63574a3e322e3b4753606c7885919daaa094877b6f63564a3e3225190d0100000013202c3946535f6c798693a0acaca09386796c727b848e97a0a9aa9d90847a71685f564d443b32291f160d040000000000000000000000000000000000000000000000000000000000000000000000020e1a26313d4955616c7884909ca7a89c9185796d6155493d32323232323a46525e6a76828e99a5aa9f93877b6f63584c4034281c110500000000000000000000000013202c3946535f6c798693a0aca194887b6e6154483d4854606c7884909ca8a195897d71655a5965717d8995a1a4988c8074685c5044424f5b6875828f9ca8a69a8d807366594d4033261a0d0000000000050a0e1a2633404d596673808d9aa6b2a6998c7f7265594c3f32261913131313131313131312100c080b151f29333e4955606b77838f9ba7b2a69a8e82766a5d5145392c20140700000e1b2734404c5965717d89949fa094897f76706b6866656363636265727e8c98a59a8e8174675a4d4134271a0e020000000000000000000000000006101a242e374049525a636b727981878d93989da2a6a9a8a5a29f9d9c9b9b9a9b9b9c9ea0a2a5a8a6a39f9a95908a837d766e665e564d453b32291f150b010000000000000000000000000000000000000000000000000b16222e3a46525d6975818d99a5b1a79b9084786c6054483c3024180d010000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000111e2a3744505d6a76839096897c7063574a414e5b6774818d9a9d9184786b5e5245392d2014080508141f2a343d454b4e4e4b4744403d39342e2733404c5965727e8b988c7f7266594c4033261a0d00000000000000000000000a1724303d4a5763707d8a97a4978a7d7063574a3d30241926323f4c5965727f8c999e9285786b5e616c7884909c968b7e737e8a96998e82766a5e5e6b7885929e988b7e7165584b3e3225180b000e1b2834404d58636c6f6f6f7a8794968a7d7064574a3d3124170b0000000000000c1824303d4955626e7a86939faba093877a6e6255493c302a37434f5c6874818d99a296897d7884919d9e9185796c6053473b2e2b3744505c6975828e9aa7a3978b7e72665a4e4135291d100400000013202c3946535f6c798693a0acaca09386796c69727b858e97a0a9a0968d847a71685f564d443b31281f160d0400000000000000000000000000000000000000000000000000000000000000000000000915212d3844505c68737f8b97a3ada195897d71665a4e42362a2527333f4b57636e7a86929eaaa69a8e82766a5f53473b2f23180c0000000000000000000000000013202c3946535f6c798693a0aca194887b6e615448414d5965717d8994a0a89c9185796d615554606c7884909ca89c9084786c615549424f5b6875828f9ca8a69a8d807366594d4033261a0d000000010910161a1e2633404d596673808d9aa6b2a6998c7f7265594c3f3226202020202020202020201f1c18130d0d17222d38434f5b66727e8a96a2aeaa9e9286796d6154483c2f23170a00000b1824303c4854606c77838d97a19b9188817b7875737170706f6f6f727e8c98a59a8e8174675a4d4134271a0e01000000000000000000000000030e18222c364049525b646c757c848b92999fa4a9aaa4a09c989593918f8e8e8e8e8f90919396999ca0a5aaa6a19b958e87807870685f574d443b31271d13090000000000000000000000000000000000000000000000030f1b27333f4b56626e7a86929ea9b5aca094887c7064594d4135291d11050000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e1205000000000000000000000f1c2935424f5b6874818e988b7e7265594d404c5966727e8b989f93867a6d6155483c3025191312131a25303b464f565a5b5754504d49453f382f36424f5b6874818d978a7d7164584b3e3225180c00000000000000000000000a1724303d4a5763707d8a97a4978a7d7063574a3d30241926323f4c5965727f8c999e9285786b5e65717d89959e92867a6e7985919d92877b6f635e6b7885929e988b7e7165584b3e3225180b00101c2936434f5c69757b7b7b7b8793988b7e7164584b3e3225180b0000000000030f1b2834404c5965717d8a96a2a99c9084776b5e5246392d2733404c5865717d8a96a2988c807a8794a09b8e8275695d5044382b2834414d5966727e8b97a3a79b8e82766a5d5145392c20140800000013202c3946535f6c798693a0acaca09386796c6069727c858e97a0a89f968d837a71685f564d433a31281f160d040000000000000000000000000000000000000000000000000000000000000000000004101c28343f4b57636f7a86929eaaa69a8e82766a5e52473b2f232c38444f5b67737f8b97a3ada195897d71665a4e42362b1f13070000000000000000000000000013202c3946535f6c798693a0aca194887b6e61544846525d6975818d99a5a4988c8074685c50505c6874808c98a4a195897d7165594d424f5b6875828f9ca8a69a8d807366594d4033261a0d0000010a131a21262a2c33404d596673808d9aa6b2a6998c7f7265594c3f322c2c2c2c2c2c2c2c2c2c2c2b29241e170f101c27333e4a56626e7a86929fabaea295897d7064584b3f3226190d00000814202c38444f5b66717b858f979e9a938c888481807e7d7d7c7c7b7b7e8c98a59a8e8174675a4d4134271a0e010000000000000000000000000b15202a343e48525b646d767e878e969da4aaaaa49e9994908c898684838281818182838587898c9094999ea4aaa6a099928a827a71695f564d43392f251b1006000000000000000000000000000000000000000000000814202c38434f5b67737e8b96a2aeb8b0a5998d8175695d5145392d22160a0000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e1205000000000000000000000e1a2734404d5966727f8b988e8175685c50434a5763707c8995a296897d7165594d41362b23201e1f242c36414d5861676764605c5955514941363945525e6a77839094887b6f6256493c3023170a00000000000000000000000a1724303d4a5763707d8a97a4978a7d7063574a3d30241926323f4c5965727f8c999e9285786b5e6a76828e99998d81756975818d99978b8074685e6b7885929e988b7e7165584b3e3225180b00101c2936434f5c6976838888888b95988b7e7265584c3f3225190c000000000006121f2b3744505c6875818d9aa6a6998d8174685b4f43362a24303c4955616e7a87939f9b8f827d8a96a3978b7e72665a4d41342825313d4a56626f7b8794a0aa9e9286796d6155483c3024170b00000013202c3946535f6c798693a0acaca09386796c5f606a737c858e98a1a89f958c837a71685f564d433a31281f160d04000000000000000000000000000000000000000000000000000000000000000000000b17232f3b46525e6a76828d99a5aa9e93877b6f63574b3f3328303c4854606c7884909ba7a89c9085796d6155493d32261a0e020000000000000000000000000013202c3946535f6c798693a0aca194887b6e6154484a56626e7a86929ea99f93877b7064584c4b57636f7b87939fa5998d82766a5e52464f5b6875828f9ca8a69a8d807366594d4033261a0d000009131c252c32373939404d596673808d9aa6b2a6998c7f7265594c3f3939393939393939393939393835302921180e16222e3a46525e6a76838f9ba8b1a5998c8073675a4e4135281c0f020004101c27333e4a555f6a737c858c93989d9894908e8c8b8a8a89898888888e9aa69a8e8174675a4d4134271a0e01000000000000000000000007121c27313c46505a646d7680889099a0a8aea69f99938d8884807c7a7776757474747576787a7d8084888d93999fa6aba49c948c847b71685f554b41372d22170d020000000000000000000000000000000000000000010d1925303c4854606c77838f9ba7aeacada99d9185796e62564a3e32261a0e0200000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e1205000000000000000000000c1825313e4a5763707c89959184786c5f53474854616d7986929e998d8175695e52473d352f2c2b2c2f353e48535e697373706c6965625b52483d3d4955616e7a86939185796c6053473a2e21150800000000000000000000000a1724303d4a5763707d8a97a4978a7d7063574a3d30241926323f4c5965727f8c999e9285786b636e7a86929e94887c7165707c88949c9084786d616b7885929e988b7e7165584b3e3225180b00101c2936434f5c697683909595969d988c7e7265584c3f3225190c00000000000a16222e3b4753606c7885919da9a3968a7d7165584c403327212d3946525e6b7783909c9e9185808c99a194887b6f63564a3e3125212e3a47535f6c7884919da9a296897d7164584c4033271b0f02000013202c3946535f6c798693a0acaca09386796c5f57616a737c868f98a1a89e958c837a71685f554c433a31281f160d0400000000000000000000000000000000000000000000000000000000000000000006121e2a36424d5965717d8894a0aca3978b8073685c5044382c35414d5965707c8894a0aca3978c8074685c5044392d211509000000000000000000000000000013202c3946535f6c798693a0aca194887b6e6154484f5b67727e8a96a2a79b8f83776b5f534747535f6b77838f9ba79e92867a6e62564a4f5b6875828f9ca8a69a8d807366594d4033261a0d0005101a252e373e434646464d596673808d9aa6b2a6998c7f7265594c4646464646464646464646464645413a332a2015111d2935424e5a6773808c98a5b1a89b8f8276695d5043372a1e110400000b16222d38434d58616a737b82888c919496989999989796969695959498a0a79a8e8174675a4d4134271a0e0100000000000000000000020d18232e39434e58626c767f89929aa2aaaca49c958e87827c7773706d6b6968676767686a6b6e7074787c82878e959ca4aca69e968d847a71675d53493e34291e1309000000000000000000000000000000000000000006121d2935414d5965707c8894a0aaa39fa0a6a2968a7e72665a4e43372b1f130700000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e1205000000000000000000000916222f3b4854606d79869294887b6f63574b45515d6976828e9a9d91867a6f64594f47403b3938393b4047505a646f7a807c7875716d64594d41414d5965717d8a968e8276695d5044382b1f120600000000000000000000000a1724303d4a5763707d8a97a4978a7d7063574a3d30241926323f4c5965727f8c999e9285786b67737f8b979b8f84786c606c78848f9b95897d71666b7885929e988b7e7165584b3e3225180b00101c2936434f5c697683909ca2a3a5988c7e7265584c3f3225190c00000000010d1926323e4a57636f7b8894a0aca093877a6e6255493d30241d2a36424f5b6774808c99a19488838f9b9e9185786c6053473b2e221e2b3743505c6875818d9aa6a5998d8174685c4f43372b1e1206000013202c3946535f6c798693a0acaca09386796c5f5358616a737d868f98a2a79e958c837a71675e554c433a31281f160c030000000000000000000000000000000000000000000000000000000000000000020e1925313d4854606c78848f9ba7a89c9084786c6054493d313a46515d6975818d99a5aa9e93877b6f63574c4034281c1005000000000000000000000000000013202c3946535f6c798693a0aca194887b6e615448535f6b77838f9ba7a2968a7e72665a4f43424e5a66727e8a96a2a2968b7e73675b4f4f5b6875828f9ca8a69a8d807366594d4033261a0d000a16212c3740484f52535353596673808d9aa6b2a6998c7f7265595353535353535353535353535353514c453c32271c101926323e4b5764707d8996a2afaa9e9185786b5f5245392c201306000005111c27313c464f58616970767c8184878a8b8c8d8d8e8e8e8e8f8f8f949da79a8e8174675a4d4134271a0e010000000000000000000008131f2a353f4a555f6a747e88919ba4acaba29a928a837c76706c6764615e5d5b5b5b5b5c5d5f6164686c71767c838a929aa2aba89f968c83796f655a50453b30251a0f04000000000000000000000000000000000000000a16222e3a46525d6975818d99a5a19892949da69a8f83776b5f53473b2f23180c00000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e12050000000000000000000007131f2c3845515d6976828e988c8074685c50454d5966717d8995a0978b80756b6159514b48454545474c5159626b76818c8885817e76695d504346525e6a76828e978b7e72665a4d4135281c0f0300000000000000000000000a1724303d4a5763707d8a97a4978a7d7063574a3d30241926323f4c5965727f8c999e9285786b6c7884909c978b7f73675b67737f8b979a8e82766b6b7885929e988b7e7165584b3e3225180b00101c2936434f5c697683909ca9afa5988c7e7265584c3f3225190c0000000004101d2935424e5a66737f8b98a4a99d9084776b5f5246392d211a26333f4b5864707d8995a2978d8a939e9a8e8275695c5044372b1f1b2734404c5965727e8a97a3a99d9084786b5f53473a2e221609000013202c3946535f6c798693a0acaca09386796c5f534f58616b747d879099a2a79e958c837970675e554c433a31281e150c0300000000000000000000000000000000000000000000000000000000000000000914202c3844505b67737f8b96a2aca095897d7165594d41353e4a56626e7a86929da9a69a8e82766a5f53473b2f23180c00000000000000000000000000000013202c3946535f6c798693a0aca194887b6e61544c5864707c88949fa99d92867a6e62564a3e3e4a56626e7a86929ea79b8f83776b5f534f5b6875828f9ca8a69a8d807366594d4033261a0d000e1a26323e48525a5f5f5f5f5f6673808d9aa6b2a6998c7f72655f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5d574e43382d211516232f3c4855616e7a8794a0adaca093867a6d6054473a2e2114080000030e1a242f3840474f575e656b7074787b7d7e808181818182828282838c99a59a8e8174675a4d4134271a0e01000000000000000000030e1925303b46515c67717b86909aa3adaba29990888078716b65605b575452504f4e4e4e4f505255585b60656b717880889099a2aba89e958b81776c62574c41362b201509000000000000000000000000000000000000030f1b27333f4a56626e7a86929da99c90868b96a29f93877b6f63584c4034281c1004000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e12050000000000000000000004101c2935414d5a66727e8a969084786d61564a4955616d78848f9a9d92877d736b635c575452515254575c636b747d889295918a7e73685c4f424c57636e7a869293877a6e62564a3e3125190c0000000000000000000000000a1724303d4a5763707d8a97a4978a7d7063574a3d30241926323f4c5965727f8c999e9285786b717d89949e92867a6e6257636e7a86929e93877b6f6b7885929e988b7e7165584b3e3225180b00101c2936434f5c697683909ca9b2a5988c7e7265584c3f3225190c000000000814202d3945515e6a76838f9ba7a6998d8174685c4f43362a1e1723303c4855616d7986929f9f98969ba4978b7e7266594d4134281c1824313d4956626e7b8793a0aca094887b6f63564a3e3225190d010013202c3946535f6c798693a0acaca09386796c5f53464f59626b747d879099a2a79e958c837970675e554c433a30271e150c030000000000000000000000000000000000000000000000000000000000000004101c27333f4b56626e7a86929da9a5998d81756a5e52463a434f5b67727e8a96a2ada195897d71665a4e42362a1f130700000000000000000000000000000013202c3946535f6c798693a0aca194887b6e6154515c6874808c98a4a5998d8175695d51453a3a45515d6975818d99a5a094887c7064584f5b6875828f9ca8a69a8d807366594d4033261a0d00111e2a37434f5a646b6c6c6c6c6c73808d9aa6b2a6998c7f726c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c686055493d31241814202d3946535f6c7885929eabaea195887b6f6255483c2f221609000008141f2b36404a5257595a5b5f64686b6e70727373747474757575757e8c98a59a8e8174675a4d4134271a0e0100000000000000000008141f2a36414c58636d78838d98a2acada39990877e766e666059544f4b48454342414141424446484b4f545a60666e767e879099a3ada79d93897e73695e53483d31261b0f0400000000000000000000000000000000000814202c37434f5b67737e8a96a2a5998d8186929ea4988c8074685c5044382d211509000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000000d1925313d4956626e79859195897d72665b5045505c67737e89949e998f867c746e6863605f5e5f6064686e757d868f99998e84786d62574b47525d6874808b978e82766a5e52463a2e2215090000000000000000000000000a1724303d4a5763707d8a97a4978a7d7063574a3d30241926323f4c5965727f8c999e9285786b75818d99998d81756a5e525e6a75818d99988c80746b7885929e988b7e7165584b3e3225180b00101c2936434f5c697683909ca9aca5988c7e7265584c3f3225190c000000000b1724303c4855616d7a86929eaba3968a7d7165584c4033271b14202c3945515e6a76838f9ba8a4a3a6a094887b6f63564a3e31251815212d3a46525f6b7784909da9a4978b7e73665a4e4135291d10040013202c3946535f6c798693a0acaca09386796c5f5346475059626b757e879099a3a79e958c827970675e554c423930271e150c03000000000000000000000000000000000000000000000000000000000000000b17222e3a46525d6975818d99a4aa9e92867a6e62564b3f48535f6b77838f9ba7a89c9084786d6155493d31261a0e0200000000000000000000000000000013202c3946535f6c798693a0aca194887b6e615455616d7985919da9a094887c7165594d413535414d5965717d8995a0a4988c8074685c515b6875828f9ca8a69a8d807366594d4033261a0d00131f2c3946525f6b76797979797979808d9aa6b2a6998c7f79797979797979797979797979797979797165594c40332619121e2b3844515e6a7784909daaafa396897c706356493d3023170a00000b1824303c47525c6366676868696a6b6864656667676767686868727e8c98a59a8e8174675a4d4134271a0e010000000000000000010d1924303c47525e69747f8a959faaafa59b91877e756c645c554e48433f3b3937353434353537393c3f44494e555c646c757e87919ba5afa59a90857a6f64594e42372c20150900000000000000000000000000000000010d1924303c4854606c77838f9ba7a195897c828e9aa69c9085786d6155493d3125190d020000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000000915212d3945515d6975818c988f83786c61564b4b56616c77828c969f988f877f7974706d6b6b6b6d70747980878f989b91877c72675c51454d58636e7a859195897d72665a4e42362a1e12060000000000000000000002020a1724303d4a5763707d8a97a4978a7d7063574a3d30241926323f4c5965727f8c999e9285786e7a86929e94897d7165594d5965717c88949c9185796d7885929e988b7e7165584b3e3225180b00101c2936434f5c697683909ca0a0a0988c7e7265584c3f3225190c000000000f1b2733404c5864717d8996a0a0a093877a6e6255493d302417101d2935424e5a6773808c98a0a0a0a09d9185786c5f53473a2e2215121e2a37434f5c6874818d99a0a09b8f82766a5d5145392c2014080013202c3946535f6c798693a0acaca09386796c5f53463e475059626c757e87919aa3a79e948b827970675e544b423930271e150c0300000000000000000000000000000000000000000000000000000000000006121e2935414d5964707c8894a0aba2978b7f73675b4f434c5864707c88949faba3978b8074685c5044392d2115090000000000000000000000000000000013202c3946535f6c798693a0aca194887b6e61545a66727d8995a1a79c9084786c6054483c30313c4854606c7884909ca89d9185796d61555b6875828f9ca8a69a8d807366594d4033261a0d0013202c3946535f6c79868686868686868e9aa7b3a69a8e8686868686868686868686868686868686807366594d4033261a101d2a3643505d697683909ca9b0a4978a7d7164574a3e3124170b00000d1a2733404c58646e7373747576777872675a595a5a5a5b5b5b65727e8c98a59a8d8174675a4d4134271a0e01000000000000000006121e2935414c58636f7a85919ba6b1a89e93897f756c635a524a433d38332f2c2a29282828292a2d2f33383d434a525a636c758089949ea9aca1978c81766a5f54483d31251a0e0200000000000000000000000000000006121d2935414d5964707c8894a0a99d9185787d8a96a2a195897d7165594e42362a1e12060000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e1205000000000000000000000005111d2935414d5864707b879294897e73685d5248505b65707a848d969e98918a84807c7a7878787a7c80858a91999a92897f756b60564b4a545f6a75808b968f84786d6155493d32261a0e0200000000000001060a0d0e0f0f1724303d4a5763707d8a97a4978a7d7063574a3d30241926323f4c5965727f8c999e928578727e8a969c9084786c60544854606c78848f9b958a7e727885929e988b7e7165584b3e3225180b00101c2936434f5c6976839093939393938c7e7265584c3f3225190c00000000111e2a37434f5c6874818d939393939084776b5f5246392d21140d1926323e4b5763707c899393939393938e8275695c5044372b1f120e1b2733404c5865717d8a939393939286796d6155483c3023170a0013202c3946535f6c798693a0acaca09386796c5f5346393e47505a636c757e88919aa3a69d948b827970665d544b423930271e150b020000000000000000000000000000000000000000000000000000000000010d1925303c4854606b77838f9ba7a79b8f83776c605448515d6974818c98a4aa9e93877b6f63574c4034281c10040000000000000000000000000000000013202c3946535f6c798693a0aca194887b6e61545e6a76828e9aa6a3978b7f73675b5044382c2c3844505c6874808c97a3a195897d71655a5b6875828f9ca8a69a8d807366594d4033261a0d0013202c3946535f6c798693939393939397a0abb6aa9f97939393939393939393939393939393938d807366594d4033261a0f1c2936424f5c6875828f9ca8b1a4988b7e7164574b3e3124180b00000e1b2834414e5b67748081818283848275695c504d4d4e4e4e5966737f8c99a59a8d8073675a4d4034271a0d0100000000000000000b17222e3a46525d6975808c97a2adaca1978c82776d635a51484039322c2723201d1c1b1b1b1c1e2023272c32384048515a636d77828d97a2ada89d92877b7065594d42362a1e12070000000000000000000000000000000a16222e3a46515d6975818d99a4a5998c81747985919da59a8e82766a5e52463a2e22170b0000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e12050000000000000000000000010d1824303c48535f6a76818c988f84796f645a5049545e68727b848c949b9c95908c898685858586898c90969c98918980766d63594f47515c66717b8691958a7e73675c5044392d211509000000000000050c1216191b1b1b1b24303d4a5763707d8a97a4978a7d7063574a3d30241b26323f4c5965727f8c999e92857877838f9b978b7f73675c50444f5b67737e8a969a8e83777885929e988b7e7165584b3e3225180b00101c2936434f5c697683868686868686867e7265584c3f3225190c0000000013202c3946525f6b78848686868686868174685c4f43362a1e110a16232f3b4754606d7985868686868686867e7265594d4034281b0f0b1724303d4955626e7a868686868686867d7164584b3e3225180c0013202c3946535f6c798693a0acaca09386796c5f534639353e48515a636c767f88919ba4a69d948b82786f665d544b423930271d140b0200000000000000000000000000000000000000000000000000000000000814202c37434f5b67727e8a96a2aca094887c7064584c55616d7985919da9a59a8e82766a5e53473b2f23170c000000000000000000000000000000000013202c3946535f6c798693a0aca194887b6e6157636f7b87939eaa9e92877b6f63574b3f332728333f4b57636f7b87939fa69a8e82766a5e5b6875828f9ca8a69a8d807366594d4033261a0d0013202c3946535f6c798693a0a0a0a0a0a2a9b2bcb1a8a2a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09a8d807366594d4033261a0f1c2835424f5b6875828e9ba8b1a4988b7e7165584b3e3225180b00000d1a2733404d5966727e8b8e8f909084786c60544c4a494a505c6875818e9aa5988c7f7266594c403326190d0000000000000000030f1b27333f4b57626e7a86919da8b2a69b90857a70655b51483f362e27201b1713110f0e0e0e0f1114171b21272e363f48515b66707b86919ca8afa3988d81766a5e52473b2f23170b0000000000000000000000000000030f1b27333f4a56626e7a86919da9a194887c7075818d99a59e92867a6e63574b3f33271b0f0300000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000000008141f2b37424e5965707b8691968b81766c61584e4c566069727a828990959a9c9895939292929395989c99938d867e766e645b51475059636d78828d988e83786d61564b3f34281c10050000000000070f171d22262828282828303d4a5763707d8a97a4978a7d7063574a3d30282828323f4c5965727f8c999e9285787b87939e92867a6e63574b3f4a56626e7a86919d93877b7885929e988b7e7165584b3e3225180b00101c2936424f5c68747979797979797979797064584b3e3225180c00000000131f2c3946525f6b7679797979797979797165594c4033271b0e07131f2c3844515d69757979797979797979786e62564a3d3125180c0814212d3946525e6b7679797979797979797064584b3e3225180c0013202c3946535f6c798693a0acaca09386796c5f5346392c363f48515a646d768089929ba4a69d948b82786f665d544b42392f261d140b0200000000000000000000000000000000000000000000000000000000030f1b27333e4a56626e7985919da9a4988d8175695d515a66727e8a96a1ada195897d71655a4e42362a1e1307000000000000000000000000000000000013202c3946535f6c798693a0aca194887b6e615c6773808b97a3a69a8e82766a5e52463b2f23232f3b47535f6b77838e9aa69e92867a6e635b6875828f9ca8a69a8d807366594d4033261a0d0013202c3946535f6c798693a0a6a6a6a6a8aeb6bfb5ada8a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69a8d807366594d4033261a0f1c2835424f5b6875828e9ba8b1a5988b7e7165584b3e3225180b00000c1825313e4a56636f7b87939b9c94887c71665d585656575a626d7884909da296897d7064574b3e3125180b000000000000000006131f2b37434f5b67737f8b96a2aeaca1958a7e73695e53493f362d241c150f0b0704010000000205070b10151c242d36404a545f6974808b96a2aea99e92877b6f63574b3f33271b0f03000000000000000000000000000814202b37434f5b67737e8a96a2a89c9084786c717d8995a1a3978b7f73675b4f43382c20140800000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e1205000000000000000000000000030f1a26313d48535f6a75808b9592887d736960564d4e57606870787e848a8e92959798999999989694918d88827b746d645c52494f58626b75808a9492887d72675c50453a2e23170b000000000006101921282e323535353535353d4a5763707d8a97a4978a7d7063574a3d35353535353f4c5965727f8c999e928578808c98998d82766a5e52463a46525d6975818d98988c817885929e988b7e7165584b3e3225180b000e1b2733404c57626a6c6c6c6c6c6c6c6c6c685f54483c3023170a00000000111e2a37434f5a646b6c6c6c6c6c6c6c6c685f54493d3024180b03101c2835414d58636a6c6c6c6c6c6c6c6c6c675d52463a2e21150905111d2a36424e5a646b6c6c6c6c6c6c6c6c685f54483c3023170a0013202c3946535f6c798693a0acaca09386796c5f5346392c2d363f48525b646d768089929ba4a69d948b81786f665d544b42392f261d140b02000000000000000000000000000000000000000000000000000000000a16222e3a45515d6975818c98a4a99d9185796d62565f6b76828e9aa6a89c9084786d6155493d31261a0e02000000000000000000000000000000000013202c3946535f6c798693a0aca194887b6e61606c7884909ca8a195897d71665a4e42362a1e1f2a36424e5a66727e8a96a2a3978b7f73675b6875828f9ca8a69a8d807366594d4033261a0d0013202c3946535f6c79869399999999999ca4aeb8ada39c999999999999999999999999999999998d807366594d4033261a0f1c2936424f5c6875828f9ca8b1a4988b7e7164574b3e3124180b00000915222e3b47535f6b77838e99a4998d82786f6965636364666b747e8995a19d9286796d6155483c2f23160a00000000000000000a16222f3b47535f6b77848f9ba7b3a79b8f84786d62574c42372d241b120b040000000000000000000000040b121b242e38424d58636e7a85919da9afa3978b8073675b4f43372b1f1206000000000000000000000000010d1924303c4854606b77838f9ba7a4988c8074686c7885919da79b9084786c6054483c3024180d01000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e1205000000000000000000000000000915202b37424d58636e79848e988f857b72685f564e4e565e666d73797e8285888a8b8c8c8c8b8a8785817c77716a635b524a5058616a747d8791968b81766b60554a3f34281d120600000000020d18222b333a3f414242424242424a5763707d8a97a4978a7d7063574a424242424242414c5965727f8c999e92857884909c95897d7165594d4236414d5964707c88949d91857985929e988b7e7165584b3e3225180b000b17232f3b4650585e5f5f5f5f5f5f5f5f5f5d564d42372c201407000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5d564d43382c201408000c1925303c4751595e5f5f5f5f5f5f5f5f5f5c554b41352a1e1206020e1a26323d48525a5f5f5f5f5f5f5f5f5f5d564d42372c2014070013202c3946535f6c798693a0acaca09386796c5f5346392c242d364049525b646d768089929ca5a69d948a81786f665d544b41382f261d140b0200000000000000000000000000000000000000000000000000000006111d2935414c5864707c87939faba2968a7e72665a636f7b87939faba3978b8074685c5044392d21150900000000000000000000000000000000000013202c3946535f6c798693a0aca194887b6e6165717c8994a0a89d9185796d6155493d31251a1a26323e4a56626e7986919da79b9084786c606875828f9ca8a69a8d807366594d4033261a0d0013202c3946535f6c79868c8c8c8c8c8c929ca8b4a89c918c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c807366594d4033261a101d2a3643505c6976838f9ca9b0a4978a7d7164574a3e3124170b000006121e2b37434f5b66727d88939c9f948a817a7571706f7072777d86909aa2978c8175695d5145392c20140700000000000000010d1a26323f4b57636f7b8894a0acaea2968a7e73675c51463b30261b120900000000000000000000000000000009121c26313b47525d6975818c98a4b0a89c9084786b5f53473b2e22160900000000000000000000000006111d2935414d5864707c8894a0aba094887c70646874808c98a4a094887c7064584d4135291d1105000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000000000040f1a26313c47525c67727c8791978e847a71686058504d545b62686d7276797b7d7e8080807e7d7b7875706b655f58514a5159626a737c868f988e84796f645a4f44392e23170c010000000008141f2a343d454b4e4e4e4e4e4e4e4e5763707d8a97a4978a7d7063574e4e4e4e4e4e4e4e4c5965727f8c999e92857d89959c9084786c6055493d313c48545f6b77838f9b968a7e85929e988b7e7165584b3e3225180b0007131e29343e464d52535353535353535353514b443b31261b0f03000000000a16212c3740484f525353535353535353514c443b31261b10040008141f2a353f474e52535353535353535353504a43392f24190d02000a15212c3640484f525353535353535353514b443b31261b0f030013202c3946535f6c798693a0acaca09386796c5f5346392c20242e374049525b656e77808a939ca5a69d948a81786f665d534a41382f261d140b020000000000000000000000000000000000000000000000000000010d1824303c48535f6b77838e9aa6a69a8e82766a5e6874808c98a3aa9e92877b6f63574b4034281c100400000000000000000000000000000000000013202c3946535f6c798693a0aca194887b6e616975818d99a5a4988c8074685c5145392d211516212d3945515d6975818d99a5a094887c70646875828f9ca8a69a8d807366594d4033261a0d0013202c3946535f6c797f7f7f7f7f7f808d9aa6b2a6998c7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7366594d4033261a121e2b3844515e6a7784909daaafa396897c7063564a3d3023170a0000020e1a26323e4a55606b76818a949c9c938b85817e7c7c7d7f83888f98a19990867b7064594d4135291d10040000000000000004101d2935424e5a6773808c98a4b0aa9e92867a6e62564b3f34291e140a00000000000000000000000000000000000a141f2a35414c5864707c8894a0acaca094887b6f63574a3e3225190d0000000000000000000000000a16222e3a46515d6975818d98a4a89c9084786c6064707c8894a0a5998d8175695d5145392d22160a000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e1205000000000000000000000000000009141f2a35404b55606a757f8993968d837a726a615a524c50575c6166696c6f717273737372706e6c6864605a544e4d545c636b747c858e9890867c72685d53483d32271c110600000000000d1925303b464f565a5b5b5b5b5b5b5b5b63707d8a97a4978a7d70635b5b5b5b5b5b5b5b5b585965727f8c999f9285818d99978b8073685c5044382c37434f5b67727e8a969a8e8285929e988b7e7165584b3e3225180b00020d18222c353c424546464646464646464644403a32291f140a000000000005101a252e373e4346464646464646464644403a32291f150a0000030e19232d353d4245464646464646464646443f3931271d13080000040f1a242e363d4346464646464646464644403a32291f140a000013202c3946535f6c798693a0acaca09386796c5f5346392c201b252e374049535c656e77818a939ca6a59c938a81786f655c534a41382f261d140a01000000000000000000000000000000000000000000000000000008141f2b37434f5a66727e8a95a1ab9f93877b6f636c7884909ca8a59a8e82766a5e52473b2f23170b0000000000000000000000000000000000000013202c3946535f6c798693a0aca194887b6e626e7a86929ea99f93887b7064584c4034281c10111d2935414d5965717c8894a0a4998d8175696875828f9ca8a69a8d807366594d4033261a0d00121f2b3844515d6871727272727273808d9aa6b2a6998c7f72727272727272727272727272727272726d63574b3f32251914202d3946535f6c7885929eabaea195887b6f6255493c2f2216090000000a16222d39444f5a646f78828a92999d96918d8b89898a8b8e93999d9790877e74695e53483c3025190d000000000000000006131f2c3845515e6a76838f9ba8b2a69a8e8275695d51463a2e23180d020000000000000000000000000000000000030e1924303c48535f6c7884909ca9b0a4988b7f73665a4d4135281c0f0300000000000000000000030f1b27333e4a56626e7a86919da9a4988c8074685b606c7884909ca89d9185796e62564a3e32261a0e020000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e12050000000000000000000000000000030e19242f39444e59636d77818a94958d847b736c645d56504b5155595d606264656666666564625f5c58544f4c52585f666d757d868e9791887e746a60564c41362c21160b000000000000101d2935414d586167686868686868686868707d8a97a4978a7d7068686868686868686868635a65727f8c999f938686929e92877b6f63574b3f3328333e4a56626e7985919d938785929e988b7e7165584b3e3225180b000006101a232a31363939393939393939393938342f2820170d0300000000000009131c252c323739393939393939393938342f2820170d0300000007111b232b31363939393939393939393937342e271f150c0100000008121c242c323639393939393939393938342f2820170d03000013202c3946535f6c798693a0acaca09386796c5f5346392c20131c252e37414a535c656f78818a949da6a59c938a81776e655c534a41382f261c130a0100000000000000000000000000000000000000000000000000030f1b26323e4a56616d7985919ca8a3978b7f7367717c8995a1aca195897d71655a4e42362a1e13070000000000000000000000000000000000000013202c3946535f6c798693a0aca194887b6e67727e8a96a2a79b8f83776b5f53473b3024180c0d1924303c4854606c7884909ca89d9185796d6875828f9ca8a69a8d807366594d4033261a0d00101c2834404c565f65656565656673808d9aa6b2a6998c7f7265656565656565656565656565656565635b51463b2f231616232f3c4855616e7a8794a0adaca093867a6d6054473a2e21140800000005111c27333e48535d666f7880878e93979b9997969696989b9a96928c857e756c62584d42372b20140800000000000000000915222e3b4754606d7986929fabafa3968a7e7165594d4135291d12060000000000000000000000000000000000000008131f2b37434f5c6874818d99a6b2a79b8f8276695d5044372b1e1205000000000000000000000814202b37434f5b67737e8a96a2aca094887b6f63575c6874808c98a4a2968a7e72665a4e43372b1f13070000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000000000000007121d27323c47515b656e78818a94968e857d766f68615b56504c4d515356575959595958575553504c4d52575d6369707880878f9891887f756c62584e443a2f251a0f05000000000000121f2c3845515e6973757575757575757575757d8a97a4978a7d75757575757575757575746c6165727f8c99a3978f8f979a8e82766a5e52463b2f232e3945515d6975818c98988f8f96a1988b7e7165584b3e3225180b0000000811192025292c2c2c2c2c2c2c2c2c2c2b28241d160e0500000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2b28241e160e05000000000009111920262a2c2c2c2c2c2c2c2c2c2c2b28231c150d0300000000000a121a21262a2c2c2c2c2c2c2c2c2c2b28241d160e0500000013202c3946535f6c798693a0acaca09386796c5f5346392c2013131c252f38414a535d666f78818b949da6a59c938a81776e655c534a41382e251c130a01000000000000000000000000000000000000000000000000000a16212d3945515d6874808c98a3a79b8f83776b75818d99a5a89c9084786c6155493d31251a0e020000000000000000000000000000000000000013202c3946535f6c798693a0aca194887b6e6b77838f9ba7a2968a7e72675b4f43372b1f13070814202c3844505c6773808b97a3a2968a7e726875828f9ca8a69a8d807366594d4033261a0d000c18242f3a444d5458595959596673808d9aa6b2a6998c7f726559595959595959595959595959595957514940352a1e131a26323f4b5764707d8996a2afaa9e9185786b5f5246392c201306000000000b16212c37414b545d666e767c82878b8e909293939291908d8a86817a736c635a50463b30251a0f0300000000000000000b1824313d4a56636f7c8995a1aeaca093877a6e6255493d3125190d0100000000000000000000000000000000000000030f1b27333f4c5864717d8a96a3afaa9e9185786c5f53463a2d211407000000000000000000010d1824303c48545f6b77838f9ba7a79b8f83776b5f5357636f7c8894a0a69a8f83776b5f53473b2f23170c0000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e1205000000000000000000000000000000010b16202b353f49535c666f78818a92978f888179736d67615c5853504d4a4b4c4c4c4c4c4a4b4d5154595d62686e747b828a919890887f766d635a50463c32281e13080000000000000013202c3946535f6c7982828282828282828282828a97a4978a82828282828282828282827d706365727f8c99a6a19b9ba095897d71655a4e42362a1e2935404c5864707b87939f9b9ba0a5988b7e7165584b3e3225180b00000000070e14191d1f2020202020202020201f1c18120c04000000000000000000010910161a1e1f20202020202020201f1c18130c0500000000000000070f151a1d1f2020202020202020201e1c17120b03000000000000000810161a1e1f20202020202020201f1c18120c040000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130a131d262f38414b545d666f78828b949da7a59c938a80776e655c534a40372e251c130a0000000000000000000000000000000000000000000000000005111d2834404c58636f7b87939faaa094887b6f7985919da9a3978b8074685c5044382d211509000000000000000000000000000000000000000013202c3946535f6c798693a0aca194887b6e707c88939fa99e92867a6e62564a3e32261b0f0304101b27333f4b57636f7b87939fa69a8e82766a75828f9ca8a69a8d807366594d4033261a0d0007131e28323b43484b4c4c4d596673808d9aa6b2a6998c7f7265594c4c4c4c4c4c4c4c4c4c4c4c4c4c4a463f372e2319121e2a36424e5b6773808c98a5b1a89b8f8276695d5044372a1e11050000000005101a252f39424b545c646b71767b7f8284858686868583817e7a756f69625a51483e342a1f14090000000000000000000d1926333f4c5865727e8b97a4b1aa9d9084776b5f5246392d2115080000000000000000000000000000000000000000000b1724303c4955626e7b8794a0adada094877b6e6255483c2f23160900000000000000000005111d2935414d5864707c8894a0aba3978b7f73675b4f535f6b7784909ca89f93877b6f63584c4034281c100400000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e120500000000000000000000000000000000040e19232d37414a545d666f7881899198928b847e78726d6864605c595755545353535456575a5d6165696e737980868d94968f877e766d645b51483e342b20160c010000000000000013202c3946535f6c79868e8e8e8e8e8e8e8e8e8e929ba79b928e8e8e8e8e8e8e8e8e8e8a7d706365727f8c99a6aca8a89c9084786d6155493d31251a24303c48535f6b77838e9aa6a8aba5988b7e7165584b3e3225180b000000000003090d111213131313131313131312100c0701000000000000000000000000050a0e1113131313131313131312100c070100000000000000000004090e1113131313131313131313120f0b0600000000000000000000040a0e1113131313131313131312100c0701000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060b141d262f39424b545d666f79828b959ea7a59c928980776e655c524940372e251c1208000000000000000000000000000000000000000000000000000c18242f3b47535f6b76828e9aa6a4988c80737d8995a1aa9e92877b6f63574b3f34281c1004000000000000000000000000000000000000000013202c3946535f6c798693a0aca194877a6e74808c98a4a5998d8175695d51463a2e22160a00000b17232f3b47535f6a76828e9aa69f93877b6f75828f9ca8a69a8d807366594d4033261a0d00010c16202931383c3f3f404d596673808d9aa6b2a6998c7f7265594c3f3f3f3f3f3f3f3f3f3f3f3f3f3e3a352e251c1218232f3a46525e6a77838f9ba8b1a5988c8073675a4e4135281c0f03000000000009131d273039424b525960666b6f72757778797979787674716e69645e5750483f362c22180d030000000000000000000e1b2834414e5a6774818d9aa6b3a79b8e8275685c4f43362a1e11050000000000000000000000000000000000000000000814212d3a46535f6c7885929eabafa396897d7063574a3d3124180b0000000000000000000a16222e3a45515d6975818d98a4aa9e92867a6e62564b4f5b6773808b98a4a4988c8074685c5044382d21150900000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000103050815212e3b4854616e7b8894a1aeab9e9285786b5e5145382b1e1205050300000000000000000000000000000007111b252f38424b545d666e777f878e95968f89837e78746f6c6866636261605f6061626466696d71757a7f858b9198938c847c746c645b52493f362c23190f04000000000000000013202c3946535f6c7986939b9b9b9b9b9b9b9b9b9da0a0a09d9b9b9b9b9b9b9b9b9b968a7d706365727f8c99a0a0a0a0978b8074685c5044382d21151f2b37434e5a66727e8a95a0a0a0a0988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306020b141d263039424b545d677079838c959ea7a49b928980776e645b524940372e241a0f0400000000000000000000000000000000000000000000000007131f2b36424e5a66717d8995a1a89c908477818d99a5a5998e82766a5e52473b2f23170b00000000000000000000000000000000000000000013202c3946535f6c798693a0aca194877a6d7884909ca8a094897c7165594d4135291d1106000007121e2a36424e5a66727e8a96a2a3978b807375828f9ca8a69a8d807366594d4033261a0d0000050e171f262c303233404d596673808d9aa6b2a6998c7f7265594c3f323232323232323232323232312e2a231c13141e2934404b57636f7b87939fabaea295897d7064574b3f3226190d000000000000010b151e27303940484e555a5f6366696a6c6c6c6c6b6a6865625d59534d463e362d241a100600000000000000000000101c2936434f5c6975828f9ba8b2a6998c8073665a4d4134271b0e0200000000000000000000000000000000000000000005121e2b3744515d6a7783909da9b1a4988b7e7265584c3f3226190c0000000000000000030f1b27323e4a56626e7a85919da9a59a8e82766a5e52464b57636f7b8793a0a89c9085786d6155493d3125190d02000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acada09386796d6053463a2d20130b0b0b0b0b0a09060200000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0acaca09386796d6053463a2d20130d0803000000000000000000040a0e15212e3b4854616e7b8894a1acaa9e9184776a5d5144372a1e11000000000004090d10121215212e3b4854616e7b8894a1acab9e9285786b5e5145382b1e121211100c08020000000000000000000000000009131d263039424b545c656d747c838a9197948f8984807c787572706e6d6d6c6d6d6f717376797d81868b9096968f89817a726b625a524940372d241a110700000000000000000013202c3946535f6c7986939393939393939393939393939393939393939393939393938a7d706365727f8c939393939393877b6f63574b4034281c101a26323e4a56616d79859193939393938b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010407090b0d0e1011111212121111100f0e0d0b09070402000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600020b141e273039424b555e677079838c959ea8a49b928980766d645b524940362c211509000000000000000000000000000000000000000000000000020e1a26323d4955616d7884909ca8a094877b85919da9a195897d7165594e42362a1e120700000000000000000000000000000000000000000013202c3946535f6c798693a0aca094877a707c8894a0a89c9084786c6054483c3125190d010000020e1a26323e4a56616d7985919da89c90847775828f9ca8a69a8d807366594d4033261a0d000000050d151b20242633404d596673808d9aa6b2a6998c7f7265594c3f32262626262626262626262625221e1811121c25303a45515c68737f8b97a3afaa9e9285796d6154483c2f23160a00000000000000030c151e272f363d43494e53575a5c5e5f5f5f5f5e5d5b5955524d47423b342c241b12080000000000000000000000111e2a3744505d6a7783909da9b1a4978b7e7165584b3f3225190c0000000000000000000000000000000000000000000003101c2936424f5c6875828f9ba8b3a6998c8073665a4d4033271a0d000000000000000008141f2b37434f5b67727e8a96a2ada195897d7165594d4147535f6b77838f9ba7a195897d7165594d42362a1e1206000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d20130700000000000005080a0b0b0b0b0b15212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c798693a0a7a7a09386796d6053463a2d201717171717171715120e08010000000815212e3b4854616e7b8894a1a7a79e9184776a5d5144372a1e110013202c3946535f6c798693a0a0a0a09386796d6053463a2d201c19140e08010000000000020910151a1d212e3b4854616e7b8894a0a0a09e9184776a5d5144372a1e1100000000080f15191d1e1e1e212e3b4854616e7b8894a0a0a09e9285786b5e5145382b1e1e1e1e1c19140d06000000000000000000000000010b141e273039424a535b636a727980868c929895908c8885817e7d7b7a7979797a7b7d808285898d919696918b847e7770686159514840372e251b12080000000000000000000013202c3946535f6c798686868686868686868686868686868686868686868686868686867d706365727f8686868686868682766a5e53473b2f23170b16212d3945515d687480868686868686867e7165584b3e3225180b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003070b0e111316181a1b1c1d1e1e1e1e1e1e1d1c1b19181613110e0b0804010000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0a0a0a09386796c5f5346392c2013060000020c151e27303a434c555e67717a838c959fa0a09b928980766d645b52483d32261a0e010000000000000000000000000000000000000000000000000915212d3944505c6874808b97a3a3978b7f8995a1a89c9084786c6155493d31251a0e0200000000000000000000000000000000000000000013202c3946535f6c798693a0aca093867974808c98a4a3978b8073675c5044382c201408000000000915212d3945515d6975818d99a5a094887b75828e9ba8a69a8d807366594d4033261a0d00000000030a10141a2633404d596673808d9aa6b2a6998c7f7265594c3f3226191919191919191919191816120d141c242d37424c57626d7984909ca7b1a5998d8275695d5145382c2013070000000000000000030c151d242b32383e42474a4d4f515253535352504f4c4945413c363029221a1209000000000000000000000000121e2b3845515e6b7784919eaab0a3968a7d7063574a3d3124170b00000000000000000000000000000000000000000000000e1b2834414e5b6774818e9aa7b4a79a8e8174675b4e4134281b0e00000000000000010c1824303c48545f6b77838f9ba7a89c9085786d6155493d434f5b67737f8b97a3a59a8e82766a5e52463a2e22170b000000000000000013202c3946535f6c798693a0a7a7a09386796d6053463a2d20130700000000050c111417171717171717212e3b4854616e7b8894a1a7a79e9184776a5d5144372a1e110013202c3946535f6c7986939a9a9a9a9386796d6053463a2d2224242424242424221e19130c0400000815212e3b4854616e7b88949a9a9a9a9184776a5d5144372a1e110013202c3946535f6c798693939393939386796d6053463a2d2b29251f19120c05000000060d141b2126292b2e3b4854616e7b8893939393939184776a5d5144372a1e110000000912192025292b2b2b2b2e3b4854616e7b8893939393939285786b5e5145382b2b2b2b2b28241f181007000000000000000000000000020c151e2730384149515860676e757b81878c91969894918e8b89888786868687888a8c8f92959994908b858079736c655e564f473f362e251c13090000000000000000000000131f2c3946525f6b76797979797979797979797979797979797979797979797979797979786e62657179797979797979797971665a4e42362a1e1307111d2834404c58636f7979797979797979797064574b3e3125180b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070b0f13171a1d2022242628292a2b2b2b2b2b2a2a2927262422201d1b1814110d0905000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693939393939386796c5f5346392c201306000000030c151e27313a434c555f68717a838d9393939393928980766d645a4e42362a1d110400000000000000000000000000000000000000000000000005101c2834404b57636f7b87929ea79b8f878d99a5a3978b8073685c5044382c2115090000000000000000000000000000000000000000000013202c3946535f6c798693a0aca09386797884909ca89e93877b6f63574b3f33271c10040000000005111d2935414d5864707c8894a0a4988c8075828e9ba8a69a8d807366594d4033261a0d000000000000040d1a2633404d596673808d9aa6b2a6998c7f7265594c3f3226190c0c0c0c0c0c0c0c0c0b0d12181e252d364049535e68737e8a95a1acaca095897d7165594d4135291c1004000000000000000000030b131a21272d32363b3e41434445464646454442403d3935302b251f18100800000000000000000000000000121f2c3945525f6b7885929fabafa296897c6f6256493c3023160900000000000000000000000000000000000000000000000d1a2733404d5a6673808d9aa6b3a89b8e8275685b4f4235281c0f0000000000000005111d2935414c5864707c88949faba4988c8074685c5044383f4b57636f7b87939faa9e92867a6e63574b3f33271b0f030000000000000013202c3946535f6c7986939a9a9a9a9386796d6053463a2d2013070000020910171c2123242424242424232e3b4854616e7b88949a9a9a9a9184776a5d5144372a1e110013202c3946535f6c79868d8d8d8d8d8d86796d6053463a2d2e303131313131302e2a241d160f07000815212e3b4854616e7b888d8d8d8d8d8d84776a5d5144372a1e110013202c3946535f6c798686868686868686796d6053463a383835312a241d17100a030a11181e252c323638383b4854616e7b8686868686868684776a5d5144372a1e11000008121b242b313538383838383b4854616e7b8686868686868685786b5e514538383838383735302a221a1006000000000000000000000000030c151e262f373f474e555c636970757b81858a8e92959898969494939393949596999794918d89847f7a746e68615a534c453d352d241c130a010000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c675d5f686c6c6c6c6c6c6c6c6c686055493d31261a0e020c18242f3b47535e676c6c6c6c6c6c6c6c6c685e53483c2f23160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003080e12171b1f23272a2c2f313334363737383838383736353433312f2c2a2724211d1915100c0702000000000000000000000000000000000000000000000000000000000013202c3946535f6c798686868686868686796c5f5346392c20130600000000030c151f28313a434d565f68717a84868686868686868680766a5e5145382b1f1205000000000000000000000000000000000000000000000000000c17232f3b47525e6a76828e99a5a19893969fa99e92867a6f63574b3f34281c10040000000000000000000000000000000000000000000013202c3946535f6c798693a0aca09386797c8894a0a69a8e82766a5e52473b2f23170b0000000000000c1824303c4854606c7884909ca89c908377818e9ba7a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f7265594c3f3226190c0b0b0c0c0d0e101316191e232930374048525b656f7a85909ba6b2a79b9084786c6155493d3125190c000000000000000000000001080f161c21262a2e313436383939393938373533302d2925201a140d060000000000000000000000000000131f2c3946525f6c7986929facaea295887b6f6255483c2f22150900000000000000000000000000000000000000000000000d192633404c596673808c99a6b2a89c8f8275685c4f4236291c0f000000000000000a16222e3945515d6975818c98a4ab9f93877b6f64584c40343a46535f6b77838f9ba7a3978b7f73675b4f43382c2014080000000000000013202c3946535f6c79868d8d8d8d8d8d86796d6053463a2d20130700050c131b22282d303131313131312f2e3b4854616e7b888d8d8d8d8d8d84776a5d5144372a1e110013202c3946535f6c798181818181818181796d6053463a363a3d3e3e3e3e3e3d3a362f282019120b0815212e3b4854616e7b8181818181818181776a5d5144372a1e1100131f2c3946525f6b767979797979797979766b5f5346454544413c352f28221b150e151c222930373d424545454754606d77797979797979797975695d5044372a1d1100040f1a242d363d424445454545454754606d777979797979797979756a5e5144454545454544413b342c22180d02000000000000000000000000030c141d252d353c444b52585e646a7075797e8285888b8d8f919292929292908f8d8a8884817c78736e69635d565049423a332b231b120a010000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5c55565d5f5f5f5f5f5f5f5f5f5d574e43382d2115090007131f2b36414c555c5f5f5f5f5f5f5f5f5f5c564d42372b1f130700000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e14191e23272c2f3336393b3e3f4142434445454544444342413f3d3b393633302d2925211c18130e0802000000000000000000000000000000000000000000000000000000131f2c3946525f6b767979797979797979766b5f5246392c1f13060000000000030d161f28313a444d565f687279797979797979797979766a5e5145382b1f12050000000000000000000000000000000000000000000000000007131e2a36424e5965717d8994a0aaa3a0a2a8a5998e82766a5e52463b2f23170b000000000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f928679808c98a4a195897d72665a4e42362a1e12060000000000000814202c38444f5b6773808b97a3a093877b818d9aa7a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f7265594c3f32261918181818191a1b1d1f22252a2e343a4249525a646d77818c96a1acaca0958a7e73675c5044382c20140800000000000000000000000000040a10151a1e2225282a2b2c2c2c2c2c2a292724211d19140e090200000000000000000000000000000013202c3946535f6c798693a0acaea295887b6e6155483b2e22150800000000000000000000000000000000000000000000000c1926323f4c5965727f8c99a6b2a99c8f8275695c4f4236291c0f000000000000030f1b27323e4a56626e7985919da9a79b8f83776b5f53473b2f36424e5a66737e8b97a3a79b8f84786c6054483c3024180c0100000000000013202c3946535f6c798181818181818181796d6053463a2d201307080f161e252c33393c3e3e3e3e3e3d3c383b4854616e7b8181818181818181776a5d5144372a1e1100121f2c3845515d6972737373737373737372695e51453941464a4a4a4a4a4a4a46413a322b241c150e14202d3a46535f6a72737373737373737371675b4f43362a1d1000111e2a37434f5a646b6c6c6c6c6c6c6c6c6b645a51515151514d47403a332d2620191f262d343b42484e51515151515b656c6c6c6c6c6c6c6c6c6a63584d4135281c0f000a15212b363f474e5151515151514f505b656c6c6c6c6c6c6c6c6c6b63594e505151515151514d463e34291e130700000000000000000000000000020b131b232b323940474d53595f64696d7275797c7e81838485868686858482817e7b7874706c67625d57524b453e3730292119110900000000000000000000000000000a16212c3740484f5253535353535353535353535353535353535353535353535353535353504a4c51535353535353535353514c453c32271c100400020e1a25303a434b50535353535353535353504b443b30261a0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000060d13191f252a2f33383c3f4245484a4c4e4f50515151515151504f4e4c4a484543403d3935312d28231e19130e080100000000000000000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6b645a4f43372a1e1105000000000000040d161f28323b444d5660686c6c6c6c6c6c6c6c6c6c6b64594e4236291d100400000000000000000000000000000000000000000000000000020e1a25313d4955606c7884909ca0a0a0a0a0a095897d7165594e42362a1e1207000000000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f92857984909ca89d9185796d6155493d31261a0e02000000000000030f1b27333f4b57636f7b87939fa3978b7e808d9aa6a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f7265594c3f32262525252525262628292b2e32363a3f454c535b646c757f89939ea8afa59a8f84796d62564b3f34281c1004000000000000000000000000000000050a0e1216191b1d1e1f2020201f1e1c1a1815110d0803000000000000000000000000000000000013202c3946535f6c7986929facaea295887b6e6155483b2f22150800000000000000000000000000000000000000000000000d1926333f4c5966727f8c99a6b2a99c8f8275695c4f4236291c0f00000000000008141f2b37434f5b66727e8a96a2aea2968a7e72665a4f43372b323e4a56626e7a87939faba094887c7064584d4135291d1105000000000000121f2c3845515d6972737373737373737372695e5145392c1f130b121a212830373e45494a4a4a4a4a4a48433c46535f6a72737373737373737371675b4f43362a1d1000101c2935414c57606667676767676767676660574d41424b5256575757575756524b443d352e271f18121e2a36424e5861666767676767676767655f554a3f33271b0e000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5c5e5e5e5e5e5d58524b453e38312b242a31383f464c535a5e5e5e5e5e5e5b5f5f5f5f5f5f5f5f5f5e5951473c3025190c000e1a26323d4851595e5e5e5e5e5e5b55535b5f5f5f5f5f5f5f5f5f5e5951575c5e5e5e5e5e5d5850463b3024180c00000000000000000000000000000109111920272e353c42484e53585d6165696d6f727476777879797978777574716f6c6864605c57524c46403a332c251e170f0700000000000000000000000000000005101a252e373e434646464646464646464646464646464646464646464646464646464646443f404446464646464646464645413a332a20150b00000008131e283139404446464646464646464644403a32291f140900000000000000000000000000000000000000000000000000000000000000000000000000000000030a11181e252b30363b3f44484b4f525457595a5c5d5e5e5e5e5e5d5d5c5a595754524f4c4945413d39342f2a251f19130c060000000000000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5a52483e32261a0e0200000000000000040d162029323b444e565d5f5f5f5f5f5f5f5f5f5f5f5a52483d31261a0e0100000000000000000000000000000000000000000000000000000915212c3844505c67737f8b939393939393939084786c6055493d3125190e02000000000000000000000000000000000000000000000013202c3946535f6c798693a0ab9f92857b8794a0a4988c8174685d5145392d21150900000000000000000b17232f3b47525e6a76828e9aa69b8e82808c99a6a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f7265594c3f3232323232323232333436383b3e42464b51575e656d757e88919ba5afa89e93887d73675c51453a2e23170b0000000000000000000000000000000000000206090c0e1012131313131211100e0b08050100000000000000000000000000000000000000131f2c3946525f6c7986929facafa295887b6f6255493c2f22160900000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3a89c8f8275685b4f4235281c0f0000000000010c1824303c48535f6b77838f9ba6a99d92867a6e62564a3e32262e3a46525e6a76828e9ba7a5998d8175695d5145392d22160a000000000000101c2935414c57606667676767676767676660574d4135291d10151d242b333a41495055575757575757544e46424e5861666767676767676767655f554a3f33271b0e000d1924303b454e55595a5a5a5a5a5a5a5a59554e453f4a545d636464646464635d564e474038312a231b1a26313c464f565a5a5a5a5a5a5a5a5a59544d43392e22170b000a16212c3740484f5253535353535353545f676b6b6b6b6b6a635d565049433c352f353c434a50575e656a6b6b6b6b6b665d5353535353535353524e473f352a1f140800111e2a36424e59636a6b6b6b6b6b67605a5352535353535353535352545b61686b6b6b6b6b6962574c4034281b0f00000000000000000000000000000000070e161d242a31373c42474c5155595d60636668696b6b6c6c6c6b6a696765625f5c5854504b46413b352f28221b140c05000000000000000000000000000000000009131c252c32373939393939393939393939393939393939393939393939393939393939373434383939393939393939393835302921180e04000000020c161f272e343839393939393939393938342f2820170d02000000000000000000000000000000000000000000000000000000000000000000000000000000050d151c232930363c41464b5054585b5e61636567686a6a6b6b6b6b6a6968676563615e5c5855514d4945403b36302a241e17110a03000000000000000000000000000000000000000000000a16212c3740484f525353535353535353524f4840372c21160a000000000000000000040e172029323c444c5153535353535353535353524e4840362b20150900000000000000000000000000000000000000000000000000000004101c28333f4b57636e7a8686868686868686867f73675c5044382c21150900000000000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e92857e8b97a3a094887c7064584c4034281c1105000000000000000006121e2a36424e5a66727e8a96a29e92867f8c98a5a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f7265594c3f3e3e3e3e3e3e3f3f40414345474a4e52575c626870777f88919aa3adaaa0968c81776c61564b4034291e12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2c3845525f6b7885929eabafa296897c6f6356493d3023160a00000000000000000000000000000000000000000000000e1b2734414d5a6773818d9aa6b3a89b8e8175685b4e4235281b0f000000000005111d2935404c5864707c88949faba5998d8175695d51453a2e222a36424e5a66727e8a96a2a99d9185796d62564a3e32261a0e0200000000000d1924303b454e55595a5a5a5a5a5a5a5a59554e453b3025191920272e363d444c535a6164646464646460584e43464f565a5a5a5a5a5a5a5a5a59544d43392e22170b0008131e29333c444a4d4d4d4d4d4d4d4d4d4d4a443c434f5b666f71717171716f676059524a433c342d261e202a343d454a4d4d4d4d4d4d4d4d4d4c49433b31271d11060005101a252e373e43464646464646464c5865707878787878756e68615b544e47403a40474d545b6269707678787878776e62564946464646464645423d352d23190e0300131f2c3945525e6b757878787878726b645e57514a464646464a51585f656c73787878787874685c5043362a1d100000000000000000000000000000000000040b12191f252b31373c4145494d515457595b5d5e5f5f5f5f5f5e5c5a585653504c48443f3a35302a241d17100902000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b28282b2c2c2c2c2c2c2c2c2c2b29241e170f060000000000040d151d23282b2c2c2c2c2c2c2c2c2c2b28231d160e05000000000000000000000000000000000000000000000000000000000000000000000000000000070f171f262d343b41474d52575c6064676b6d707274757677777878777776757372706d6b6865615d5955504c47413b352f29221b140d0500000000000000000000000000000000000000000005101a252e373e4346464646464646464646433e372e251a100500000000000000000000050e17202a323a40444646464646464646464645433d362e241a0f04000000000000000000000000000000000000000000000000000000000b17232f3a46525e6a75797979797979797979786e63574b3f33281c100400000000000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9184828f9ba79b8f83776b5f53483c3024180c000000000000000000020e1a26323e4955616d7985919da295897e8b98a5a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f7265594c4b4b4b4b4b4b4b4b4c4d4e4f5154565a5e62676d737a8189919aa3acaaa1988e847a70655a50453a2e23180c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3844515e6b7784919daab0a3978a7d7064574a3e3124180b00000000000000000000000000000000000000000000020f1c2835424f5b6875818e9ba7b3a69a8d8174675a4d4134271b0e00000000000a16222e3945515d6975818c98a4aca094887c7165594d4135291d26323e4a56626e7a86929eaaa2968a7e72665a4e42372b1f1307000000000008131e29333c444a4d4d4d4d4d4d4d4d4d4d4a443c33291f1c232a323940484f565e656c7171717171706a5f54473d454a4d4d4d4d4d4d4d4d4d4c49433b31271d110600020d17212a32393d404040404040404040403e393845515e6b777d7d7d7d7d79726b635c554d463f37302922222b33393e404040404040404040403d3831291f160b00000009131c252c3237393939393939404c59667380858585858079736c665f58524b454b51585f666d747a81858585857d7063574a3d39393939393936312b231b1107000013202c3946535f6c7985858585837c766f69625c554f48474e555c626970777e8585858584776a5d5044372a1d1100000000000000000000000000000000000000070e141a20262b3035393d4144474a4c4e5051525253525251504e4c494743403c38332f29241e19120c05000000000000000000000000000000000000000000010910161a1e1f202020202020202020202020202020202020202020202020202020201e1c1c1f2020202020202020201f1c18130d0500000000000000040b12171c1f2020202020202020201f1c18120c04000000000000000000000000000000000000000000000000000000000000000000000000000000081119212931383f464c53585e63686c7074777a7c7e8182838484858584848382817e7c7a7774716d6a65615c57524c47413a342d261f17100800000000000000000000000000000000000000000009131c252c32373939393939393939393937322c251c1309000000000000000000000000050e1820292f3538393939393939393939393936322c241b1208000000000000000000000000000000000000000000000000000000000006121e2a36414d58636a6c6c6c6c6c6c6c6c6c6c675d52463b2f23170b0000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aa9e918486929fa2968a7e73675b4f43372b1f1307000000000000000000000915212d3945515d6975818d99a4998d818a97a4a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f72655958585858585858585859595a5c5e6063666a6e73787e858c939ba3aca9a1988f867c72685e53493e33281d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111d2a3743505d697683909ca9b1a5988b7e7265594c3f33261a0d0000000000000000000000000000000000000000000005111e2a3743505d6976838f9ca9b2a5998c7f7266594c4033261a0d00000000030f1b26323e4a56626d7985919da9a89c9084786c6054483c302519222e3a46525e6a76828e9aa6a69a8f83776b5f53473b2f23170c0000000000020d17212a32393d404040404040404040403e39322a211f262d353c434b525961686f767d7d7d7d7d7c706356493d393e404040404040404040403d3831291f160b000000050f1820272d3133343434343434343433312d3845515e6b78838a8a8a8a847c756e665f585149423b332c2521282e3233343434343434343433312c261f170d04000000010a131a21262a2c2c2c2c2c323f4c5865717a848d92918b847e77716a635d5650555c636a71777e858c92928b82786e6256493d302c2c2c2c2c2a2620191109000000131f2c3945525f6b767f8891928e88817a746d67605a53525960666d747b82898f9290877d74695c5043362a1d10000000000000000000000000000000000000000003090f141a1f24292d3135383b3e4042434445464646454443413f3d3a3734302c27231e19130d0701000000000000000000000000000000000000000000000000050a0e111313131313131313131313131313131313131313131313131313131313120f101213131313131313131312100c080200000000000000000000070c0f1213131313131313131312100c070100000000000000000000000000000000000000000000000000000000000000000000000000000008111a232b333b424a51575e64696f74787c808386898b8d8f90919192929190908e8d8b898784817d7a76716d68635e58524c453f383029211a11090100000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2a26211a130a0100000000000000000000000000060e171e24292b2c2c2c2c2c2c2c2c2c2c2c2a26211a1209000000000000000000000000000000000000000000000000000000000000010d1925313c4751595e5f5f5f5f5f5f5f5f5f5f5c554b41352a1e12060000000000000000000000000000000000000000000000000013202c3946535f6c798693a0ab9f93898b96a29e92867a6e62564a3e32271b0f030000000000000000000005111d2935404c5864707c8894a09c90888d98a4a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f726565656565656565656565656667686a6d6f72767a7f848a90969ea5ada8a0978f867d736a60564c42372c22170c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2935424f5b6875818e9ba7b3a69a8d8174675a4e4135281c0f030000000000000000000000000000000000000000000714202c3946525f6b7884919eaab0a4978a7e7164584b3e3225180c0000000008131f2b37434f5a66727e8a96a2ada3978b8073675c5044382c20141d2935424e5a66727e8a96a2ab9f93877b6f63584c4034281c10040000000000050f1820272d3133343434343434343433312d2820222931383f474e555c646b727a81888a8a8a877d7063564a3d303233343434343434343433312c261f170d0400000000060e161c212527272727272727272727252a3743505c67717a848d96968e878078716a625b544c453e362f282022252727272727272727272624211b150d050000000000010910161a1e1f20202024303c48545f68717a848d96968f89827b756e68615b60676e757b82899097958c837970675d52463a2e212020201f1d1a150f0700000000111e2a36434e5a646d7680899299928c857f78726b645e5d636a71787f868d939a91877e756b62584c4034281b0f0000000000000000000000000000000000000000000003090e14181d2125282c2e3133353738393939393837363533302e2b2724201c17120d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a232c353d454d545b62696f757a8084888c909395989a9b9c9d9e9e9e9e9d9c9b99989593908d8a86827d79746e69635d575049423b332b231b130a0100000000000000000000000000000000000000010910161a1e1f20202020202020201f1e1a16100901000000000000000000000000000000050c13181c1f202020202020202020201f1e1a150f0800000000000000000000000000000000000000000000000000000000000000000814202b353f474e5253535353535353535353504a43392f24190d020000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca49b95969da5998d8175695d52463a2e22160a0000000000000000000000000c1824303c4854606c7884909ba29994979fa9a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f7271717171717171717171727273747577797c7e82868b90959ba1a8aba59d968e867d746b62584e443a30251b1005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734404d5a6673808c99a5b2a89c8f8276695d5044372b1f12060000000000000000000000000000000000000000000a17232f3c4855616d7a8793a0acaea295897c6f6356493d3023170a000000000c1824303c48535f6b77838f9ba6aa9f93877b6f63574b3f33271b101925313d4956626e7a86929eaaa4988c8074685c5044382d211509000000000000060e161c21252727272727272727272725211e252c343b424a515860676e757d848b939790877e756b6054483c2f252727272727272727272624211b150d05000000000000040b1115181a1a1a1a1a1a1a1a1a1a1b2834404b565f68717b848d9799918a837b746d655e574f48413a322b241c1a1a1a1a1a1a1a1a1a1a1815100a030000000000000000050a0e1113131314202c38434d565f68727b848d969a948d878079736c666b727880868d949b968d837a71675e554b41352a1e13131313110e090400000000000e1a26323d48525b646d768089929b97908a837d766f69676e757c838a90979b91887e756c625950463b3024180c00000000000000000000000000000000000000000000000003080c1115191c1f222527282a2b2c2c2c2c2c2b2a282624211e1b1814100b0601000000000000000000000000000000000000000000000000000000000000000000000000000000040a0e1112131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131312100c080200000000000000000000000002040607070808080807060401000000000000000000000000000000000000000000000007111a232c353e474f575f666d747a80868b9094989c9fa2a4a6a8a9a8a8a7a7a8a8a9a8a6a4a29f9d9996928e8985807a746e68625b544d453d352d251c130a010000000000000000000000000000000000000000050a0e1113131313131313131313110e0a0500000000000000000000000000000000000001070c10121313131313131313131313110e0a04000000000000000000000000000000000000000000000000000000000000000000030e19232d353d424546464646464646464646443f3931271d1308000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada6a2a3a7a095897d7165594d4135291d12060000000000000000000000000814202c37434f5b67737f8b97a3a4a1a2a8b1a69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b2a6998c7f7e7e7e7e7e7e7e7e7e7e7e7e7e8081828486888b8e92979ba1a6aca6a09a938b847c736b625950463c32281e140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4b5864717d8a97a3b0aa9e9185786c6053473b2e22160a0000000000000000000000000000000000000000020e1a26333f4b5764707d8996a2afac9f93867a6d6154473b2e22150800000005111d2935404c5864707c88939faba69a8e82766a5e52473b2f23170b15212d3945515d6976828e9aa6a89c9085786d6155493d3125190d01000000000000040b1115181a1a1a1a1a1a1a1a1a1a19212830373e454d545b636a717980878f969a91887e756c62594f44382c201a1a1a1a1a1a1a1a1a1a1815100a0300000000000000000005090c0d0d0d0d0d0d0d0d0d0d17232e39444d565f69727b858e979c958d867e777069615a534b443d352e261d140d0d0d0d0d0d0d0d0b08040000000000000000000000000205060606101b26313b444d576069727b848e979f98918b847e7771767c838a91989f978d847a71685f554c43392f24190d0606060401000000000000000a15212c364049525b646d768089929b9b958e88817a74727980878e949b9b92897f766c635a50473e342a1f130800000000000000000000000000000000000000000000000000000005090c101316181a1c1d1e1f1f201f1f1e1d1b191715120f0b08040000000000000000000000000000000000000000000000000000000000000000000000000000000000080f151a1d1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1c18130d05000000000000000002070c0f11121314151515151412100e0b070200000000000000000000000000000000000000050f19232c353e475059616970787f858c91979ca0a5a8a9a6a3a09e9d9c9b9a9b9b9c9d9ea0a2a4a7a9a6a29e9a95908b86807a736d665e574f473f372e251c1309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111b232b3136393939393939393939393937342e271f150c01000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acacacacaca89c9084786c6054483d3125190d01000000000000000000000000030f1b27333f4b57636f7b87939eaaacacacaca69a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b3a79b918b8b8b8b8b8b8b8b8b8b8b8b8b8c8c8d8e909295979b9ea3a7aba6a19b958f88817a726a615950473e342a20160c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303c4955626f7b8894a0adada194887b6f63574b3e32261b0f030000000000000000000000000000000000000007131f2b37434f5b6773808c98a5b1a99d9084776b5e5245392c2013060000000a16222d3945515d6975818c98a4ada1958a7e72665a4e42362a1e1206111d2935414d5965717d8a96a2ada195897d7165594d42362a1e1206000000000000000005090c0d0d0d0d0d0d0d0d101a232b333a414950575f666d747c838b92999a91887e756c635a50473d33271c100d0d0d0d0d0d0d0d0d0b0804000000000000000000000000000000000000000000000007121d28323b444d576069727b858e979f989089827a736c645d564e4740382f251b100500000000000000000000000000000000000000000000000000000a151f29323b454e576069727b858e97a09c968f89827b81878e959ca0978e857b72685f564d433a31271d1308000000000000000000000000040f1a242e374049525b646d778089929ba099938c857f7d848b92989f9c938980766d645b51483f352c22180d020000000000000000000000000000000000000000000000000000000000000306090b0d0f1112121313131211100f0d0b080603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a121a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b29241e170f06000000000000060d13181b1d1f202121222222211f1d1a17130e090300000000000000000000000000000000020c17212b343e475059626b737b828a90979da2a8aba6a19d99969492908f8e8e8e8e8f90919395989b9ea2a6aaa6a19c97918b857e7770696159514940372e251b110600000000000000000508090a0a0a0a0a0a0a0a0908050000000000000000000000000407090a0a0a0a0a0a0a0a0a08050200000000000000000000000206090a0a0a0a0a0a0a0a0a090603000000000000000000000000000000000000000000000000000000000000000000000009111920262a2c2c2c2c2c2c2c2c2c2c2c2b28231c150d0300000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0a0a0a0a0a0a0978b8074685c5044382c20140800000000000000000000000000000b17232e3a46525e6a76828e9aa0a0a0a0a0a09a8d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6b3ada39b9898989898989898989898989898999a9b9d9fa1a4a7aaa6a39f9a95908a847d766f6860584f473e352c22180e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3a46535f6c7885919daab0a4988b7f73675b4f43372b201409000000000000000000000000000000000000020d18242f3b47535f6b7783909ca8b2a69a8d8174685c4f43362a1d11040000030f1a26323e4a56616d7985919da9a99d9185796d6155493d32261a0e020d1925313d4955616d7985929eaaa59a8e82766a5e52463a2e22170b0000000000000000000000000000000000010c17222c353d444c535a626970787f868e959c9b92887f766c635a51483e352c21160b0000000000000000000000000000000000000000000000000000000000000000000000010c162029323b454e576069737c858e98a19b938c857d766f676059524a41372d21160a0000000000000000000000000000000000000000000000000000030d172029333c454e576069727c858e97a0a19a948d878b9299a0a1988e857c726960564d443a31281f150b010000000000000000000000000008121c252e374049525b656e778089939ca49d97908a888f959ca39d938a81776e645b52493f362d231a10060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121c242c32363839393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393835302921180e04000000000811181f24282a2c2d2e2e2e2e2e2d2c2927231f1a140e0700000000000000000000000000000009141e29333d465059626b747d858d949ba2a8aca59f9a95918d8a878583828181818282838587898b8e92969a9ea3a8a8a29c969089827b736b635b524940372d22170b000000000000060c11141617171717171717171614110c060000000000000000040b10131617171717171717171615120d08010000000000000003090e131516171717171717171615130f090300000000000000000000000000000000000000000000000000000000000000000000070f151a1d1f202020202020202020201e1c17120b030000000000000000000000000000000000000000000000000000000013202c3946535f6c7986939393939393939393877b6f63574b3f33281c1004000000000000000000000000000006121e2a36424e5a66727d8a93939393939393938d807366594d4033261a0d000000000000000d1a2633404d596673808d9aa6acacaca7a5a5a5a5a5a5a5a5a5a5a5a5a5a5a6a7a8a9a7a5a3a09d9a97938e89847e79726c655e564e463d352c231910060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2b3744505c6975828e9aa6b2a79b8f83776b5f53483c31261b100600000000000000000000000000000000000a141f2a35404c58636f7b8793a0acaea2968a7d7165594c4033271b0e02000007131f2b37434f5a66727e8a96a2ada4988c8175695d5145392d211509000915212d3945515d6975818d99a5aa9e92867a6e63574b3f33271b0f030000000000000000000000000000000006121d29343e474f565e656c737b828991989f9b928980766d645a51483f362c231a0f05000000000000000000000000000000000000000000000000000000000000000000000000040e172029333c454e57616a737c868f98a19e978f888179726b635c53493e32261a0e020000000000000000000000000000000000000000000000000000050e17202a333c454e57606a737c858e97a0a59f9894969da4a2988f867c736a60574e443b32281f160d030000000000000000000000000000000a131c252e374049535c656e77818a939ca5a29b959499a0a69d948a81786e655c524940362d241b11080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407080808080808080808080808080808080808080704000000000000000004101a242e363d4245464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464644413b332a20160b00000007111a222a30343738393a3b3b3b3b3a3836332f2b251f19120a0200000000000000000000000006101b26303a454f58626b757e868f979ea6ada8a19a948f8985817d7b787775747474757576787a7c7f8286898e92979da2a8a8a19b948c857d756d645b52493f33281c1004000000010a11181d2123232323232323232323211d18110a010000000000070f161b2022232323232323232323211e19130c030000000000050d141a1f22232323232323232323221f1a140d050000000000000000000000000000000000000000000000000000000000000000000004090e111313131313131313131313120f0b0600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798686868686868686868682766a5e53473b2f23170b000000000000000000000000000000020e1a26313d4955616d7985868686868686868686807366594d4033261a0d000000000000000d1a2633404d596673808d9aa0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09f9f9e9d9c9a999694918e8a87827d78736d67615a534c443c342b231a11070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b2834414d5965727e8a96a2aeab9f93887c7064594d42372c22180e0500000000000000000000000000000009121c26303b46515d6874808c98a4b0aa9e92867a6e6155493d3024180b0000000c1824303c47535f6b77838f9aa6aca094887c7064584c4034281d11050005101d2935414d5965717d8995a1ada3978b7f73675b4f43372c201408000000000000000000000000000000000916222e3a45505961686f767e858d949ba29b928980766d645b52483f362d241a11080000000000000000000000000000000000000000000000000000000000000000000000000000050e17212a333c454e58616a737c868f98a0a09a928b847c756e655a4f42362a1d1004000000000000000000000000000000000000000000000000000000050e18212a333c454e57616a737c858e97a0a0a0a0a0a0a09990877d746a61584e453c322920160d0400000000000000000000000000000000010a131c252e37414a535c656e77818a939ca0a0a0a0a0a09e948b82786f665c534a40372e241b12090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c10131515151515151515151515151515151515151513100c070000000000000a16212c3640484e525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252514c453c32271c110500030e19232c343b4043454647484848484745423f3b36312a241c140c0300000000000000000000010c17222d37424c57616a747e879098a1a9ada59d968f89837d7975716e6c6a6968676768696a6b6d707376797d82878c91979ea4aba59e978f877f766d645b5044382c1f13060000010a131b23292d2f30303030303030302f2d29231b130a0100000008111921272c2f3030303030303030302e2a241d150d03000000050f171f262b2e3030303030303030302e2b261f170f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6b76797979797979797979797971665a4e42362a1e1207000000000000000000000000000000000915212d3945515d697479797979797979797979797165594c403326190d000000000000000d1a2633404d596673808d93939393939393939393939393939393939393939291908f8e8c8a8785827e7a76726d68625c564f49413a322a22191108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825313d4955626e7a86929eaab0a4988c81756a5f54493e342a20170f08020000000000000000000000040a121b242d38424d58636e7985919ca8b1a69a8e82766a5e5245392d211408000005111d2934404c5864707b87939faba79b8f83776b5f54483c3024180c0200000c1825313d4955616d7985919da9a79b8f84786c6054483c3024180c010000000000000000000000000000000c1825323e4a56616b727a818890979ea09c938980776d645b524940362d241b120800000000000000000000000000000000000000000000000000000000000000000000000000000000050f18212a333c464f58616a747d869093939393938e8780776b5e5145382b1e120500000000000000000000000000000000000000000000000000000000060f18212a333c454e58616a737c858f9393939393939390877e746b62584f463c332a20170e04000000000000000000000000000000000000010a131c252f38414a535c656e78818a93939393939393938c827970665d544a41382e251c120900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11181c2021222222222222222222222222222222222221201d18120b03000000000e1a26323d48525a5e5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5d574e44392d211509000914202b353e464c505253545455555453514f4b47423c352e261e150c0200000000000000000007121e29343e49545e68727c869099a2aaaca49b938c847e77726d6965625f5d5c5b5b5b5b5c5d5f616366696d71767b80868c939aa1a9a9a199918980766c6054473b2e211508000008121c252d34393c3d3d3d3d3d3d3d3d3c39342d251c1208000005101a232b32383b3d3d3d3d3d3d3d3d3c3a352f271f150b0000020d17212931373b3d3d3d3d3d3d3d3d3d3b37312921170d03000000000000000000000000000000000000000000000000000000000000000003060808080808080808080807050200000000000000000000000000000000000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c686055493e32261a0e020000000000000000000000000000000005111d2834404c58626a6c6c6c6c6c6c6c6c6c6c6c686055493d3124180b000000000000000d1a2633404d596673808686868686868686868686868686868686868686868585848381807d7b7875726e6a66615c57514b443e3730282018100700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915212d3945515d6975818d99a5b0a99d92877b70655a50463c3229211a130e090603020101010204070a0f151c242d363f49545e6974808b96a1adaca195897d71665a4d4135291d110500000a16212d3945515d6974818c98a4aea3978b7e73675b4f43372b1f13110f0b070814202c3845515d6975818d99a5aca094887c7064584d4135291d11050000000000000000000000000000000d1a2633404d5966737d848b9393939393938a81776e655b524940372e241b1209000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f18212a343d464f58626b747d868686868686868685786b5e5145382b1e12050000000000000000000000000000000000000000000000000000000000060f18212a333c464f58616a737c8686868686868686867e756b625950463d342a21180e050000000000000000000000000000000000000000010a131d262f38414a535d666f78818686868686868686837a70675e544b42382f261c130a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2c29231d150c03000000111e2a36434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6960554a3e3125190c000d1a25313c4750585c5e606161616161605e5b57534d47403830271e140a0000000000000000020d18242f3a45505b65707a848e98a2abada39a9289817a736c66615c595553514f4e4e4e4e4f505254575a5d61656a6f757b81888f979fa7aba39a92887b6e6155483b2e22150800030f1a242e373f45494a4a4a4a4a4a4a4a49453f372e241a0f03000c17212c353d44484a4a4a4a4a4a4a4a4946413931271c12060009141f29333b4247494a4a4a4a4a4a4a4947423b33291f1409000000000000000000000000000000000000000000000000000000000000050b10131515151515151515151514120e090300000000000000000000000000000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5d574e44382d2115090000000000000000000000000000000000000c1824303b4650595e5f5f5f5f5f5f5f5f5f5f5f5d574e43382d211509000000000000000d192633404c59657179797979797979797979797979797979797979797979797877767473716e6c6966625e5a55504b454039332c251e160e0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414d5965717c88949fabaea3988d82776c62584e443b332b241e191512100f0e0d0e0f1113161b20272e363f48515b65707b86919ca7b2a79b9084786d6155493d3125190d0100000e1a26323e4a56616d7985919da1a19e92867a6e62564a3f33271e1e1d1b17120c101c2834404c5865717d8995a1a1a1998d8175695d5145392d2115090000000000000000000000000000000d1a2633404d59667380868686868686868681776e655c534940372e251b12090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f18222b343d475059626b75797979797979797979756a5e5144382b1e1205000000000000000000000000000000000000000000000000000000000000060f18212a343d464f58616a73797979797979797979756c635950473e342b22180f0600000000000000000000000000000000000000000000010b141d262f38414a545d666f7879797979797979797971685e554c423930261d140a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b39342e271e150a000000131f2c3946525f6b76797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797972665a4d4034271a0e00111d2a36424e5962686b6c6d6e6e6e6e6d6a67635e58524a423930261c11070000000000000007131e2a35404b57616c77828c96a0aaaea49b918880776f68615b55514c4946444242414142434446484a4d5155595e646970767d858d959ea8aca295887b6e6155483b2e221508000814202b3640495155565656565656565655514940362b20140805111d28333d474f54565656565656565656524b43392e23170b020e1a25303b454d53565656565656565656534d453b31261a0e02000000000000000000000000000000000000000000000000000000010910171c1f21222222222222222222211e1a140e06000000000000000000000000000000000000000000000000000000000000000a16212c3740484f525353535353535353535353514c453c32271c110500000000000000000000000000000000000008131f2a343e474e525353535353535353535353514c453c32271c1004000000000000000b1824313d495560686c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6a69686664625f5c5956524e4945403a342e28211b130c0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925313d4854606b77838e99a4afa99e93887e746960564d453d36302a25221f1d1b1a1a1b1c1d2023272c32384048515a636d77828c97a2adaca1968a7f73685c5045392d211509000000111e2a36434e5a66727e8a94949494948e82766a5e52463a2e2b2b2b2a28231e170f1824303c4854606c788591949494949185796d62564a3e3125190c0000000000000000000000000000000d192633404c596571797979797979797979786f665c534a41372e251c130900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061019222b343e475059626a6c6c6c6c6c6c6c6c6c6b63594e4235291d100300000000000000000000000000000000000000000000000000000000000000060f18222b343d464f5861696c6c6c6c6c6c6c6c6c6b635a51483e352c22191006000000000000000000000000000000000000000000000000020b141d262f38424b545d666c6c6c6c6c6c6c6c6c6c685f564c433a30271e140b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f383f454848484848484848484848484848484848484845403930261c1106000013202c3946535f6c79868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868174675a4d4134271a0e00131f2c3945525e6a7477797a7b7b7b7b7977746f6a635c544b42382e23180d020000000000010c18242f3b46515d68737e89939ea8b0a69c92897f766d655e56504a45403d3a3736353434353637393b3e4145494e53585e656c737b838c97a4aea295887b6e6155483b2e221508000c1825313c48525b616363636363636363615b52483c3125180c0915212d39454f59606363636363636363625d554a3f34281c0f06121e2a36424d575f6363636363636363635f574d42372b1f12060000000000000000000000000000000000000000000000000000000a131b22282c2e2e2e2e2e2e2e2e2e2e2d2a261f18100600000000000000000000000000000000000000000000000000000000000005101a252e373e4346464646464646464646464645413a332a20160b00000000000000000000000000000000000000020d18222c353c4245464646464646464646464645413a332a20150b00000000000000000915212d38434e575d5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5e5d5c5b59575553504d4a46423e39342f29231d171009020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814202c38434f5b66717d88939ea9afa59a90857b72685f574f48413b36322e2b2928272727282a2c2f33373d434a525a626c757f89949ea9b0a59a8f84796e62574b4034281c1005000000131f2c3945525f6b7783888888888888887d7165594d41383838383837342f28211814202c3844505c687481888888888888887e72665a4d4034271a0e0000000000000000000000000000000b1824313d495560686c6c6c6c6c6c6c6c6c6c665d544a41382f251c130a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071019222c353e4750595e5f5f5f5f5f5f5f5f5f5e5951473d3125190d010000000000000000000000000000000000000000000000000000000000000000061019222b343d464f585e5f5f5f5f5f5f5f5f5f5e5951483f362c231a10070000000000000000000000000000000000000000000000000000020b141d262f39424b545b5f5f5f5f5f5f5f5f5f5f5c564d433a31281e150c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38424a5154555555555555555555555555555555555554514a42382e23170c000013202c3946535f6c798692929292929292929292929292929292929292929292929292929292929292929292929292929292929292928e8174675a4d4134271a0e0013202c3946535f6c79848687888888878684807b756e665d544a3f352a1f1308000000000005111d2935404c57636e79848f9aa5b0a99e948a80766d645b534c453e3934302d2b2928282828292b2c2f3235393d42474d535a6169717c8996a3aea295887b6e6155483b2e221508000f1b2834414d59646d70707070707070706d64594d4134281b0f0b1824313d4a56616b70707070707070706e675c5044372b1e120815212e3a46535e696f707070707070706f695f53473b2e221508000000000000000000000000000000000000000000000000000008121c252d33383b3b3b3b3b3b3b3b3b3b3a36312a22180f0400000000000000000000000000000000000000000000000000000000000009131c252c32373939393939393939393939393835302921180e04000000000000000000000000000000000000000006111a232b31363939393939393939393939393835302921180e04000000000000000004101c27323c454c5153535353535353535353535353535353535353535353525251504e4d4b494644413d3a36322d28231e18120c05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101b27333e4955606b76828c97a1acaca1978d847a71696159524c47423e3a3836353434343536383b3f43484e555c646c757e87919ba5b0a99e94897e73685c51463a2f23170c0000000013202c3946525f6c777b7b7b7b7b7b7b7b786d61554942444444444443403a332a221a1c2834404c5864707a7b7b7b7b7b7b7b7b73665a4d4134271a0e0000000000000000000000000000000915212d38434e575d5f5f5f5f5f5f5f5f5f5f5b544b42382f261d130a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101a232c353e474e52535353535353535353524e483f362b20150900000000000000000000000000000000000000000000000000000000000000000000071019222b343d464d51535353535353535353524e483f362d241a110800000000000000000000000000000000000000000000000000000000020b141d273039424a5052535353535353535353504b443b31281f160c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b27333f4a545c616161616161616161616161616161616161615c544a3f34281c10030013202c3946535f6c7986939f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a8e8174675a4d4134271a0e0013202c3946535f6c798692949495959493908c8680786f665c51463b3025190d02000000000a16222e3a45515d68747f8b96a1acada2978d82786e645b5249413a332d2824211e1c1b1b1b1b1c1e202225292d31363c42484f57636f7c8996a3aea295887b6e6155483b2e22150800101c2936434f5c69757d7d7d7d7d7d7d7d75695c4f4336291c100c1926323f4c5965727c7d7d7d7d7d7d7d786c5f5346392c20130916222f3c4955626f7b7d7d7d7d7d7d7d7b6f6256493c3023160900000000000000000000000000000000000000000000000000040f1a242e373e444748484848484848484846423c342a20160b000000000000000000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2b29241e170f060000000000000000000000000000000000000000000008111920252a2c2c2c2c2c2c2c2c2c2c2c2c2b29241e170f06000000000000000000000b15202a333a4145464646464646464646464646464646464646464646464645444342403e3c3a3734312d2a26211c17120c0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16222d38444f5a65707b85909aa4aea99f968d847b736b645d57524e4a47444341414041424345484b4f545960666e767e879099a3adaba1978c82776c61564b4035291e120700000000111e2b37434f5b656d6e6e6e6e6e6e6e6e6d665c50494f5151515151504b443c342c241c24303c48545f696e6e6e6e6e6e6e6e6e6a61564a3e3225190c00000000000000000000000000000004101c27323c454c5153535353535353535352504a42392f261d140b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a232c353c424546464646464646464645423d362d24190f040000000000000000000000000000000000000000000000000000000000000000000000071019222b343c414546464646464646464645423d362d241b1208000000000000000000000000000000000000000000000000000000000000020b151e2730383f434646464646464646464644403a32291f160d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121e2b37434f5b666d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d665c5044382b1f12060013202c3946535f6c798693a0acacacaca8a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a79a8e8174675a4d4134271a0e0013202c3946535f6c798693a0a1a2a2a19f9c97918a81776d63584c41352a1e1206000000020e1a26323e4a56626d7985909ca7b2a79c91867b70665c524940383028221c181412101013151515151516191d21252b30373e4956636f7c8996a3aea295887b6e6155483b2e22150800101c2936434f5c6976838a8a8a8a8a8a8376695c4f4336291c100c1926323f4c5965727f8a8a8a8a8a8a86796c5f5346392c20130916222f3c4955626f7c898a8a8a8a8a897c6f6356493c30231609000000000000000000000000000000000000000000000000000915202c3640495054555555555555555555534d463c32271c1005000000000000000000000000000000000000000000000000000000000000010910161a1e1f20202020202020202020201f1c18130d05000000000000000000000000000000000000000000000000070e141a1d1f20202020202020202020201f1c18130d050000000000000000000000040e1821293035383939393939393939393939393939393939393939393939383736353432302d2b2825211e1a15110c070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101c27323e49535e69737e88929ca5afa89f968d857d756f69635e5a5653514f4e4d4d4d4e505254575b60656b717880889099a2abaca2998f857b70665b50453a2f23180d01000000000f1b27333e49535b606161616161616161605c544b545b5e5e5e5e5e5c564e463e362d25202c37434d575e6161616161616161615f584f453a2e22160a000000000000000000000000000000000b15202a333a414546464646464646464646433f3830271d140b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a232b3136393939393939393939393936322b241b120800000000000000000000000000000000000000000000000000000000000000000000000000071019222a3035383939393939393939393936322b241b12090000000000000000000000000000000000000000000000000000000000000000030c151e262d33373939393939393939393938342f2820170d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946525f6c777b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b786c6053473a2d2014070013202c3946535f6c798693a0acb4a9a19b9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a8e8174675a4d4134271a0e0013202c3946535f6c7986939d9d9fa2a6aca8a39c938a7f74695e52463a2e22160a00000006121e2a37434f5b67727e8a96a1adaca1968a7f74695f544a40372e261e17110c0a11171c20222222222222222222222225303c4956636f7c8996a3aea295887b6e6155483b2e22150800101c2936434f5c6976839096969696908376695c4f4336291c100c1926323f4c5965727f8c969696969386796c5f5346392c20130916222f3c4955626f7c899696969696897c6f6356493c30231609000000000000000000000000000000000000000000000000020e1a26313d48525b606161616161616161615f584e44382d21150a0000000000000000000000000000000000000000000000000000000000000000050a0e1113131313131313131313131312100c0802000000000000000000000000000000000000000000000000000003090d1113131313131313131313131312100c080200000000000000000000000000060f171e24292b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b2a28272523211e1b1815110d0905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212c37424d57626c76808a939da6aea89f978f87807a746f6a6663605e5c5b5a5a5a5b5c5e6164676b70767c838a929aa2ababa39a90877d73695e54493e34291d120700000000000b16222d38414a5054545454545454545454504a525c666a6b6b6b6b68605850483f372f2726313b454c52545454545454545454534e463d33281d120600000000000000000000000000000000040e1821293035383939393939393939393937332d261e150b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111920262a2c2c2c2c2c2c2c2c2c2c2c2a26211a12090000000000000000000000000000000000000000000000000000000000000000000000000000000710181f25292c2c2c2c2c2c2c2c2c2c2c2a26211a120900000000000000000000000000000000000000000000000000000000000000000000030c141c22272b2c2c2c2c2c2c2c2c2c2c2b28231d160e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986888888888888888888888888888888877a6d6053473a2d2014070013202c3946535f6c798693a0acafa3978f8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8174675a4d4134271a0e0013202c3946535f6c798691909192969ba1a9aea59b91867a6e63574b3e32261a0d0100000a16222e3b47535f6b77838f9ba6b2a79c9085796e63584d43382e251c140c050b141c23282c2e2f2f2f2f2f2f2f2f2f2f2f303c4956636f7c8996a3aea295887b6e6155483b2e22150800101c2936434f5c697683909ca3a39c908376695c4f4336291c100c1926323f4c5965727f8c99a3a3a09386796c5f5346392c20130916222f3c4955626f7c8996a2a3a396897c6f6356493c3023160900000000000000000000000000000000000000000000000007131f2b36424e59646c6e6e6e6e6e6e6e6e6e6a6055493e32261a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d13181c1f202020202020202020202020202020202020202020201f1f1e1d1c1a181714120f0c09050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101b26303b46505a646e78818a949ca4aca9a199928b85807a76726f6c6a696767676768696b6d7073777c81878e949ca3acaaa29991887e756b61574d42382d22170c01000000000005111b262f383f4447484848484848484847454956626e7777777777726a625a51494139312829333b414647484848484848484846423c342b22170c010000000000000000000000000000000000060f171e24292b2c2c2c2c2c2c2c2c2c2c2b27221c140c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e151a1d1f2020202020202020201f1e1a150f080000000000000000000000000000000000000000000000000000000000000000000000000000000000060e14191d1f2020202020202020201f1e1a150f08000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1e202020202020202020201f1c18120c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986939595959595959595959595959594877a6d6053473a2d2014070013202c3946535f6c798693a0acaca0938681818181818181818181818181818181818181818181818181818181818181818181818181818174675a4d4134271a0e0013202c3946535f6c7986858484868a8f97a0aaada2978b7f73675b4e4236291d100400000d1926323e4a57636f7b87939fabaea2978b7f73685c51463b31261c130a0209131d262d34393b3c3c3c3c3c3c3c3c3c3c3c3c3c4956636f7c8996a3aea295887b6e6155483b2e22150800101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c302316090000000000000000000000000000000000000000000000000c18242f3b47535f6a767b7b7b7b7b7b7b7b7b72665a4e42372b1f13070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306090b0d0e0f10111212121111100f0d0c09070401000000000000000000000000000000000000000000000000000000000000000000000000000000000002080c101213131313131313131313131313131313131313131313131211100f0e0c0a080503000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f29343e48525c666f78818a929ba2aaaba49d96918b86827e7b79777574747374747677797c8083888d92999fa6aea7a09890887f766c63594f453b30261b1006000000000000000a141d262d34383a3b3b3b3b3b3b3b3b3b3d4a5763707d848484847c746c635b534b423a322a293036393b3b3b3b3b3b3b3b3b3a37312b2219100500000000000000000000000000000000000000050d13181c1f202020202020202020201e1b17110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e111313131313131313131313110e0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000003080d101213131313131313131313110e0a04000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f121313131313131313131312100c0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0a2a2a2a2a2a2a2a2a2a2a2a094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca093867974747474747474747474747474747474747474747474747474747474747474747474747474746f64584c4033261a0d0013202c3946525f6b7779787777797e858e99a4afa79b8f83766a5e5145382c1f13060004101c2935424e5a66737f8b97a4b0aa9e92867a6e63574b40352a1f150b0105101b252f383f4548484848484848484848484848484956636f7c8996a3aea295887b6e6155483b2e22150800101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c30231609000000000000000000000000000000000000000000000005111d2834404c58636f7b878888888888888882766b5f53473b3024180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000206090d10131517191b1c1d1e1e1e1e1e1e1d1b1a181613110e0a0602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d18222c36404a545d666f78818990989fa5aca8a29c97928e8b888684828181818181828486898c9094999ea4aaa9a39d958e867e756d645a51473d33291f140a0000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e303d4a56636f79848e918e867e756d655d544c443c342b252a2d2e2e2e2e2e2e2e2e2e2d2a262019100700000000000000000000000000000000000000000002080c101213131313131313131313120f0b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986939696969696969696989fa9ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c67676767676767676767676767676767676767676767676767676767676767676767676767645d53483c3024180b00111e2a37434f5a656c6d6b6a6a6d737c87939fabab9f9286796d6054473a2e2115080006131f2c3845515d6a76838f9ba7b2a69a8e82766a5e52463a2f23180d03000a16212c37414a5054555555555555555555555555555556636f7c8996a3aea295887b6e6155483b2e22150800101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c3023160900000000000000000000000000000000000000000000000a16212d3945515c6874808c95959595959593877b6f64584c4034291d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004090e1216191c1f22242627292a2b2b2b2b2b2a2928272522201d1a16120e0a0500000000000000000000000000000000000000000000000000000407080808080808080808080806040000000000000000000000000000000000000000000000000000000000010507080808080808080808080806020000000000000000000000000205080a0a0a0a0a0a0a0a0a09070400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101a242e38424b545d666e777e868d949aa0a6aba8a39e9b979492908f8e8d8d8d8e8f919395989ca0a4a9a9a49e98928b847c746c635b52483f352b21170d02000000000000000000020a11171c1f2121212121212121222e3a47525d68727c86909890877f776f665e564e463d352d2520212121212121212121211e1a150e07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306080a0c0d0e0f0f0f0f0f0e0d0c0a080502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000305080a0c0e0f1011111212121111100e0d0b0907040100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002040608090a0a0b0b0a0a080705030000000000000000000000000000000002040506060606050403010000000000000000000013202c3946535f6c79868989898989898989898d98a4ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a58534b41372b201408000f1b27333e49535b60605f5d5e616b76828e9ba7aea195887b6f6255493c2f231609000915222e3b4754606d7986929eabafa3968a7e7265594d41352a1e120700000e1a26323e49535b61626262626262626262626262626262636f7c8996a3aea295887b6e6155483b2e22150800101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c3023160900000000000000000000000000000000000000000000030f1a26323e4a55616d7985919ca2a2a2a2a2988c8074685d5145392d22160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b10151a1e2225292c2e3032343637373838383837363533312f2c2926231e1a16110c0600000000000000000000000000000000000000000000060c1013151515151515151515151513100b060000000000000000000000000000000000000000000000000002080d11141515151515151515151514120f0a04000000000000000001080d12151617171717171717171614100b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c263039424b545c656d747b83898f959a9fa4a7aba7a4a19f9d9c9b9a9a9a9b9c9d9fa2a4a8aaa6a29d98938d878079726a625a514940362d23190f05000000000000000000000000060c101314151515151515151e2a36414c56606a747e89939991898178706860584f473f372e261e161515151515151514120e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407080808080808080808080808080808080808080704000000000000000000000000000000000000000000000000000000000000000000000206090d10121517191a1b1c1c1c1c1c1b1a181614120f0c08050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005080c0f121417191a1c1d1e1e1e1e1e1e1d1c1b1a181613100d0a070300000000000000000000000000000000000000000000000000000000000000000000000000000000000206090c0f111314161717171717161514120f0d0a060300000000000000000206090c0e10121313131312110f0d0a07040000000000000013202c3946535f6c787c7c7c7c7c7c7c7c7c7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f534d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4c4841392f251a0f03000a16212d3741494f53535251515a66727f8c98a5b0a3968a7d7063574a3d3124170a000b1724313d4a56636f7c8895a1aeaca093877a6e6256493d3125190d010000101d2a36424e5a656d6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f7c8996a3aea295887b6e6155483b2e22150800101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c302316090000000000000000000000000000000000000000000008131f2b37434e5a66727e8a95a1adadacaea89d9185796d61564a3e32261b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000050b11161c21252a2e3235383b3d3f4142434444454544444341403e3c3936322f2b26211c17110b05000000000000000000000000000000000000020a11181c2021222222222222222222211f1c1711090100000000000000000000000000000000000000000000040c13191d2022222222222222222222211f1b150f07000000000000030c13191e2123232323232323232322201c16100800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a141e273039424a535b626a71787e84898f93979b9fa2a4a6a8a9a8a7a7a7a7a8a8a9a8a6a3a19d9a96918d87827c756e67605850483f372e241b11070000000000000000000000000000000406080808080808080e19252f3a444e58626d77818b959b938a827a726a615951494038302820170f080808080807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c10131515151515151515151515151515151515151513110c0700000000000000000000000000000000000000000000000000000000000005090e1216191c1f2123252728292929292828262523211e1b1815110d08040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003080c1114181b1e2123252728292a2b2b2b2b2b2a2928262422201d1a16130f0a0601000000000000000000000000000000000000000000000000000000000000000000000000050a0e1215191b1e20212223242424242322201e1c1916120f0a0601000000050a0e1216191b1d1e1f2020201f1e1c1a1714100b060000000000121e2b3744505c666e6f6f6f6f6f6f6f6f6f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f534641414141414141414141414141414141414141414141414141414141414141414141403c372f271d1309000005101b252f373e44464645444a5764707d8a96a3b0a4978b7e7164574b3e3124180b000d1926333f4c5865727e8b97a4b0aa9d9184786b5f52463a2d211509000000121e2b3845515e6b777b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7c8996a3aea295887b6e6155483b2e22150800101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c30231609000000000000000000000000000000000000000000010c1824303c47535f6b77838e9aa6a7a19fa2a9a1968a7e72665a4f43372b1f140800000000000000000000000000000000000000000000000000000000000000000000000000020910161c22272d31363a3e4144474a4c4d4f505151515151504f4e4c4a4845423f3b37322d28221d17100a03000000000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2e2c28221b130a010000000000000000000000000000000000000000040e161e24292d2e2e2e2e2e2e2e2e2e2e2e2b262019110800000000030d151d242a2e3030303030303030302f2c28211a120800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c151e273038414951585f666d73787e83878b8f9295989a9c9d9e9f9f9f9f9f9e9d9b999794918e8a86817c76706a645d564e463e362d241b12090000000000000000000000000000000000000000000000000008131e28323c46515b656f79848e989c948c847b736b635b524a423a3229211910070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11181c2021222222222222222222222222222222222222201d18120b030000000000000000000000000000000000000000000000000001060c11151a1e2225282b2e3032333535363636353433312f2d2b2824211d19140f0a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f14181d2124282b2d303234353637383838383837363433312f2c2926231f1b16110c07010000000000000000000000000000000000000000000000000000000000000000060b11161a1e2225282a2c2e2f3031313130302e2d2b2825221f1b16120d07060c11161a1e2225282a2b2c2c2c2c2b2a282623201c17110a020000000f1b28333f4a545d6263636363636363636f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f53463934343434343434343434343434343434343434343434343434343434343434343433302b251d150b0100000009131d252d33373a3a393c4956626f7c8895a2afa5988b7e7165584b3e3225180b000e1b2834414e5a6773808d99a6b3a79b8e8275695c5043372a1e1105000000121e2b3845515e6b788588888888888888888888888888888888888d98a4aea295887b6e6155483b2e22150800101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c3023160900000000000000000000000000000000000000000005111d2935404c5864707b87939fa89e959297a0a69a8f83776b5f53483c3024180d010000000000000000000000000000000000000000000000000000000000000000000000050d141b21272d33383d42464a4e515456585a5c5d5d5e5e5e5e5d5c5b595754524e4b47433e39342e28221b140d0600000000000000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b3b3b38332d251c130900000000000000000000000000000000000000020c1620282f35393b3b3b3b3b3b3b3b3b3b3a37322b231a10060000000b151f272f353a3c3d3d3d3d3d3d3d3d3c38332c241a110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151e262f373f464d545b61676d72777b7f8386898b8d8f9091929292929291908e8d8a8885827e7975706b655f59524b443c342c241b12090000000000000000000000000000000000000000000000000000010c16202a353f49535d67727c86909a9e968e857d756d645c544c443b332b22190f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2c29231d150c030000000000000000000000000000000000000000000000060c12171c21262a2e3235383a3d3f4041424242424241403e3c3a3734312d2925201b16100b050000000000000000000000000000000000000000000000000000000000000000000000000000030a10151b2024292d3134373a3c3e4042434444454545444342413f3e3b3936322f2b27221d18120d070000000000000000000000000000000000000000000000000000000000040b11171c21262a2e313437393a3c3d3d3e3e3d3c3b393735322f2b27221d181311171d22262b2e313436383939393938373533302c28221b140b0100000b17232e38424b525556565656565656626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5346392c27272727272727272727272727272727272727272727272727272727272727272624201a130b0300000000010b131b22272b2d2d2f3b4855626e7b8895a2aea5988b7e7165584b3e3225180b00101c2936424f5c6875828f9ba8b2a6998c8073665a4d4134281b0f02000000121e2b3845515e6b78859295959595959595959595959595959595979fa9aea295887b6e6155483b2e22150800101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c302316090000000000000000000000000000000000000000000a16222e3945515d6974818c98a4a4988c868f9ba79f93887c7064584c4135291d1106000000000000000000000000000000000000000000000000000000000000000000000810171e252c33393e44494e52565a5d6063656768696a6b6b6b6b6a69676663615e5b57534e4a453f39332d261f18100800000000000000000000000006111c262f383f454848484848484848484847443f372e251a100500000000000000000000000000000000000009141e28323a41464848484848484848484847433d352c22170c010006121c2731394146494a4a4a4a4a4a4a4a48443e362c22180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151d252d343c434a50565c61666b6f7376797c7e818284858586868685848382807e7b7875726d69645f5a544e474139322a231a120900000000000000000000000000000000000000000000000000000000040e19232d37414b56606a747e89939d9f978f877e766e665e554d453d352b21170c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b39352e271e150b000000000000000000000000000000000000000000040b11171d23282d32363a3e414447494b4d4e4f4f4f4f4f4e4c4b494643403d3935302c27211c161009030000000000000000000000000000000000000000000000000000000000000000000001080e151b21262b3035393d404346494b4d4e50515151515151504f4e4c4a4845423f3b37332e29231e18120b040000000000000000000000000000000000000000000000000000070f151c22282d32363a3e4143454749494a4a4a4a49484644413e3b37332e29241e1c22282e32373b3e414344454646464543423f3c38332d261d1309000006111c27303940464949494949494955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5346392c201a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a18140f0901000000000000010910161b1f20222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00111e2a3744505d6a7683909da9b1a4978b7e7165584b3f3226190c00000000121e2b3845515e6b7885929ea2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a3a9b1aea295887b6e6155483b2e22150800101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c302316090000000000000000000000000000000000000000030f1b27323e4a56626d7985919da9a093877f8b97a3a4988c8175695d51453a2e22160a0000000000000000000000000000000000000000000000000000000000000000010a121a222930373e444a4f555a5e62666a6d6f71737576777778787777757472706d6a67635f5a55504a443e383129221a120a02000000000000000000000b17222d38424a515455555555555555555554504940362c22170d020000000000000000000000000000000006111b26303a444c5255555555555555555555534e473e34291d1206000b17232e39434b52565656565656565656554f483e34291e12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b131b232a31383f454b50565a5f63676a6d707274757778787979797877767573716f6c6965615d59544e49433c362f282019110800000000000000000000000000000000000000000000000000000000000007111b252f39444e58626c76818b959fa1999188807870675f574f473d33281d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f383f454848484848484848484848484848484848484845403930271d120700000000000000000000000000000000000001080f161c23282e34393e42464a4e51535658595b5b5c5c5c5b5a59575553504d4945413c37322d27211b140e070000000000000000000000000000000000000000000000000000000000000000040c131920262c32373c4145494d50535558595b5c5d5e5e5e5e5e5d5c5a595754514e4b47433e3a342f29231d160f080100000000000000000000000000000000000000000000010a111920272d33393e42464a4d505254555657575757565453504e4a47433f3a352f2a272e34393e43474a4d4f515253535252504e4b48443f372f251b100500000a151e272f353a3c3c3c3c3c3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5346392c20130e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0b080300000000000000000000050b0f1215222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00121e2b3845515e6b7784919eaab0a3968a7d7063574a3d3124170b00000000121e2b3845515e6b7885929ea6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a295887b6e6155483b2e22150800101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c3023160900000000000000000000000000000000000000000814202b37434f5b66727e8a96a2a89b8f837b87939fa99d91857a6e62564a3f33271b0f03000000000000000000000000000000000000000000000000000000000000020b131c242c333b42494f555b60656a6e7276797c7e80828384848585848482817f7d7a77736f6b66615b565049423b342c241c140b020000000000000000000f1b27333f4a545c61616161616161616161605b52483e33291f140a000000000000000000000000000000030d18222d37424c565d616161616161616161615f5950453a2e22160a000f1c28343f4a555d626363636363636363615a50463a2e22160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000109111820272d343a3f454a4e53575a5e61636567696a6b6c6c6c6c6b6b6a68676562605c5955514d48433d37312b241d160e07000000000000000000000000000000000000000000000000000000000000000009131d28323c46505a656f79838d98a2a39a928a8279716961594f45392d211509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38424a5154555555555555555555555555555555555554514b42392e23180c0000000000000000000000000000000000040c131a21272e343a3f44494e52565a5d60626466676869696968676664625f5c5955514d48433e38322c261f18110a030000000000000000000000000000000000000000000000000000000000070e161d242b31373d43484d5155595c5f62646668696a6b6b6b6b6a6a69676563615e5b57534f4a45403a342e28211a120b030000000000000000000000000000000000000000020b131b232b32383f444a4e5356595c5f6062636364646362615f5d5a57534f4b46403b3532393f454a4f53575a5c5e5f5f5f5f5e5d5b5854504941372d22160a0000030c151d24292d2f303030303c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00121f2c3945525f6b7885929fabafa296897c6f6256493c3023160900000000121e2b3845515e6b7885929a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a95887b6e6155483b2e22150800101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c3023160900000000000000000000000000000000000000010d1924303c48545f6b77838f9ba6a3978b7f77838f9ba7a2968a7e73675b4f43382c2014080000000000000000000000000000000000000000000000000000000000020b141d252e363e454c535a60666c71767a7e8285888b8d8e909191929191908f8d8b898683807b77726d67615b544d463e362e261d140b020000000000000000121e2b37434f5b666d6e6e6e6e6e6e6e6e6e6c645a50453b30261b110700000000000000000000000000000a141f29343e49545e686e6e6e6e6e6e6e6e6e6e6b61564b3e3226190c00121e2b3744505c676e70707070707070706c62574b3e3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e151c22282e34393e43474b4e515457595b5c5d5e5f5f5f5f5f5e5d5c5a585653504d4945413c37322c262019130b04000000000000000000000000000000000000000000000000000000000000000000010c16202a343e49535d67717b86909aa0a09c948b837b736a61564a3d3125180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b27333f4a545c616161616161616161616161616161616161615c544b4034281c1004000000000000000000000000000000070e161d252c32393f454b50555a5e6266696c6f71737475757575757472706e6c6965615d59544f49443e37312a231c140d0500000000000000000000000000000000000000000000000000000009111920282f363c43494e54585d6165696c6e7173747677777878777776757472706d6a67635f5b56514b464039322b241d150d04000000000000000000000000000000000000020b141d252d353c434a50555a5f6366696b6d6f70707171706f6e6c6966635f5b56514c46403c434a50565b5f6366696a6c6c6c6c6b696764605b53493e33271b0f000000030b12191d21232323232f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5346392c201306040404040404040404040404040404040404040404040404040301000000000000000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00131f2c3946525f6c7986929facaea295887b6f6255483c2f22150900000000121e2b3845515e6b78858d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d887b6e6155483b2e22150800101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c302316090000000000000000000000000000000000000006121d2935414d5964707c88949fab9f93877b737f8b97a3a79b8f83776c6054483c3125190d01000000000000000000000000000000000000000000000000000000010a141d262f3740484f575e656b72777d82878b8e929597999b9c9d9e9e9e9e9d9c9a9896938f8b87837d78726c655f57504840382f261d140b020000000000000013202c3946525f6c777b7b7b7b7b7b7b7b7b766c61574c42382d23180e0300000000000000000000000007111c26313b46505b65707a7b7b7b7b7b7b7b7b7b73675a4d4134271a0e0013202c3946535f6c787d7d7d7d7d7d7d7d73665a4d4034271a0d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a11171d23282d32373b3e4245484a4c4e4f5151525253525251504f4d4c494744413d3935302b26211b150e08010000000000000000000000000000000000000000000000000000000000000000000000040e18222d37414b555f6a747e889293939393938d857c7266594c3f3326190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121e2b37434f5b666d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d665c5145382c1f1306000000000000000000000000000008111820282f363d444a50565c61666a6e7276797b7e80818282828282817f7d7b7875716d6965605a554f49423c352e261f170f060000000000000000000000000000000000000000000000000109121a232b323941474e545a5f64696d7175787b7d8081828484858584848382817e7c7a77736f6b67625c57514b443d362e271f160e0500000000000000000000000000000000000a141d262f373f474e555b61666b6f7275787a7b7c7d7d7d7d7c7a7876736f6b67625d57514b474e555b61666b6f72757778797979787674706c655b4f43372a1e110000000001070d1114161616222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5346392c20131111111111111111111111111111111111111111111111111111100d0a0500000000000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0013202c3946535f6c7986939facaea295887b6e6155483b2e22150800000000121e2b3845515e6b78808080808080808080808080808080808080808080808080807b6e6155483b2e22150800101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c30231609000000000000000000000000000000000000000b16222e3a46525d6975818d98a4a79b8f83776e7b87939faba094887c7065594d41352a1e120600000000000000000000000000000000000000000000000000000009131c262f384149525a616970767d83898e92979b9ea1a4a6a8a9aaa9a8a8a9a9a8a7a5a29f9b98938e89847d777069625a524a41392f261d140a00000000000000131f2c3945525e6b758088888888888888887e73695e54493f342a20150b0000000000000000000000030e18232d38424d57626c778288888888888888867c7166594d4034271a0d0013202c3946535f6c79868a8a8a8a8a8a8173675a4d4034271a0d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c12171d22262a2e3236393b3e40414344454546464645454442413f3d3a3734312d2924201b15100a03000000000000000000000000000000000000000000000000000000000000000000000000000006111b252f39434e58626c76818686868686868686807366594c403326190d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946525f6c777b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b786d6054473a2d2114070000000000000000000000000109121a222a323a41484f555c61676d72767b7e8285888a8c8e8f8f8f8f8e8d8c8a8785817d7975706b66605a544d463f3830292118100700000000000000000000000000000000000000000000000a131b242c353c444b52595f656b7075797d8185878a8c8e8f909191929191908f8d8b898683807b77736d68625c564f484039312820170f0600000000000000000000000000000008121c262f384149515960666c72777b7e82848688898a8a8a8a898785827f7b77736e68635c56515960666d72777b7f8284858686868483807c776b5f5246392c2013000000000000010508090916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5346392c201d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1c1a151009020000000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0013202c3946535f6c7986929facaea295887b6e6155483b2f22150800000000111e2a3743505c677173737373737373737373737373737373737373737373737373726a5f53473a2d21140800101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c3023160900000000000000000000000000000000000004101b27333f4b56626e7a86919da9a3978b7f736a77838f9ba7a4998d8175695e52463a2e23170b000000000000000000000000000000000000000000000000000007111b252e38414a535b646b737a81888e94999ea3a7aaa9a6a3a09f9d9c9c9c9c9d9ea0a2a5a9a8a49f9a958f89827b746c645c534b42382f261c1208000000000000111d2a36424e59646e78838d95959595958f857a70665b51463c31271c1208000000000000000000000b15202a353f4a545f69747e89939595959594897f746a6055493d3125180c0013202c3946535f6c798693969696968d8173675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001060c11161a1e2226292c2f31333536373839393939393837363432302e2b2825211d19140f0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000009131d27323c46505a646f787979797979797979797165584c3f3326190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986888888888888888888888888888888877a6d6154473a2e2114070000000000000000000000010a131b242c343c444b535a60676d73787d82878b8e9295979997969696969698989694918d8a86817c77716b655f58514a423b332a2219110800000000000000000000000000000000000000000009121c252e363e464e565d646a70767c81858a8d919496999a9c9d9e9e9e9e9e9d9b9a9895928f8c88837e79736d676059524a433a322921180e050000000000000000000000000005101a242e38414a535b636a71787d83878b8e91939596979797969594918f8b88837e79746e67615b636a71787e83878b8e9092939392918f8c86796c5f5346392c2013000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5346392c2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2926211b140c0300000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00131f2c3946525f6c7986929facafa295887b6f6255493c2f221609000000000f1b2834404b565f65666666666666666666666666666666666666666666666666666661584e42372b1e120600101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c302316090000000000000000000000000000000000000914202c38444f5b67737e8a96a2ab9f93877b6f66737e8b97a3a99e92867a6e62574b3f33271c1004000000000000000000000000000000000000000000000000040f19232d37404a535c656d757d858c93999fa5aaaba6a19d9a969492908f8f8f8f90919396999da1a6aba6a09a948d857e766e655d544b41382e241a100500000000000e1a26323d48525c66717b85909aa2a2a1978c82776d62584e43392e24190f04000000000000000007121c27313c46515b66707b86909ba2a2a1978c82776d63584e43382d2115090013202c3946535f6c798693a0a3a39a8d8173675a4d4034271a0d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0e12161a1d2022242628292b2b2c2c2c2c2c2b2a29282624211f1c1815110d080300000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b16202a343e48535d666c6c6c6c6c6c6c6c6c6c685f54493d3024170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986939595959595959595959595959594877a6d6154473a2e21140700000000000000000000000a131c252d363e464e565d646b72787e84898e93979793908e8c8a898989898a8b8c8f91949896928d88827d76706a635c544c453c342c231a11070000000000000000000000000000000000000008121b242e374048505860676f757c82878d91969a9da0a3a5a7a9a9a8a8a7a8a8a9a8a6a4a29f9c98948f8a857f78726b645c554c443b332a20170d040000000000000000000000010c17212c36404a535c656d757c83898e93979b9da0a1a3a2a2a2a2a2a09e9b98948f8a857f79726b656d757c83898f93979b9d9fa0a09f9e9c9386796c5f5346392c2013000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f534639373737373737373737373737373737373737373737373737373737373735322c261e150b01000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00121f2c3845525f6b7885929eabafa296897c6f6356493d3023160a000000000b17232e39444d54595959595959595959595959595959595959595959595959595959564f463c31261a0e0200101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c302316090000000000000000000000000000000000020d1925313d4854606c78848f9ba7a79b8f83776b626e7a87939faba2968b7f73675b5044382c2015090000000000000000000000000000000000000000000000010b16202b353f49525c656e7780878f979ea4abaca6a09a95918d8a878584838282828385878a8d91959aa0a6aba59e97908880776f665d534a40362c22170d02000000000915202b36404a555f69737e88929da7a89e94897e746a5f554a40362b21160c01000000000000040f19242e39434e58636d78828d97a2aca49a8f857b70665b51473c32271c11050013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060a0d101316181a1b1d1e1f1f1f201f1f1e1e1c1b191715120f0c09050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e18222c37414b545b5f5f5f5f5f5f5f5f5f5f5d564d43382c2014080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0a2a2a2a2a2a2a2a2a2a2a2a194877a6d6154473a2e2114070000000000000000000009121c252e374048505860686f767d83898f9597938e8a8784817f7e7d7c7c7c7d7e808285888b8f9499938e88827b746d665e564e463e352c23191006000000000000000000000000000000000006101a242d374049525a626a727980878d93989da2a6a9a8a5a29f9d9c9b9b9a9b9b9c9ea0a2a5a8a8a4a09b96908a847d766e665e564d453c32291f150c010000000000000000000007121e28333e48525c656e777f878e949a9fa3a39f9c99979695959597999b9fa3a09b96918a847d756e777f878e949a9fa4a7a5a2a09f9e9fa09386796c5f5346392c2013000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5346444444444444444444444444444444444444444444444444444444444444423e3730271d1208000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00111e2b3844515e6b7784919daab0a3978a7d7064574a3e3124180b0000000007121d28323b43494c4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4c4a443d342a2015090000101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c30231609000000000000000000000000000000000006121e2a36414d5965717c8894a0aca3978b7f73675e6a76838f9ba7a79b9084786c6054493d3125190e020000000000000000000000000000000000000000000008121d28323d47515b646e7780899199a1a8afa8a19b948f8a85817d7b79777675757577787a7d8185898f949ba1a9a9a29a928981786f655c52483e33291f140900000000040f1a242e38434d57626c76818b959faaa59b90867b71675c52473d32281e13090000000000010b16202b35404a555f6a747f89949ea9a79d93887e73695e544a3f352a20150b000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010407090b0d0f10111213131313121211100e0d0b08060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101a252f39424a5053535353535353535353514c443b31271b10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaaa098969696969696969694877a6d6154473a2e21140700000000000000000007111b242e374049525a626a727981888e9597918c87827e7a77757371706f6f6f70717375787b7f83888d9298938d867f787068605850473e352b22180f05000000000000000000000000000000030d18222c363f49525b646c747c848b92989ea4a9aaa4a09c989593918f8e8e8e8e8f90919396999ca0a5aaa6a19b958e87807870685f574e443b31271d1309000000000000000000010d18242f3a454f5a646e77808991989fa5a39d98938f8c8a898888898a8c8f93979ca1a29c958f878078818991989fa6a7a19c989593929292939386796c5f5346392c2013000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f53505050505050505050505050505050505050505050505050505050505050504e4942392f24190d020000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00111d2a3743505d697683909ca9b1a5988b7e7265594c3f3326190d00000000010c16202931383d3f40404040404040404040404040404040404040404040404040403e39332b22180e030000101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c3023160900000000000000000000000000000000000b17232f3a46525e6a75818d99a5ab9f93877b6f635a66727e8b97a3aca094897d7165594d42362a1e1207000000000000000000000000000000000000000000030e19242f39444e59636d768089929ba3abaea69e979089837e7975716e6c6a696968696a6c6e7174797e838990979ea6aca49b938a81776d645a4f453b30261b10050000000008121c27313b46505a646f79838e98a2aca2988d83786e63594f443a2f251a10060000000008121d27323c47515c66717c86919ba6aaa0968b81766c61574d42382d23190e04000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131d2730383f444646464646464646464644403a322920150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca5998e898989898989898989877a6d6154473a2e2114070000000000000000050f19232d364049525b646c747c848b9298918b85807b76726e6b68666463626263636567696c6f73777c81878d9398918a827a726a625950473e342a21170d0200000000000000000000000000000a151f29343e48515b646d767e868e959da3a9aaa49e9994908c898684838281818182838587898c9094999ea4aaa6a099928a827a716960564d43392f251b1006000000000000000007121e2a35404b56616c768089929ba3a8a099928c8783807d7c7b7b7c7d8083878b90959ba2a099928a828a939ba3aaa39c96918c8986858585868886796c5f5346392c2013000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5a544b40352a1e12060000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000f1c2935424f5b6875828e9ba7b3a6998d8074675a4e4135281c0f0300000000040e171f262c30333333333333333333333333333333333333333333333333333333312d2821191007000000101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c302316090000000000000000000000000000000004101c28333f4b57636e7a86929eaaa69a8f83776b5e56626e7a86929eaaa5998d82766a5e52463b2f23170b00000000000000000000000000000000000000000009141f2a35404b56606a757f89929ba4adada49c948c857e78726d6965625f5e5c5c5b5c5d5f6165686d72787e858d949ca5ada59c938980766c61574c42372c21160b00000000000b151f29343e48535d67717c86909ba5aa9f958a80756b60564c41372c22170d020000050f1a242f39444e59636e78838d98a2ada3998e84796f645a50453b30261c110700000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000103050608090a0a0b0b0b0a09080706040200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151e262e33373939393939393939393938352f2920170e03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7c7c7c7c7c7c7c7c7c796d6054473a2e21140700000000000000020d17212b353f48525b646d757e868e96948d87807a746f6a66625f5c59585656555657585a5c5f63676b70767b82888f96948c847c736b625950463c33291e140a0000000000000000000000000006111c26313b465059636d767f889098a0a7aea69f99938d8884807c7a7776757474747576787a7d8084888d93999fa6aba49c948c847b72685f554b41372d22170d02000000000000000b17232f3a46515d68737d88929ba4a79e968e87817b7773716f6f6e6f7173767a7f848a91979fa49c948f939ca5a8a098918b85807c7a7878797a7c7e796c5f5346392c2013000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a655d52463a2e2215090000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000e1b2734414d5a6673808c99a6b2a89b8f8276695d5044372b1e12060000000000050d151b202426262626262626262626262626262626262626262626262626262625221d170f0700000000101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c30231609000000000000000000000000000000000915212c3844505c67737f8b97a3ada2968a7e72665a525e6a76828e99a5aa9e92867a6f63574b3f34281c100400000000000000000000000000000000000000030f1a25313c47525d67727c87919aa4adada49b928a827a736d67615d59555351504f4f4f515255585c61676d737b828a939ca5aea59b92887d73695e53493e33281d110600000000030d18222c36414b55606a747e89939da8a69c92877d72685d53483e34291f140a00010c16212b36404b55606a75808a959faaa69c91877c72685d53483e33291f140a0000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d090907050300000000000000000001040608090a0a090806040100000000000000000000000000000000000000000000000000000000000000000000000105080b0d101113151616171717171716151412110f0c09060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c141c22272b2c2c2c2c2c2c2c2c2c2c2b29241e170e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca4978a7d706f6f6f6f6f6f6f6f6e675d5145392c201306000000000000000a141f29333d47515a646d767f889098918a837b756f69635e5a56524f4d4b4a4949494a4b4d5053575b60656a70767d848b93968e867d746b61584e443b30261c11070000000000000000000000020d18232d38434d57626b757f88919aa2aaaca49c958e87827c7773706d6b6968676767686a6b6e7074787c82878e959ca4aca69e968d847a71675d53493e34291e1308000000000000030f1c28343f4b57636e79848f9aa4a99f958c847c756f6b67646362626264676a6e73797f868d959da69e9c9ea5a79e968e86807974706d6b6b6c6d6f7272695d5145382c1f12000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca0938679777777777777777777777777777777777777777777777777777777777777777777766e63564a3d3124170b0000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000c1926323f4b5865717e8a97a3b0aa9e9185786c5f53473a2e221609000000000000030a101418191a1a1a1a1a1a1a1a1a1a1a1b22282c2f2f2e2a2723201c1a1a1a1815110c050000000000101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c30231609000000000000000000000000000000020e1a25313d4955606c7884909ca7a99d9185796d61564d5965717d8995a1aca3978b8073685c5044382d211509000000000000000000000000000000000000000914202b37424d58636e79848e98a3acafa59b928980787068625b56514c494644434242434446494c50565b62697078818a939ca5ada3998f857a70655a4f44392e23170c000000000006101a252f39434e58626d77818c96a0aaa3998e84796f655a50453b30261c110709131e28333d48525d67727c87919ca6a99f948a80756b60564b41372c22170d020000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a17161514120f0c080400000000050a0d111315161717161413100d0a0702000000000000000000000000000000000000000000000000000000000001060a0e1114171a1c1e2021222324242424242322211f1d1b1916130f0c08040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1e202020202020202020201f1c18130c050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca4978a7d706363636363636363625d554b4035291d100400000000000006111b26303b454f59636c767f8891988f878078716a635d58535252514c453e3d3c3c3c3d3f4144494f5254595f656b7279818991988f867d736a60564c42382e23180e030000000000000000000008131e29343f4a545f69737d87919aa3acaba29a928a837c76706c6764615e5d5b5b5b5b5c5d5f6164686c71767c838a929aa2aba89f968c83796f655b50453b30251a0f04000000000007131f2c3844505c68737f8b96a1aba1978d837a726a645f5b5856555556585a5e63686e747b838b949faaa8aaa99e958c847c756e6864605f5f5f6063666660574c4135291d10000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acada09387848484848484848484848484848484848484848484848484848484848484848484847e7164574b3e3124180b0000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000a1724303d4956626f7b8894a1adada094887b6f63564a3e32261a0e020000000000000004080b0d0d0d0d0d0d0d0d0d0d131c252d34393b3c3a37332f2c2825211d19140e07000000000000101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c3023160900000000000000000000000000000007131e2a36424e5965717d8995a0aca4988c8175695d514955616c7884909ca8a89c9084786d6155493d31261a0e020000000000000000000000000000000000020e1a25313c48535e6a75808b95a0aab1a79d938980776e665e57504a45403d3a383636353637393c40454a50575f666f77818a949da7aba1978c82776c61564a3f34281d1105000000000009131d27323c46515b656f7a848e99a3aba0968b81766c61574d42382d23180e101a252f3a444f59646e79838e98a3aca2978d83786e63594e443a2f251a1006000000000013202c3946535f6c798693a0aca79a8d8173675a4d40342723232322201e1c1814100b05050b11161a1d202223232323211f1d1a16130e08010000000000000000000000000000000000000000000000000003080d12161a1d212426292b2c2e2f303031313130302f2d2c2a2825221f1c1814100b060100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f121313131313131313131312100c0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca4978a7d70635756565656565656524c43392f24180c000000000000010c17222d38424d57616b757e8891978e867d756e665f5f5f5f5f5f5f5d574f453a302f303135404a535b5e5f5f5f5f61686f777f8790988f867c72685e544a3f352a1f1409000000000000000000020e1924303b46515b66717b858f99a3acaba29990888078716b65605b575452504f4e4e4e4f505255585b60656b717880889099a2aba89f958b81776c62574c41362b20150900000000000a16232f3b4854606c7884909ca7a69b90857b71686059534e4b494848494b4e52575c62697179828f9ba8b5b1a5988c837a726a635d585452525254565a5a564e453b3024190d000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acafa499929090909090909090909090909090909090909090909090909090909090909090908b7e7164574b3e3124180b0000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000815212e3a4753606c7985919eaab0a3978b7e72665a4e42362b1f1308000000000000000000000000000000000000040f1a242e373f45484946433f3c3834312d2925201911080000000000101c2936434f5c697683909ca9a99c908376695c4f4336291c100c1926323f4c5965727f8c99a6aca09386796c5f5346392c20130916222f3c4955626f7c8996a2afa396897c6f6356493c302316090000000000000000000000000000000c17232f3b47525e6a76828e99a5ab9f94887c7064584c44505c6874808b97a3aca195897d71655a4e42362a1f1307000000000000000000000000000000000007131f2a36424d5964707b86919ca7b2aa9f958b81776e655c544c453f3934302d2b2a2929292b2d3034393f454d545d656e78828b95a0aaa89e93887d72675b5045392d2115080000000000010b16202a343f49535e68727c87919ba6a79d93887e73695e54493f352a201517222c37414c56616b76808b95a0aaa59a90867b71665c51473d32281d130900000000000013202c3946535f6c798693a0aca79a8d8173675a4d40342f3030302f2d2b2824201c161110171c2126292c2e2f30302f2e2c2926231f19120b020000000000000000000000000000000000000000000003090f14191e22262a2d30333537393b3c3d3d3e3e3d3d3c3b3a383634322f2b2824201b17110c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a49494949494946413a31281d120700000000000008131e29343f49545e69737d8791988e857c746b6360696b6b6b6b6b6b6961564b3f332625303b46515c656b6b6b6b6b6b6b6a6d757e8790988e847a70665b51463c31261b1004000000000000000008131f2a35414c57626d78838d97a1abada39990877e766e666059544f4b48454342414141424446484b4f545a60666e767e879099a3ada79d93897e73695e53483d31261a0f03000000000d1926323f4b5764707c8895a1aca1958a7e73695f564e47423f3d3c3c3d3f42464d57616b757e88929daab1b1a4988c81766c6158524c48454546474a4d4d4a443c33291f1308000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acb5aba39e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d988b7e7164574b3e3124180b0000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0006121f2b3844505d6975828e9aa7b3a79b8f83766a5f53473b30251a0f0500000000000000000000000000000000000a15202c364049505555534f4b4844413d3936312b231a110700000000101c2936434f5c697683909ca9a99c908376695d5043362a1d100c1926323f4c5965727f8c99a6aca09386796c5f5346392d20130916222f3c4955626f7c8996a2afa396897c6f6356493c30231609000000000000000000000000000005101c2834404b57636f7b87929eaaa79b8f83776b5f54483f4b57636f7b87939faaa59a8e82766a5f53473b2f23180c00000000000000000000000000000000000b17232f3b47525e6a75818c98a3aeaea3988e83796f655c534a423a342e2824211e1d1c1c1d1e2024282e343b434b535c666f79848e98a3aaa49a8f83786d6156493d3124170b000000000000040e18232d37414c56606b757f8a949ea8a49a8f857b70665b51463c32271d1e29333e48535d68727d87929ca7a89d93897e74695f544a40352b20160c0100000000000013202c3946535f6c798693a0aca79a8d8173675a4d403b3c3d3d3c3b3a3734302c27221c1b22282d3236393b3c3d3d3c3a3836322f2a241d140b010000000000000000000000000000000000000002080f141a20252a2e3236393c3f4244464748494a4a4a4a4a4948474543413e3b3834302c27221d17120b050000000000000000000000000000000000000000000000000407080808080808080808080602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002050708080808080808080706030000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3c3c3c3c3c3a362f281f160b010000000000020e19242f3a45505b66707a858f998f867c736a625a677278787878787873675b4e4235282c37424d58636e7778787878787874696c757e8791968c82786d63584d42372c21160a00000000000000010d1824303b47525d68747e8a949fa9afa59b91877e756c645c554e48433f3b3937353434353537393c3f44494e555c646c757e87919ba5afa59a90857a6f64594e42372b201409000000000f1b2835414e5a6773808c98a5a89c9084786d62574d443c3732302f2f3037414b555f69737d87909aa4a8a4a5a89e93887d73685d52473c3938393b3e40403e39322a21170d02000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acb9b3aca8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a4988b7e7164574b3e3124180b0000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00030f1c2835414d5a66727e8b97a3afab9f93877b6f63584c41362b21170d0400000000000000000000000000000007111c26313d48525b61625f5b5854504d4946423c352c23190e03000000101c2936434f5c697683909ca9aa9d9083766a5d5044372a1d110c1926323f4c5965727f8c99a6ada09386796d6053473a2d20140916222f3c4955626f7c8996a2afa396897c6f6356493c3023160900000000000000000000000000000915212d3944505c6874808b97a3aea2968a7e72675b4f433b47535e6a76828e9aa6aa9e93877b6f63584c4034281d1105000000000000000000000000000000030f1b2834404b57636f7b86929da9b3a89d92877c71675d534a41383029221d181412100f0f101114181d22293139414a545e67727c87919c9e99938d887e7265584b3f3225180c0000000000000006111b25303a444e59636d78828c97a1aba1978c82776d63584e43392e2425303a454f5a646f79848f99a4aba0968c81776c62584d43382e23190f040000000000000013202c3946535f6c798693a0aca79a8d8173675a4d454749494a49484644403d38332d27252c33393e424547494a4a494745423f3b362e261d1309000000000000000000000000000000000000060d131a20262b31353a3e4246494c4e5152545556575757575756555352504d4a4744403c38332e28231d171009020000000000000000000000000000000000000000060c101315151515151515151514120e0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e1214151515151515151514120f0a05000000000013202c3946535f6c798693a0aca4978a7d7063574a3d303030302f2e2a241e160d0400000000000008131f2a35414c57626d77828c9791877d736a61585b687582858585858275685b4f423528323d48535e69747f858585858581766a626b757e8993948a7f74695f54493d32271c100500000000000006121d2935414c58636e7a85909ba6b0a89e93897f756c635a524a433d38332f2c2a29282828292a2d2f33383d434a525a636c758089949ea9aca1978c81756a5f53483c3125190e02000000111d2a3743505c6976828f9ba8a5998c8074685c51453b322b2623222a343e49535d67717b858f99a2a69e98989ea49a8f84796e63584d42372c2c2e323434322d2821180f0600000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acb4aaa19c9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b988b7e7164574b3e3124180b0000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000c1925313e4a56626e7a87939eaaafa3978c8074695e53483d33281f160e0701000000000000000000000002081019232d38434e59646d6f6b6864605d5955524e473e352a1f1408000000101c2936434f5c697683909ca9aa9e9184776b5e5145382b1f120c1926323f4c5965727f8c99a6ada194877a6e6154483b2e22150916222f3c4955626f7c8996a2afa396897c6f6356493c3023160900000000000000000000000000020e1a26323e4955616d7884909ca8a99d91867a6e62564a3e36424e5a66727d8995a1ada3978c8074685c5145392d21160a00000000000000000000000000000007131f2c3844505c6874808b97a3aeada2968b80756a60554b41382f261e17110c08050300000205080c11171f272f38424c56606a75808a95938d88827c766f63574b3e3125180b000000000000000009141e28323d47515c66707a858f99a4a99e94897f746a5f554b40362b2d37424c57616c76818b96a0aba3998f847a6f655b50463b31271c1207000000000000000013202c3946535f6c798693a0aca79a8d8173675a4f5254555656565553504d49443e39322f373e444a4e52545656565554514e4b4740382f251a0f04000000000000000000000000000000010910171e252b31373c41464a4e5255585b5d5f61626363646464636261605e5c5a5754504c48443f3a342e28211b140c050000000000000000000000000000000000020a11181c20212222222222222222211e1a150e070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e141a1e202121212121212121211f1b1610080000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024232323211e19130c04000000000000020d1925303b47525d68737e899494897f756b62584f5b6875828e92928f8275685b4f42352e39444f5a65707b869192928f857a6f645a636d76818b9591867b70655a4f43382d21160a0000000000000a16222e3a46515d6974808b96a1adaca1978c82776d635a51484039322c2723201d1c1b1b1b1c1e2023272c32384048515a636d77828d97a2ada89d92877b7065594d42362a1e1206000000121f2b3845515e6b7784919daaa3968a7d7064584c403429201a1d27323c46505a656f79838d97a1a89e958c8c96a0a1968b80756a5f54483d32262225272725221d160f060000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acafa398908e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8b7e7164574b3e3124180b0000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000915222e3a46525e6a76828e9aa5b1a89d91867a6f64594f443a31282018120d08050302010101020406090e131a222b353f4a545f6a767b7774706d6965625e5950473c3024180c000000101c2936434f5c697683909ca9ab9f9286796c6053463a2d21140d1926333f4c5966727f8c99a6afa295897c6f6356493d3024170b1623303c4956636f7c8996a2afa396897c6f6356493c302316090000000000000000000000000007131f2b37424e5a66727d8995a1ada5998d8175695d51463a323d4955616d7985919ca8a89c9185796d61554a3e32261a0f0300000000000000000000000000000b17232f3c4854606c7884909ca8b4a89c91857a6f64594e44392f261d140d0600000000000000000000060d151d26303a444e59636e79848d88827c76716b655d52473b2f22160a0000000000000000020c16212b353f4a545e69737d88929ca6a59b91867c71675c52473d33343e49535e68737d88939da8a79c92877d72685e53493e342a1f150a00000000000000000013202c3946535f6c798693a0aca79a8d8173675a5b5e6162636363615f5c59554f4a443d39414950555a5e6162636362605e5b57524a41362b2014080000000000000000000000000000030b131b222930363c42484d52565a5e6265676a6c6d6f6f70717170706f6e6d6b696663605c58544f4a453f39332c251e170f07000000000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2b26201910070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000710181f262a2d2e2e2e2e2e2e2e2e2d2b27211a120900000013202c3946535f6c798693a0aca4978a7d7063574a3d302417161615120d08010000000000000007131e2a35414c58636e7a8590978c82776d6359504e5b6875828e9b9c8f8275685b4f4235343f4a55606b76818c979e93897e73685d535b656f79848e988d82766b6055493e32271b0f0300000000020e1b27333f4a56626e7a85919ca8b2a69b90857a70655b51483f362e27201b1713110f0e0e0e0f1114171b21272e363f48515b66707b86919ca8afa3988d81756a5e52463b2f23170b000000131f2c3946525f6c7985929faba194887b6e6255483c3023181a242f39434e58626c76818b959fa9a0968c83848e99a49c91867b70655a4e43382c21191a1a1916110b04000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386828282828282828282828282828282828282828282828282828282828282828282827e7164574b3e3124180b0000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000005121e2a36424e5a66717d8995a0acaea2978c81766b60564c433a322a231d191512100e0e0d0e0f101216191e252c343d47515b66717c8784807c7975726e6a62584d4135281c0f030000101c2936434f5c697683909ca9ada194877b6e6255493c3024180d1a2733404d596673808c99a6b0a4978a7e7165584c3f33271a0e1723303d4a5663707d8996a3b0a396897c6f6356493c30231609000000000000000000000000000c1824303b47535f6b76828e9aa6aca094887c7064594d41352d3945515c6874808c98a4ada195897e72665a4e43372b1f130800000000000000000000000000010e1a27333f4b5864707c8895a1adafa3978b8074695d52473c32271d140b02000000000000000000000000030b141e28323c47525c68737e827c76716b65605a534b41362a1f1307000000000000000000040f19232e38424c57616b76808a959fa9a2988d83786e64594f443a3b46505b65707a858f9aa4aa9f958a80756b61564c41372d22180d0300000000000000000013202c3946535f6c798693a0aca79a8d81736764686b6d6f70706f6e6c6965605b554e47424b535a61666a6d6f70706f6d6a67635c53483c3124180c00000000000000000000000000040d151d252c343a41484e53595e62676a6e717476787a7b7c7d7d7d7d7d7c7b79777573706c6965605b56504b443e3730292119110900000000000000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b3a37312b2219100500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f19222a31363a3b3b3b3b3b3b3b3b3a37322c241b1207000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a090805020000000000000000000b17232f3b46525e6974808b9691867b70665b51474e5b6875828e9b9c8f8275685b4f42353b46515c67727d88939e978d82776c61574c535d67727c879293887c71665a4f43372c2014080000000006121f2b37434f5b67737e8a96a2adaca1958a7e73695e53493f362d241c150f0b0704010000000205070b10151c242d36404a545f6974808b96a2aea99e92867a6f63574b3f33271b0e02000013202c3946535f6c798693a0aca094877a6d6054473a2d2117212c36414b555f6a747e88939da7a1978e847a7d88939ea3988d81766b6054493d32261b0f0e0c09050000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca0938679757575757575757575757575757575757575757575757575757575757575757575746d62564a3d3024170a0000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000010d1a26313d4955616c78848f9aa5b1a89d92877d72685e554c443c352e2925211e1c1b1a1a1b1c1d1f22252a30363e464f59636d77828d908c8985817e7a74695d5044372a1d11040000101c2936434f5c697683909ca9afa3968a7d7165584c4034291d131b2834414e5a6774818d9aa7b2a6998d8174675b4f43372b1f151824313e4b5764717d8a97a4afa296897c6f6256493c2f23160900000000000000000000000005111d2934404c58646f7b87939faaa79b8f84786c6054483c302834404c58646f7b87939faba69a8e83776b5f53473c3024180c0100000000000000000000000004111d2a36424f5b6774808c98a5b1ab9e93877b6f63584c41362b20160c020000000000000000000000000000020c16202b35404b56616d7776716b65605a544e4941392f24190e020000000000000000000007111c26303b454f5a646e78838d97a2aa9f958a80756b61564c41424d57626c77818c96a1aba2988d83786e64594f443a30251b10060000000000000000000013202c3946535f6c798693a0aca79a8d81736a7074777a7b7c7d7c7b7875716c666059514a545d656c72767a7c7d7c7b7976736e64594d4034271b0e000000000000000000000000050d161f272f373e454c53595f64696e73777a7d8183858788898a8a8a8a8a89888684827f7c7975716c67615c564f49423a332b231b120900000000000000000000000006111c262f383f4548484848484848484847433c342b21170c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e18212b343c4246484848484848484847433e362d23190e030013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a00000000000000000000000004101c2834404b57636e7a8691968a7f74695e5449424e5b6875828e9b9c8f8275685b4f4236414c57626d78838e999b91867b70655b50454b55606b76818c978e82776b5f54483c3024180c000000000a16222f3b47535f6b77838f9ba7b3a79b8f84786d62574c42372d241b120b040000000000000000000000040b121b242e38424d58636e7a85919da9aea3978b7f73675b4f43372b1e1206000013202c3946535f6c798693a0aca094877a6d6053473a2d211e28333d48525d67717c86909aa4a3998f857b7276818c97a39e93877c71655a4e43372c2015090000000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c686868686868686868686868686868686868686868686868686868686868686868645b51463a2e2115090000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000915212d3944505c67727e89949faaaea4998e847a70675e554d46403a35312d2b2928272727282a2c2e32363b41485058616b757f89949c9995918e8a81766a5d5044372a1e11040000101c2936434f5c697683909ca9b2a6998d8175685d51453a2f251f1e2936424f5c6875828e9ba8b4a89c9084776b5f53473c31271f1e26333f4c5965727e8b98a5aea295887b6f6255483c2f2216090000000000000000000000000a16222d3945515d6874808c98a3aea2978b7f73675b4f43382c242f3b47535f6b77838f9aa6ab9f93877b7064584c4035291d11050000000000000000000000000713202c3945525e6b7783909ca8b3a79a8e82766a5e52473b3024190e0400000000000000000000000000000000040e19242f3a45505b656b6b65605a544e49433d3730271d13080000000000000000000000000a141f29333d48525c67717b86909aa4a79c92877d72685d53494a545f69747e89939ea8a59b90867c71675c52483d33281e1309000000000000000000000013202c3946535f6c798693a0aca79a8d8173767b80848688898a898785817d77716b635b535c666f777d83868889898886838075685b4f4235281c0f0000000000000000000000040e171f283139414850575e646a70757a7e83878a8d8f929395969697979796959493918e8c8885817c78736d67615a534c453d352d241b120900000000000000000000000b17222d38424a51545555555555555555534e463d33281d110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d17202a333d464d525454545454545454534f483f352b1f14080013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000000814202c3844505c6874808b979084796e63584d42424e5b6875828e9b9c8f8275685b4f423d48535e69747e8a959f958a7f74695f54493e444e5964707b869293887c7064594d4135291d10040000000d1926323e4b57636f7b8894a0abaea2968a7e73675c51463b30261b120900000000000000000000000000000009121c26313b47525d6975818c98a4b0a79c9084776b5f53473b2e2216090000131f2c3946525f6c7985929faba194877b6e6155483b2f2225303a454f5a646e79838d98a2a59b91877d736a707b86919da4998d82766b5f54483d31251a0e0200000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5852493f35291d11050000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000005101c28333f4a56616c78838e98a3adaba0968c837970675f58514b45413d3a3736353434343536383b3e42474c535a626a737d87919ba6a5a19d92877b7065594d4135291c0f030000101c2936434f5c697683909ca9b5a99d9185796d61564b41372f2b2b2c3845515e6a7784909da9b6aca094877b7064584d4239302c2a2b35424e5b6774818d9aa6ada194877a6e6154483b2e2115080000000000000000000000030f1b26323e4a56616d7985919ca8aa9e92867a6e62564b3f33271f2b37434e5a66727e8a96a2aea4988c8074695d5145392e22160a0000000000000000000000000916222f3b4854616d7a86939facafa3978a7e72665a4e42362a1f130800000000000000000000000000000000000007121d28343f49535b5f5f5a544e49433d38322c251e150b01000000000000000000000000020d17212c36404a555f69747e88939da7a3998f847a6f655a50515b66707b85909aa5a89e93897e746a5f554b40362b21160c02000000000000000000000013202c3946535f6c798693a0aca79a8d817a81878c90939596969694918d89837c756d655c646e7881898e9395969695928f8275685b4f4235281c0f00000000000000000000030d162029313a434b535a61686f757b81868b8f9396999c9ea0a1a2a3a4a4a4a3a2a19f9d9b9895918d88847e78726c655e574f473f362e241b1209000000000000000000000f1b27333f4a545c6161616161616161615f584f453a2e221609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f29323c454f585f6161616161616161605a51473c3024180c0013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000000c1824303c4855616c788490968a7e73685c51463b424e5b6875828e9b9c8f8275685b4f42434e59646f7a85909b998e83786d63584d42373d48535e6975818c988d8175695d5145392d211408000004101c2935424e5a67737f8b98a4b0aa9e92867a6e62564b3f34291e140a00000000000000000000000000000000000a141f2a35414c5864707c8894a0acaca094887b6f63564a3e3125190c0000121f2b3845515e6b7784919daaa296897c7063574b3e33272c37414c56616b76808b959fa79d93897f756b616975808b97a29e93887c7065594e42362a1f130700000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f534e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4c4740372e23180d010000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000b17232e3945505b66717c87919ba5afa89e948b8279716a635c56514d4946444241414041424345474a4e52575d646c747c858f99a3adaca1968c81756a5f54483d3125190d000000101c2936434f5c697683909ca9b4aca1958a7e73685d5349413b3837383d4854616d7986929fabb2aaa4988c81756a5f544b423c3837383b45515e6a76838f9ca8ac9f9286796c6053463a2d201407000000000000000000000008141f2b37434f5a66727e8a96a1ada5998d81756a5e52463a2e221a26323e4a56626d7985919da9a99d9185796d62564a3e32271b0f0300000000000000000000000b1825313e4a5763707c8996a2aeaca094877b6e62564a3e32261a0e02000000000000000000000000000000000000010c17222d3841494f52524e49433d38322c26211b140c030000000000000000000000000000050f1a242e39434d57626c76818b95a0aaa0968b81766c625758626d77828d97a2aba1978c82776d62584e43392e241a0f0500000000000000000000000013202c3946535f6c798693a0aca79a8d81838b92989c9fa2a3a3a2a09d99948e8780776e656a75808a939a9fa2a3a3a19c8f8275685b4f4235281c0f000000000000000000010b151f28323b434c555d656c737a81878c92979b9fa3a6a8a9a6a5a3a2a2a2a2a2a3a5a7a9a7a4a19d99948f8a847d7770686159514840372d241b1107000000000000000000121e2b37434f5b666d6e6e6e6e6e6e6e6e6a61564a3e3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131d27313b444e57616a6e6e6e6e6e6e6e6e6b63584d4134281b0f0013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000030f1b2834404c5965717d89959185796e62574b4035424e5b6875828e9b9c8f8275685b4f424a55606b76818c979d92877c71675c51463b3137424d5864707b87939185796d6155493d3024180b000006131f2c3845515d6a76838f9ba7b2a69a8e8275695d51463a2e23180d020000000000000000000000000000000000030e1924303c48535f6c7884909ca9b0a4978b7f72665a4d4134281c0f0300101d2a3643505c6975828e9ba7a4988c7f73675b4f43382e333e48535e68737d88929da7a0958b81776d6359636f7a86919da4998d81766a5e53473b2f23180c00000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5346424242424242424242424242424242424242424242424242424242424242403c362e251c1107000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000006111d28333f4a55606a757f89939da7b0a69d948c837b746d67625d595653514f4e4d4d4d4e505154565a5e63696f767e868e97a1aaaea49a8f857a6f64594e42372c201409000000101c2936434f5c697683909ca9ada29b988f84796f655b534c47454445484e5965717d8995a2aeaaa0999892867b70665d544d48454445474c56626e7a86929fabaa9d9084776b5e5145382c1f120600000000000000000000010d1824303c48535f6b77838f9aa6aca094897d7165594d41352a1e16222d3945515d6975818c98a4ada2968a7e72665b4f43372b20140800000000000000000000000d1a2633404c5966727e8b98a4b1aa9d9184786b5f53463a2e211509000000000000000000000000000000000000000006111c262f373e434645433d38322c26211b151009020000000000000000000000000000000008121d27313b46505a656f79838e98a2a89d93887e73695f5f6a747f89949ea9a49a8f857a70655b51463c31271d12080000000000000000000000000013202c3946535f6c798693a0aca79b8f868c959da4a29f9c9b9a9a9b9c9e9f99918981776e6f7b87929ca5ababa49f9c9b8f8275685b4f4235281c0f00000000000000000009131d27313a444d565e676f767e858c92989da2a7aba7a39f9c9a9896969595959697989a9da0a3a7a9a5a09b958f88817a736b635a52493f362d23190f05000000000000000013202c3946525f6c777b7b7b7b7b7b7b7b73665a4d4033271a0d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111b252f39434d56606a737b7b7b7b7b7b7b7b75695c504336291d100013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a000000000000000000000006121f2b3744505c6975818d998d8175695d51463a35424e5b6875828e9b9c8f8275685b4f45505b66717c87929d968b80756b60554a3f352a303c48535f6b77838f968a7d7165594c4034271b0f02000915222e3b4754606d7986929eabafa3968a7e7165594d4135291d12060000000000000000000000000000000000000008131f2b37434f5c6874818d99a6b2a79b8e8275695d5044372b1e1205000f1b2834414d5a66727f8b97a4a89b8f83776b60554a40363a454f5a656f7a858f99a4a2988e84796f655b525e6975808c98a39e92877b6f63584c4034281c1004000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f534639353535353535353535353535353535353535353535353535353535353533302b241c130a00000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000c17222d38434e58636d77818b959ea7afa69e958d867f78736e6965625f5d5c5b5a5a5a5b5c5e6063666a6f747a81889098a0a9afa69c92887d73685e53483c31261b0f04000000101c2936434f5c697683909ca9a79b908b908b81766d655d57535151525459606a75818d99a5b0a4988e8b928d82786f665e585452515153575e68737e8a96a2aea79a8e8275685c4f43362a1d10040000000000000000000006111d2935414c5864707c88939faba79c9084786c6054483d312519111d2935414c5864707c8894a0aba69b8f83776b5f54483c3024190d01000000000000000000000f1b2835414e5b6774818d9aa7b3a79b8e8275695c5043372a1e12050000000000000000000000000000000000000000000a141d252d3337393936322c26211b15100a04000000000000000000000000000000000000000b151f2a343e48535d67727c86919ba5a59a90857b706666717b86909ba6a79d92887d73685e54493f342a20150b000000000000000000000000000013202c3946535f6c798693a0acaba09792969ea19b9692908e8d8d8e8f92959a9b9389807673808c97a3aeaba29a938f8e8f8275685b4f4235281c0f000000000000000006111b252f39434c565f687078818890969da3a9aaa49f9b9793908d8b8a89888888898a8c8e9093979ba0a5aaa6a09a938c857d756c645b51483f352b21170c020000000000000013202c3946535f6c79868888888888888173675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f19232d37414b555f68727c858888888888877d73685c4f4336291d100013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a00000000000000000000000915222e3a4753606c78859195897c7064584c403535424e5b6875828e9b9c8f8275685b4f4c57626d78838e999a8f84796e64594e43392e232b37424e5a66727e8b978d8175685c5043372a1e1105000b1824313d4a56636f7c8895a1aeaca093877a6e6255493d3125190d0100000000000000000000000000000000000000030f1b27333f4c5864717d8a96a3afaa9e9185786c5f53463a2d201407000c1925313e4a56636f7b87939faba094887c71665c52483f414b56616c76818c96a1a59b91867c72675d534d58646f7b87939ea3978c8074685c5044382d211509000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5346392c2828282828282828282828282828282828282828282828282828282827241f19120a0100000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000006111c27323c47515b656f79838c959da6aea79f98918a847e7975726e6c6a686767676768696a6d6f72767a80858b929aa2aaaea69d948a80766c61574c41362b20150900000000101c2936434f5c697683909ca9a5998c7f89928980766f6863605e5d5e60646a727c87929ea9aca09488818c948a8178706964605e5d5e606368707a848f9ba7afa3978b7e7266594d4034271b0e02000000000000000000000a16222e3a45515d6975818c98a4afa3978b7f73675c5044382c20140c1824303c48545f6b77838f9ba7ab9f94887c7064584d4135291d120600000000000000000000101d293643505c6975828f9ca8b2a6998c8073665a4d4134281b0f02000000000000000000000000000000000000000000020b131b22272a2c2c2a26211b15100a04000000000000000000000000000000000000000000030d18222c37414b55606a747e89939ea8a1978d82786d6e78838d98a2aaa0958b81766c61574c42382d23180e03000000000000000000000000000013202c3946535f6c798693a0acb2a9a29fa19e96908a8683818181818386898e949a92887e76838f9ca8b0a49a90888382828275685b4f4235281c0f00000000000000030d18222d37414b555e68717a828b939aa1a8aca59f99948f8a8783817e7d7c7b7b7b7c7d7f8184878b8f94999fa5aba59e968f877e766d635a51473d33281e13090000000000000013202c3946535f6c798693959595958d8173675a4d4034271a0d010000000000000000000000000000000000000000000000000000000000000000000000000000000000010c16202b353f49535d67717a848e94949492887e756b61574c4034271b0e0013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a00000000000000000000000b1824313d4a56636f7b88949185796c6054483c3035424e5b6875828e9b9c8f8275685b50525d68737e89949e93887d72685d52473d32271c26323e4a56626e7b87939184786b5f5246392d201407000d1926333f4c5865727e8b97a4b0aa9d9084776b5f5246392d2115080000000000000000000000000000000000000000000b1724303c4955626e7b8794a0adada094877a6e6155483c2f221609000916222e3a47535f6b77838e9aa5a4998e83786e645a514947525d68737d88939da89e93897f746a60564c47535f6a76828e9aa59c9085796d6155493d3125190d000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5346392c201b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a18140e08000000000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000a15202a353f4a545d67707a838b949ca3aba9a29b958f8a86817e7b78777574737374747577797c7e82878b91969da4abaca49c948b81786e645a4f453a30251a0f0300000000101d2a3643505d697683909da9a5988c7e838e9289817a746f6c6b6a6b6d70757c858e98a3afa89c90847b8691938a827b75706d6b6a6b6c6f747a828c96a1acab9f93877b6f63564a3e3125180c00000000000000000000030f1b27333f4a56626e7985919da9aa9e92867a6f63574b3f33271c1008141f2b37434f5b67737e8a96a2aea4988d8175695d52463a2e22160b00000000000000000000111e2b3744515d6a7784909daab1a4978b7e7165584b3f3225190c0000000000000000000000000000000000000000000000010910161b1e201f1e1a15100a0400000000000000000000000000000000000000000000000006101a252f39444e58626d77818c96a0a99e94897f7475808a949fa9a3988e83796f645a4f453b30261b110700000000000000000000000000000013202c3946535f6c798693a0acb9b3aea79d948c847e7a777573737476797d838990988f857a85929eabab9f93887e7775767873675b4e4235281b0f0000000000000009141f2a343f49535d67707a838c949da4aca9a29b948e88837e7a777472706f6f6e6f6f717275777b7e83888e949ba2a9a8a19990887f756c62594f453a30251b100500000000000013202c3946535f6c798693a0a2a29a8d8173675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000000000000000000000000000008131d28323d47515b656f79838c96a09e948a80766c63594f453b2f23170b0013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a00000000000000000000000d1a2633404c5965727e8b978e8275695d5044382c35424e5b6875828e9b9c8f8275685d5d5d646f7a85909b978c81766c61564b41362b2016222e3a46525f6b77849094877a6e6155483c2f231609000e1b2834414e5a6774818d99a6b3a79b8e8275685c4f43362a1e11050000000000000000000000000000000000000000000814212d3a46535f6c7885929eabafa296897d7063574a3d3124170b0006121e2a37434e5a66727d89949fa99f948a80756c635b534e59646f79848f9aa4a1978c82776d63584e44424e5a65717d8995a1a195897d7165594d4135291d11040000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5346392c20130f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0e0b080300000000000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000040e19232d38424b555e687179828a9299a0a6aca6a19b96928e8a878583828181818181828486888b8e92979ca2a8afa8a29a928a82786f665c52483e33291e13080000000000101d2a3643505d697683909daaa5988b7e7c8792938b85807b79777778797c81878e97a0aaada2978b80747f8994948c86817c79787777797b80858c949ea8b0a59a8e83776b5f53463a2e221509000000000000000000000814202c37434f5b67737e8a96a2aea59a8e82766a5e52463b2f23170b030f1b27333f4a56626e7a86929ea9a99d91867a6e62564a3f33271b1004000000000000000000121f2c3845525e6b7885919eabb0a396897d7063574a3d3124170a00000000000000000000000000000000000000000000000000050a0f111313110e0a0400000000000000000000000000000000000000000000000000000009131d28323c46515b65707a848e99a3a69b91867c7c87919ca6a69b91877c72675d52483e33291e140a0000000000000000000000000000000013202c3946535f6c798693a0acb9b5aa9f958b827a736e6a686767686a6d71777e868e978c818693a0ada79b8e82766c68696c6961564b3f33261a0d00000000000004101b26303b46505b656f79838c959ea6aea89f979089827c77726e6b68656463626262636466686b6e73777d838990979fa8aba29a91887e746b61564c41372c21160b00000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0100000000000000000000000000000000000000000000000000000000000000000000000000000000050f1a252f3a444e59636d77818b959ea1968c82786e645a51473d34291e13070013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a00000000000000000000000f1c2835424e5b6774818d988c7f73665a4d41342835424e5b6875828e9b9c8f82756a6a6a6a6a75808b969b90857a70655a4f453a30281e151e2a36434f5c6875818e96897d7064574a3e3125180b00101c2936434f5c6975828f9ba8b2a6998c8073665a4d4134271b0e0200000000000000000000000000000000000000000005121e2b3744515d6a7783909da9b1a4988b7e7265584c3f3226190c00020e1a26323e4a55616c77828d98a2a69c91887e756d655e575f6a75808b96a1a59a90857a70655b51463c3d4955616d7985919da59a8e8275695d5145392d2114080000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5346392c20130b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a0906020000000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000007111c263039434c565f67707880878e959ba1a7aba7a29e9a979492908f8e8d8d8e8e8f909295979b9ea3a8ada9a39d97908881786f665d544a40362c22170c020000000000101d2a3743505d6a7683909daaa4988b7e75808a9496908c888684848586898c9298a0a9aea59b90857a6e78828c9597918c888684848486888b90979ea6b0a79e93887d72665a4e42362a1e1206000000000000000000010d1925313c4854606b77838f9ba7ada195897d7165594e42362a1e1206000a16222e3a46525d6975818d99a5aea2968a7e73675b4f44382c201408000000000000000000131f2c3946525f6c7985929facafa295887c6f6255493c2f2316090000000000000000000000000000000000000000000000000000000205060605020000000000000000000000000000000000000000000000000000000000010b16202a353f49535e68727d87919ca6a2988e83838e98a3a99e948a7f756a60554b41362c21170d020000000000000000000000000000000013202c3946535f6c798693a0acb9afa4988e83797068625e5b5a5a5b5d61666c747c858f92898b95a1aea4988b7e72665b5d5f5d584f453a2e23170a0000000000000a16212c37424d58626d77818b959ea7b0a79e968d867e77716b66625e5b5957565555555657595c5f62676c71777e868d959ea7aca39a90877c72685e53493e33281d1106000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000000000000000000000000010c16212c36414b56606a757f89939da4998f857a70665c52483f352b22170d020013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000111d2a3743505d6976838f968a7d7064574b3e322835424e5b6875828e9b9c8f827777777777777c87929d94897e74695f59524a423a30271d1b2734404d5966727f8c988b7e7265594c3f3326190d00111e2a3744505d6a7783909da9b1a4978b7e7165584b3f3225190c0000000000000000000000000000000000000000000003101c2936424f5c6875828f9ba8b2a6998c8073665a4d4033271a0d00000a16212d39444f5b66717b86909aa3a39a90877f776f686266717c87929da79e93897e73695e54493f353844505c6874818d99a59e9286796d6155493d3024180c0000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5346392c2017171717171717171717171717171717171717171717171717171717171715120d0801000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000a141e27313a434d555e666e757c848a90969ba0a4a8aaa6a3a09e9d9b9a9a9a9a9b9c9d9fa1a4a7aba9a6a29d98928c857e766e665d544b42382e241a1005000000000000111d2a3744505d6a7784909daaa4978a7d7178828c959c9894929191919395999da3aaaba49c93897f7469707a838d959d9895929191919294989ca1a8aca69e958c82776c6055493e32261a0e0200000000000000000006121e2935414d5965707c8894a0aba89c9084786c6155493d3125190e020006121d2935414d5965717c8894a0aca79b8f84786c6054483d3125190d02000000000000000013202c3946535f6c7986939facaea295887b6e6155483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e18232d37424c56606b75808a949ea99f958c8c95a0aaa1978d82786d63584e44392f241a1005000000000000000000000000000000000013202c3946535f6c798693a0acb6aa9e93877c71675e56524f4d4d4e51555b626a737d879295969da6afa396897d7063575052514d463d33291d1206000000000005101b27323d48535e69747e89939da6b0a89e958c847b746d66605b56524f4c4a49484849494b4d4f52565b60666c747b848c959ea8aca2988f847a6f655a4f44392e23170c000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0100000000000000000000000000000000000000000000000000000000000000000000000000000007121d28333d48535d68727c87919ba59c92877d73685e544a40362d23191006000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000121e2b3845515e6b77849194887b6e6255493c2f2835424e5b6875828e9b9c8f84848484848484848d989b8e827975706a645c544c42392f251a25323e4b5764717d8a978d8173675a4d4134271b0e00121e2b3845515e6b7784919eaab0a3968a7d7063574a3d3124170b00000000000000000000000000000000000000000000000e1b2834414e5b6774818e9aa7b4a79a8e8174675b4e4134281b0e000005111c28333e49545f69747e88919ba3a2999189817a736d6c77828d98a3a2978c82776c61574c42382d34404c5864707c8995a1a2968a7d7165594d4034281b0f0300000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5346392c24242424242424242424242424242424242424242424242424242424242424221e19130b030000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000000020c151f28313a434c545c636b72787f858a8f94989c9fa2a4a7a8a9a8a7a7a7a7a8a8aaa9a7a5a3a09d9a96918c87817a746c655c544b423930261c120800000000000000111e2b3744515d6a7784919ea2a2968a7d70707a838b939a9f9f9e9e9e9fa1a5a9a7a49f99928a81776d6268717a838b93999f9f9e9e9e9fa1a4a8a8a5a09b948c837a70655a4f44382d21160a000000000000000000000b17232e3a46525e6975818d99a4afa3978b8074685c5044382d2115090000010d1925313c4854606c7884909ca7aca094887c7165594d41362a1e1206000000000000000013202c3946535f6c798693a0acaea194887b6e6155483b2e2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111b25303a444f59636e78828c97a1a79e98989ea7a49a90857b70665c51473c32271d130800000000000000000000000000000000000013202c3946535f6c798693a0acb2a69a8e82766b60554c454241414245495058616b75808b96a2a7afafa295887b6f6255494645413b342b21170c0100000000000a16212d38434f5a65707b86909ba5afa99f968c837a7269625b554f4a4642403e3c3c3c3c3d3e4043464a4f555b6269717a838c96a0aaaaa0968c81766c61564a3f34281d11060000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d010000000000000000000000000000000000000000000000000000000000000000000000000000030e19242f39444f5a646f79848e98a3a0958b80756b61574c42382e251b110800000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000121f2c3945525f6c78859293877a6d6054473a2e2835424e5b6875828e9ba0969190909090909090959f9c908986817c756e665e544b41372c2123303d4956636f7c89968e8175685b4e4235281b0f00121f2c3945525f6b7885929fabafa296897c6f6256493c3023160900000000000000000000000000000000000000000000000d1a2733404d5a6673808d9aa6b3a89b8e8275685b4f4235281c0f0000000b16222d38434d58626c768089919aa2a39b938c857e78737d89949fa69b91867b70655b50453b3026303c4854606c7985919da69a8d8175695c5044372b1f120600000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f53463931313131313131313131313131313131313131313131313131313131313131302e2a241d150c0200000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000030d161f28313a424a525960676d73797e83888c8f9395989a9c9d9e9f9f9f9f9f9e9d9c9a999694918d8a85817b756f69625a534b423930271e140a0100000000000000121e2b3845515e6b77849195959595897c6f68717981888e94989b9d9f9f9f9f9d9b98948e8881786f655b5f68717981888e93979b9d9e9f9f9f9e9b99959089827a71685e53493e33271c110500000000000000000004101c27333f4b57626e7a86929da9aa9f93877b6f63574b4034281c10040000000814202c3844505b67737f8b97a3afa5998d81756a5e52463a2f23170b000000000000000013202c3946535f6c798693a0acaea195887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141e28333d47515c66707b858f9aa4a8a4a4a8a79d93887e73695f544a3f352b20160b0100000000000000000000000000000000000013202c3946535f6c798693a0acafa2968a7d71655a4e433a36343435393e464f59636e7a85919da9b5aea295887b6e6155483b3835302a22190f050000000000030f1b26323e4954606b76828c97a2acaca2988e847a716860585049433e3a363331302f2f2f303134363a3e444950585f68717a848e98a2ada89e93887d72675c5045392e22170b0000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d05060708080808070504010000000000000000000000000000000000000000000000000000000009141f2a35404b56616b76818b96a0a4998e84796e64594f453b30261c13090000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a000000000000000000000013202c3946535f6c7986939386796c5f5346392d2835424e5b6875828e9ba39a96969696969696969696989a95928d87807870665d53483e3327222f3c4855626f7b88958f8275685b4f4235291c0f00131f2c3946525f6c7986929facaea295887b6f6255483c2f22150900000000000000000000000000000000000000000000000d192633404c596673808c99a6b2a89c8f8275685c4f4236291c0f00000005101b26313c46505a646d7680889098a0a59d96908a847e848f9aa5a0958a7f74695e54493e3429212c3844505c6975818e9a9c989185786c6053473b2e22150800000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f53463e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3d3a352f271e140a00000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000000040d161f28303840474e555c62686d73777c808386898b8d8f9091929293929291908f8e8c8a8785817d7975706a645e575049413930271e150c020000000000000000131f2c3946525f6c78858888888888887b6f62676f777d83888c8f9192939292918e8c88837d766e665d53565f676f767d82878b8e9092929392918f8c89847e7870685f564c42372c21160b000000000000000000000915202c3844505b67737f8b96a2aea69a8e82766a5e53473b2f23170b0000000004101b27333f4b57636e7a86929eaaa99e92867a6e63574b3f33281c10040000000000000013202c3946535f6c7986929facaea295887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c16212b35404a545e69737d88929da8b1b1aba0968b81766c62574d42382e23190e040000000000000000000000000000000000000013202c3946535f6c798693a0acaca093877a6e6155493d32292727292d343d47525d6974808c98a4b1aea295887b6e6155483b2e29251f18100700000000000008141f2b37434e5a66717c88939ea9b0a59b90867c72685f564e463f38322e2a2724232222222325272a2e33383f464e565f68727c86919ba6afa49a8f84786d61564a3f33271c100400000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a10121314151515141312100e0b0804000000000000000000000000000000000000000000000000040f1a25313c47525d67727d88929da79d92877c72675d52483d33291f140a010000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a000000000000000000000013202c3946535f6c7986939286796c5f5246392c2835424e5b6875828e9b9d91898989898989898989898b8e939998928a82786f655a4f44382d222e3b4855616e7b88958f8275695c4f4236291c0f0013202c3946535f6c798693a0acaea295887b6e6155483b2e22150800000000000000000000000000000000000000000000000c1926323f4c5965727f8c99a6b2a99c8f8275695c4f4236291c0f000000000a151f2a343e48525b646d767e868e959ca3a19b958f8a8b95a0a59a8f84786d63584d443e38332d2834404d5965717e8a94908c89857c6f6256493c3023160900000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f534a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a46413930261c1105000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000000000000040d161e262e363d444b51575c62676b6f73777a7c7e81828485858686868585848381807d7b7875716d69645f59534c463e372f271e150c0300000000000000000013202c3946525f6c777b7b7b7b7b7b7b796d615d656c72777c7f82848586868584827f7c77726b645c544b4d565d656b71767b7e8284858686858482807c78736d665e564d443a30251b1005000000000000000000020e1925313d4954606c7884909ba7ada195897d72665a4e42362a1e130700000000000b17232f3a46525e6a76828e99a5aea3978b7f73675c5044382c21150900000000000000121f2c3945525f6b7885929fabafa296897c6f6356493c3023160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f19232e38424d57616b76808c99a6b3b5a89c8f84796f655a50453b31261c1107000000000000000000000000000000000000000013202c3946535f6c798693a0acaa9d9184786b5f5246392d211b1a1c222b36414c5864707c8895a1adaea295887b6e6155483b2e2219140d06000000000000000c1824303c48545f6b76828e99a4afaa9f94897e746a60564d443c342d27221d1a181615151617181b1e22272d343c444d56606a747f8a94a0ababa095897e72675b4f44382c20140800000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a1c1e202121222221201f1d1a1714100c07010000000000000000000000000000000000000000000915202b37424d58636e79848f99a4a2978c81766b60554b40362b21170d03000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a000000000000000000000013202c3946535f6c7986939386796c5f5346392c2835424e5b6875828e9b9c8f827c7c7c7c7c7c7c7c7d7e82888f979c948b81766c60554a3e32262f3c4855626e7b88958f8275685c4f4236291c0f0013202c3946535f6c7986929facaea295887b6e6155483b2f22150800000000000000000000000000000000000000000000000d1926333f4c5966727f8c99a6b2a99c8f8275695c4f4236291c0f00000000030e18222c364049525b646c747c838b91989ea4a09b96969da79f93887d7267605a554f4a443e3831313d4956626e7a878784807c79756c6155483c2f22160900000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c5f5757575757575757575757575757575757575757575757575757575757575757575756524b42382d22160a000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000000000040c141c242b323940464c51565b5f63676a6d70727475777878797979787877767473716e6c6865615d58534e48423b342c251d150c0300000000000000000000121e2b37434f5b666d6e6e6e6e6e6e6e6d675c535a61666b6f737577787979787775736f6b66605a534a42444c535a60666b6f72757778797979777673706c67625b544c443b32281e14090000000000000000000007121e2a36424d5965717d8994a0aca89c9185796d6155493d32261a0e02000000000006121e2a36424d5965717d8995a1ada79c9084786c6055493d31251a0e02000000000000121e2b3845515e6b7784919eaab0a3968a7d7064574a3e3124180b0000000000000000000000000000000000000000000000000003060809080502000000000000000000000000000000000000000000000000000000000000000000010b151f2a343e49535d67727c86919ca8b4b5a99c90867b71675c52483d33291e140a000000000000000000000000000000000000000013202c3946535f6c798693a0aca99c8f8376695d5043372a1e110e101924303c4854606c7985929eaaaea295887b6e6155483b2e221508020000000000000004101c2834404c5864707c88939faaafa4988d82776c62584e443b322a221c16110e0b0a0909090a0c0e12161c222a323b444e58626d78838e9aa5b1a69a8f83786c6054483c3024180c00000013202c3946535f6c798693a0aca79a8d8173675a4d40342726292b2c2e2e2e2e2e2d2b292724201c17120d0700000000000000000000000000000000000000040f1b26313d48535e6975808b95a0a79b90857a6f64594f44392f241a0f0500000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000131f2c3946525f6c79859293867a6d6053473a2d2835424e5b6875828e9b9c8f82756f6f6f6f6f6f6f7072767d858e989d93887d72665a4e42362a303c4956626f7c89958e8275685b4f4235281c0f00131f2c3946525f6c7986929facafa295887b6f6255493c2f22160900000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3a89c8f8275685b4f4235281c0f000000000006101a242e374049525a626a727980878d93999ea3a2a3a7a89b8f827a75706b66605b554f49433c353a46525f6b777e7b7774706c69645b5044392c20140700000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386796c6464646464646464646464646464646464646464646464646464646464646464646464635d54493e32261a0e020000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000000000000020a121921272e343a40454a4f53575b5e61636567696a6b6c6c6c6c6c6b6a69686664625f5c5955514c48423c363029221b130b0300000000000000000000000f1b27333f4a545c6161616161616161615d554b4f555b5f6366696b6c6c6c6b6a6966635f5b554f4841383a41484f555a5f6366686a6b6c6c6c6b696764605c56504a423b322920160c02000000000000000000000b17232f3b46525e6a76828d99a5afa4988c8074685c5045392d211509000000000000020d1925313d4955616c7884909ca8aca095897d7165594e42362a1e1307000000000000111d2a3744505d6a7683909ca9b1a4988b7e7265584c3f3326190d0000000000000000000000000000000000000000000000050b0f13151514120e0a060200000000000000000000000000000000000000000000000000000000000008121d27313c46505a656f79848e98a3adaaaaada2988d83786e64594f453a30261b11070000000000000000000000000000000000000013202c3946535f6c798693a0aca89b8e8275685b4f4235281c0f0208131f2b3844505d6976838f9ca8aea295887b6e6155483b2e22150800000000000000000814202c3945515d6975818c98a4b0aa9e93877c71665b50463c32292018110a05010000000000000002060b11182029323c46515c67727d8994a0ababa094887d7165594d4135281c1004000013202c3946535f6c798693a0aca79a8d8173675a4d403430333538393a3b3b3b3b39383633302c28231e18120b0400000000000000000000000000000000000915202c37424e5964707b86919ca7a1968a7f74695e53483d32271d12080000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000121f2b3845515e6b78849194887b6e6155483b2f2835424e5b6875828e9b9c8f82756862626262626263666b737c86919c9a8e83776b5e5246392d313e4a5764707d8a968d8174675a4e4134281b0e00121f2c3845525f6b7885929eabafa296897c6f6356493d3023160a00000000000000000000000000000000000000000000000e1b2734414d5a6773818d9aa6b3a89b8e8175685b4e4235281b0f00000000000008121c252e374048505860676e757b82888d9398a1acb3aa9d928b86817c77716c66605a544e474039434f5b6770726f6b6764605d5952493e33281c100400000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca09386797171717171717171717171717171717171717171717171717171717171717171717171716e665b4f42362a1d10040000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000000000000000080f161d23292f353a3f43474b4e525457595b5c5d5e5f5f5f5f5f5e5d5c5b59575553504d4945403c37312b251e181009010000000000000000000000000b17222d38424a51545555555555555554514b43444a4f53575a5c5e5f5f5f5f5e5c5a57534f4a443d362f2f373d44494e5356595c5e5f5f5f5f5e5d5a5854504b453f38312920170e040000000000000000000004101c28343f4b57636f7a86929eaaab9f93877b6f64584c4034281c1005000000000000000915212c3844505c6874808c97a3afa5998e82766a5e52473b2f23170c000000000000101c2936424f5c6875828e9ba8b3a6998d8074675a4e4135281c0f030000000000000000000000000000000000000000000810161b1f2122211e1a16120e0a0602000000000000000000000000000000000000000000000000000005101a242e39434d58626c76818b95a0aaa39e9ea2a99f958a80766b61574c42372d23180e0400000000000000000000000000000000000013202c3946535f6c798693a0aca79a8e8174675b4e4134281b0e01030f1c2835424e5b6774818d9aa7aea295887b6e6155483b2e22150800000000000000000b1824303c4955616d7985919da9b1a5998d82766b5f54493f342a20170e0600000000000000000000000000060e17202a353f4a55606c77838f9ba7b1a5998d8175695d5145382c201407000013202c3946535f6c798693a0aca79a8d8173675a4d40383c3f4244464748484847464542403c38342f29231d160e06000000000000000000000000000000030e1a26313d48545f6a76818c97a2a69b9084796e62574c41362b21160b010000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000111e2a3744505d6a76839096897c7063574a3e312835424e5b6875828e9b9c8f8275685b5555555555575a616a74808b979f93877a6e6255493c3033404c5965727e8b988c7f7266594c4033261a0d00111e2b3844515e6b7784919daab0a3978a7d7064574a3e3124180b00000000000000000000000000000000000000000000020f1c2835424f5b6875818e9ba7b3a69a8d8174675a4d4134271b0e000000000000000a131c252e363e464e555d636a70767c8287909ca8aca7a49c97928d88827d77726c655f58524b433f4a555e6566635f5b5854504d4740372d22170c0000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaca093867d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d776a5e5144382b1e11050000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000000000000000000040b12181e24292e33373b3f4245484a4c4e4f515152525352525251504e4d4b494643403d3935302b26201a140d06000000000000000000000000000006111c262f383f45484848484848484848454039393e43474b4d50515253535251504d4b47433e39332c25252c32383e42474a4d4f515253535251504e4b48443f3a342d261f170e0500000000000000000000000915212d3844505c6873808b97a3afa69a8e83776b5f53473b2f24180c000000000000000004101c2834404b57636f7b87939faaaa9e92877b6f63574b4034281c100500000000000e1b2734414d5a6773808d99a6b2a89b8f8276695d5044372b1f1206000000000000000000000000000000000000000009121a21272c2e2f2e2a26221e1a16120e0a060100000000000000000000000000000000000000000000030d17212c36404b555f69747e88939da7a399929199a3a79c92877d73685e54493f352a20160b01000000000000000000000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000d1a2633404c596673808c99a6aea295887b6e6155483b2e22150800000000000000020e1b2733404c5865717d8995a1adaca094887c7165594e43382d22180e05000000000000000000000000000000050e18232e39444f5b67727e8a96a2aea99d9185796d6155483c3023170b000013202c3946535f6c798693a0aca79a8d8173675a4d4044484c4f5152545455555453514f4c4844403a352e2720181008000000000000000000000000000008131f2b36424e5965707b87929ea9a1958a7e73685c51463b30251a0f04000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a00000000000000000000000f1c2935424f5b6874818e988b7e7265594d40342835424e5b6875828e9b9c8f8275685b4f494949494a4f58636f7b8794a0968a7d7164574b3e3236424f5b6874818d978a7d7164584b3e3225180c00111d2a3743505d697683909ca9b1a5988b7e7265594c3f33261a0d0000000000000000000000000000000000000000000005111e2a3743505d6976838f9ca9b2a5998c7f7266594c4033261a0d00000000000000010a131c242d343c444b52585f656b7178838f9ba8a19b9a9ea29e99938e89837d77716a635c554d45434c54585956534f4b4844413c362e251b10060000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acaea1968c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a84776b5e5144382b1e11050000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000000000000000000000070d13181d22272b2f3236393b3e4041434445454646464545444342403e3c3a3734302d29241f1a150f0902000000000000000000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b39352f2d32373b3e414345464646454443413e3b37322d28211a1a21272d32363a3e414344454646464543413f3c38332e29231c150d050000000000000000000000020e1a26313d4955616c7884909ca8ada2968a7e72665a4e42372b1f13070000000000000000000b17232f3b47535f6a76828e9aa6afa3978b8074685c5044392d21150900000000000c1926323f4b5865717e8a97a3b0aa9e9185786c6053473b2e22160a0000000000000000000000000000000000000007111b242c33383b3c3a36322e2a26221e1a16120c050000000000000000000000000000000000000000000a141f29333e48525c67717b86909aa5a69c928787919ca6a4998f857a70655b51463c32271d1308000000000000000000000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000c1925323f4c5865727e8b98a5aea295887b6e6155483b2e2215080000000000000005111e2a37434f5c6874818d99a5b2a89c9084786c6054493d32261b1106000000000000000000000000000000000007111c27333f4a56626e7a86929eabaea295897d7164584c3f33261a0e010013202c3946535f6c798693a0aca79a8d8173675a4d4c5054585b5d5f60616161615f5e5b5855504b464039322a221a1108000000000000000000000000010c1824303c47535f6a76818d98a4a79c9084796d62564b4035291e130800000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a00000000000000000000000e1a2734404d5966727f8b988e8175685c5043372b35424e5b6875828e9b9c8f8275685b4f423c3c3c3e46535f6b7885919e988c7f7266594c3f333945525e6a77839094887b6f6256493c3023170a000f1c2935424f5b6875818e9ba7b3a69a8d8174675a4e4135281c0f030000000000000000000000000000000000000000000714202c3946525f6b7884919eaab0a4978a7e7164584b3e3225180c0000000000000000010a121b232a323940474d545a66717d8994a0a4988f8d92979ca19f9a948e88827b756e675f574f4742484c4d4a46433f3c3834302b241c1309000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acb2a79e9897979797979797979797979797979797979797979797979797979797979797979797979184776b5e5144382b1e11050000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000000000000000000000000000001070c12161b1f2326292c2f3133353637383939393939383736353432302d2b2824211d18140f0904000000000000000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2d292422272b2f3234363839393939383634322f2b27221c161010161c21262a2e3134363839393939383735322f2c28231d18110a0300000000000000000000000007131f2a36424e5a65717d8995a1aca99d9185796d61564a3e32261a0e0200000000000000000007131f2a36424e5a66727d8995a1ada89c9084786d6155493d32261a0e02000000000a1724303d4956626f7b8894a1adada194887b6f63574b3e32261b0f030000000000000000000000000000000000020e19232d363e44474846433e3a36322e2a26221d160f060000000000000000000000000000000000000007121c26303b454f5a646e78838d97a2a99f958a807f8a949fa9a1968c82776d62584e43392f241a10050000000000000000000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e221508000000000000000714202d3946525f6b7884909da9b1a4988c8074675b4f44382c20150a000000000000000000000000000000000000000b16222e3a46525e6a76828f9ba7b1a5998d8074675b4f4236291d10040013202c3946535f6c798693a0aca79a8d8173675a51575c6164676a6c6d6e6e6e6d6c6a6865615c57514b443c342c231a1107000000000000000000000005111d2935404c58646f7b87929ea9a2968b7f73685c51453a2f23180d0200000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a00000000000000000000000c1825313e4a5763707c89959184786c5f53473b2f35424e5b6875828e9b9c8f8275685b4f42352f2f3744505d6a7784909d998d807366594d40333d4955616e7a86939185796c6053473a2e211508000e1b2734404d5a6673808c99a5b2a89c8f8276695d5044372b1f12060000000000000000000000000000000000000000000a17232f3c4855616d7a8793a0acaea295897c6f6356493d3023170a0000000000000000000009111920272f353c46525e6a76828e9aa59e938782868b91969ba19f99938d8780787169615950473e3f403e3a37332f2c28242019120a01000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0acafafa9a5a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49e9184776b5e5144382b1e11050000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000000000000000000000000000001060a0f13161a1d2022242628292b2b2c2c2c2c2c2b2b2a28272523211e1b1814100c0803000000000000000000000000000000000000000000020a11181c20212222222222222222201d18161b1f2225282a2b2c2c2c2c2b2a2825221f1b16110b05050b10151a1e222527292b2c2c2c2c2b2a282623201c17120c0600000000000000000000000000000c18232f3b47535f6a76828e9aa5b0a4988c8175695d5145392d21160a00000000000000000000020e1a26323d4955616d7985919da8ada195897d72665a4e42372b1f1307000000000815212e3a4753606c7985919eaab0a4988b7f73675b4f43372b201409000000000000000000000000000000000008131f2a353f484f5455534f4b47433e3b37332e2821180f050000000000000000000000000000000000050f19232e38424d57616b76808a959fa9a2988d837878838d98a2a89e93897f746a60554b41362c22170d0200000000000000000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e221508000000000000000a16232f3c4855616e7a8793a0acaea195897c7064574b3f33271b10040000000000000000000000000000000000000006111d2935424e5a66737f8b98a4b1a89c9083776a5e5145382c1f13060013202c3946535f6c798693a0aca79a8d8173675a5d63686d717476787a7b7b7b7a797774716d68625c554e463e352c23191006000000000000000000000916212d3945515d6975808c98a3a99d91867a6e62574b4034291d12070000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a00000000000000000000000916222f3b4854606d79869294887b6f63574b403435424e5b6875828e9b9c8f8275685b4f423b3b3c3e44515d6a7784909d998d807366594d4036414d5965717d8a968e8276695d5044382b1f1206000c1925323f4b5864717d8a97a3b0aa9e9185786c6053473b2e22160a0000000000000000000000000000000000000000020e1a26333f4b5764707d8996a2afac9f93867a6d6154473b2e2215080000000000000000000000070e161d26323e4a57636f7b87939fa5998d82767b80858a8f959ba19e98918a837b736b625950463c33312e2a2723201c18140e080000000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c798693a0a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a29e9184776b5e5144382b1e11050000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000003070a0e111316181a1b1d1e1f1f1f201f1f1f1e1d1c1a191714120f0c08040000000000000000000000000000000000000000000000000000060c101315151515151515151513110c0a0f1316191b1d1e1f20201f1e1d1b1916130f0a0500000000050a0e1216181b1d1e1f20201f1f1d1c191713100b0601000000000000000000000000000005111d2834404c58636f7b87939eaaab9f94887c7064584c4035291d110500000000000000000000000915212d3945515c6874808c98a4b0a69a8e82766b5f53473b3024180c0000000006121f2b3844505d6975828e9aa7b3a79b8f83776b5f54483c31261b1006000000000000000000000000000000020d1824303b47515a60625f5b57534f4b47433f3a332a21170d02000000000000000000000000000000020c16212b35404a545e69737d88929ca7a59b90867b71717b86909ba5a59b91867c71675d52483e33291f140a00000000000000000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e221508000000000000000c1825323e4b5764707d8a96a3afab9e9286796d6054483b2f23170b0000000000000000000000000000000000000000010d1925323e4a5763707c8995a2aeab9f9286796d6054473a2e2115080013202c3946535f6c798693a0aca79a8d81736761686e74797d81838587888888878683817d78736d67605850473e352b22170d030000000000000000020e1a26323e4a56626d7985919da8a5998d8175695d52463a2f23180c010000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a000000000000000000000007131f2c3845515d6976828e988c8074685c50453935424e5b6875828e9b9c8f8275685b4f484848484a4e56616d7985929e988c7e7265594c3f3b46525e6a76828e978b7e72665a4d4135281c0f03000a1723303c4955626f7b8894a0adada194887b6f63574b3e32261b0f030000000000000000000000000000000000000007131f2b37434f5b6773808c98a5b1a99d9084776b5e5245392c20130600000000000000000000000005111d2a36424e5a67737f8b97a3a094887c716f74797e848a90969da39c958d857d746b62584e43392e231e1b1713100c0803000000000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c79869395959595959595959595959595959595959595959595959595959595959595959595959595959595959184776b5e5144382b1e11050000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000000000000000000000000000000000000000010407090b0d0f10111212131313131211100f0e0c0a0805020000000000000000000000000000000000000000000000000000000000000004070808080808080808080704010003060a0c0f11121313131212100f0c0a060300000000000000000206090c0e10121213131312110f0d0a070400000000000000000000000000000000000a16212d3945515c6874808c97a3afa79b8f83776b5f53483c3024180c00000000000000000000000005111c2834404c5864707b87939fabaa9f93877b6f64584c4034291d1105000000030f1c2835414d5a66727e8a97a3afab9f93887c7064594d42372c22180e0500000000000000000000000000010a141f2a35404c58636c6e6b67635f5b57534f4b443c33291e130700000000000000000000000000000009141e28323d47515c66707a858f99a4a89e93897e746a69747e89949ea9a2988e83796e645a4f453b30261c1107000000000000000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e221508000000000000000e1a2733404d5966727f8c98a5b1a99c8f83766a5d5144382c1f13070000000000000000000000000000000000000000000916222f3b4854616d7a86939facaea195887b6f6256493c3023170a0013202c3946535f6c798693a0aca79a8d8173676b72797f85898d9092939495949492908d89847f78726a625950473d33291f140a000000000000000005121e2a36424e5a66727e8a96a2aca094887c7064594d41352a1e1207000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a000000000000000000000004101c2935414d5a66727e8a969084786d61564a3f35424e5b6875828e9b9c8f8275685b5555555555575a6068727d8995a196897d7064574b3e414c57636e7a869293877a6e62564a3e3125190c00000814212e3a46535f6c7885919daab0a4988b7f73675b4f43372b201409000000000000000000000000000000000000020d18242f3b47535f6b7783909ca8b2a69a8d8174685c4f43362a1d11040000000000000000000000000814202d3946525e6a77838f9ba79c9084786c63686d73787e858b9299a19f978f867d746a60554b4035291e130b0703000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946535f6c79868888888888888888888888888888888888888888888888888888888888888888888888888888888888888884776b5e5144382b1e11050000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1a26323e4a55616d7985919ca8aea2968a7e72675b4f43372b1f1308000000000000000000000000000c1824303b47535f6b77838f9aa6afa3988c8074685d5145392d22160a000000000c1925313d4a56626e7a86929eaab0a4988d81756a5f54493e342a20170f070100000000000000000000040b131c26303b46515d69747b77736f6b67635f5b564e453b2f24180c000000000000000000000000000007111b25303a444f59636d78828c97a1aba1968c82776d62626d77828c97a1aa9f958b80766c61574d42382e23190e040000000000000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e221508000000000000000f1c2835424e5b6874818e9aa7b3a79a8d8174675b4e4235291c10030000000000000000000000000000000000000000000713202c3945525e6b7884919daab0a3978a7d7164574b3e3125180b0013202c3946535f6c798693a0aca79a8d81736c757d848b9095999c9ea0a1a2a1a09f9c9995908a837c746b62594f453b31261b1005000000000000000915222e3a46525e6a76838e9aa6a89c9084786c6054483c3025190d01000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000000d1925313d4956626e79859195897d72665b50453a424e5b6875828e9b9c8f82756861616161616263666b717a848f9a9d9186796d6155483c47525d6874808b978e82766a5e52463a2e221509000005121e2b3744505c6975828e9aa6b2a79b8f83776b5f53483c31261b100600000000000000000000000000000000000a141f2a35404c58636f7b8793a0acaea2968a7d7165594c4033271b0e020000000000000000000000000a1723303c4955616e7a87939fa4988c8073675b5d62676d737980878f97a0a1988f867c71675c51463a2f23180c0000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070013202c3946525f6c787b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b766a5e5144372b1e11050000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000000000000000000000000000000000000000000001050708080808080808080808060300000000000000000000000000000000000000000000000000000000000000000000000004070808080808080808080807040000000000000000000000000000000000000000000000000000000105070808080808080808080808070400000000000000000000000000000000000000000008131f2b37434e5a66727e8995a1ada99d91867a6e62564a3e32271b0f030000000000000000000000000007131f2b37434f5a66727e8a96a2aea89c9185796d61564a3e32261b0f030000000915212e3a46525e6a76828e9aa5b1a99d92877b70655a50463c32292119120d0805030101010203060a0f151c252e38424c57636e7985837f7b77736f6b6760574c4034281c0f03000000000000000000000000040e18232d37424c56606b75808a949ea8a4998f857a70655b5b65707a85909aa5a79d92887d73695e544a3f352b20160c0100000000000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e22150800000000000000101d2a3643505c6976838f9ca9b2a5988c7f7266594c4033271a0d0100000000000000000000000000000000000000000004111d2a3743505d6976838f9ca9b2a5988c7f7266594c3f3326190d0013202c3946535f6c798693a0aca79a8d8173757e878f969c9e9c9a999898999b9ea2a7a5a19b958e867d746b61574d42382d22170b000000000000000d1925313e4a56626e7a87939faba4988c8074685c5044382c20140800000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000000915212d3945515d6975818c988f83786c61564b41424e5b6875828e9b9c8f82756e6e6e6e6e6e6e7072767c838c96a0978c8175695d5145434d58636e7a859195897d72665a4e42362a1e12060000030f1b2834414d5965727e8a96a2aeab9f93887c7064594d42372c22180e0500000000000000000000000000000009121c26303b46515d6874808c98a4b0aa9e92867a6e6155493d3024180b000000000000000000000000000d1926333f4b5864717d8a96a2a194887c6f635751565c62686f767d858e97a0a1988e83786e62574b4034281c100400000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d20140700121e2b3743505b666d6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6d655a4e4236291d10030000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000001080d111415151515151515151514130f0b050000000000000000000000000000000000000000000000000000000000000000060c10131515151515151515151513100c06000000000000000000000000000000000000000000000001070d1114151515151515151515151513100c07000000000000000000000000000000000000010c1824303c47535f6b77838e9aa6b0a4998d8175695d51453a2e22160a0000000000000000000000000000030f1a26323e4a56626d7985919da9ada1968a7e72665a4f43372b1f140800000005111d2a36424e5a65717d8994a0abaea3988d82776c62584e443b332b241e1915110f0e0e0e0e1013161b20272e374049545e69747f8b8f8b87837f7b7772685d5044372b1e11050000000000000000000000010b16202a343f49535e68727c87919ba6a79c92887d73685e54545e69737e88939da8a49a8f857a70665b51473c32281d130900000000000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e22150800000000000000111e2b3744515e6a7784909daab0a4978a7d7164574b3e3125180b00000000000000000000000000000000000000000000010f1c2835424e5b6875818e9ba7b3a69a8d8173675a4d4134271a0e0013202c3946535f6c798693a0aca79a8d81747e8890999a96928f8d8c8c8c8d8f92969ba1a8a6a09890877d73695f54493e33281c1105000000000004101c2935414e5a66727e8b97a3ada194887c7064584b3f33271b0f0300000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a00000000000000000000000005111d2935414d5864707b879294897e73685d5248424e5b6875828e9b9c8f827b7b7b7b7b7b7b7b7c7e82878e959e988f857a6f64584d414a545f6a75808b968f84786d6155493d32261a0e020000000c1825313d4955626e7a86929eaab0a4988c81756a5f54493e342a20170f08020000000000000000000000040a121b242d38424d58636e7985919ca8b1a69a8e82766a5e5245392d211408000000000000000000000000000f1c2835414e5a6774808d99a59e9185786c6053474b51575d646b737c858e98a39f958a7f73685c5045382c20140800000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d201407000f1b27333f4a545c61626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262615b53483d32261a0d010000000000000000000815222e3b4855616e7b8895a1a1a1988b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000000040c13191d20222222222222222222211f1b1610080000000000000000000000000000000000000000000000000000000000020a11181c2021222222222222222221201c18110a020000000000000000000000000000000000000000040c13191d202222222222222222222221201c18120a020000000000000000000000000000000005111d2935404c5864707b87939fabaca094887c7064584d4135291d11050000000000000000000000000000000a16222d3945515d6975818d98a4b0a69a8e83776b5f53483c3024180d010000010d1925313d4955616c78838f9aa5b0a99e93897e746960564d453d352f2925211e1c1b1a1a1b1d1f22262b32394049525b65707a85909b97938f8b8783786b5e5145382b1e1205000000000000000000000009131d27323c46515b656f7a848e99a3aa9f958b80766b61574c4d57616c76818c96a1aba1978c82786d63594e44392f251a1006000000000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e22150800000000000000121f2c3845525e6b7885929eabafa396897c706356493d3023170a00000000000000000000000000000000000000000000000e1b2734414d5a6773818d9aa6b3a79b8e8174685b4e4135281b0f0013202c3946535f6c798693a0aca69a8d807b869099958f8a8683817f7e7f8082868a90979ea7aaa2998f857b70665b5044392d22160b00000000000713202c3845515d6a76828e9ba7aa9d9185786c6054483b2f23170b0000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a000000000000000000000000010d1824303c48535f6a76818c988f84796f645a50464e5b6875828e9b9d91888888888888888888898b8e93999c968f867d73695e534747515c66717b8691958a7e73675c5044392d211509000000000915212d3945515d6975818d99a5b0a99d92877b70655a50463c3229211a130e090603020101010204070a0f151c242d363f49545e6974808b96a1adaca195897d71665a4d4135291d110500000000000000000000000002111d2a3743505c6976828f9ca89b8f8276695d50443f454c5259616a737c86919ca69b9085796d6155493c3024170b00000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d201407000b17222d38424a515555555555555555555c646869696969696969665e5555555556606769696969696969686259555555555555555554504941372c211509000000000000000000000815222e3b4855616e7b8894949494948b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000040d161e24292d2e2e2e2e2e2e2e2e2e2e2b27211a1209000000000000000000000000000000000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2c28231c140b02000000000000000000000000000000000000040d161d24292d2e2e2e2e2e2e2e2e2e2e2e2c28231c140c020000000000000000000000000000000a16222e3945515d6974808c98a4aca79b8f83776c6054483c3024190d0100000000000000000000000000000005111d2935414c5864707c8894a0acab9f93887c7064584c4135291d11060000000915212d3844505b67727d89949faab0a59a90857b72685f574e47403a35312d2b2928272728292b2e32373d434a525b646d77828c97a2a39f9b958a7e73675b4f43372a1d11040000000000000000000006101a252f39444e58626d77818c96a0aaa2988e83796e645a4f4545505a656f7a848f99a4a89e94897f756a60564b41372c22180d030000000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e22150800000000000000131f2c3946525f6c7985929facafa295887b6f6255493c2f22160900000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3a89b8f8275685b4f4235281c0f0013202c3946535f6c798693a0aca6998c80828d98918a837e79767472727273767a7e858c959ea7aba1978d82776c61554a3e33271b0f04000000000a16232f3b4854616d7986929eaaa69a8e8175695c5044382b1f13070000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000000008141f2b37424e5965707b8691968b81766c61584e4e5b6875828e9b9f9a95959595959595959596989b9996918b847d746b61574c465059636d78828d988e83786d61564b3f34281c10050000000005111d2935414d5965717c88949fabaea3988d82776c62584e443b332b241e191512100f0e0d0e0f1113161b20272e363f48515b65707b86919ca7b2a79b9084786d6155493d3125190d0100000000000000000000000005121f2b3845515e6b7784919da69a8d8174675a4e41353a41484f58616a75808b96a2a195897d7164584c3f33261a0d01000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070006111c2630384045484848484848484956626d75757575757575757065594c484f5b677275757575757575746a5f524848484848484848443f372f251a1004000000000000000000000815222e3b4855616e7b888888888888887e7165584b3e3225180b000000000000000000000000000000000000000000000000020c161f282f35393b3b3b3b3b3b3b3b3b3a38332c241b110700000000000000000000000000000000000000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b3b38342e261d140a0000000000000000000000000000000000010c161f282f35393b3b3b3b3b3b3b3b3b3b3b39342e261e140a0000000000000000000000000000000e1b27323e4a56626d7985919da0a0a0968b7e73675b4f43372c20140800000000000000000000000000000000010c1824303c4854606b77838f9ba0a0a0988c8175695d51453a2e22160a00000004101c28333f4a56616c77828d98a2adaca1978d847a71696059524b46413d3a37353434343536383b3e43484e555c646d768089939ea8b0a59a8f84796d62564b3f33271b0e02000000000000000000030d18222c36414b55606a747e89939da8a69b91867c71675d52483d3e49535e68737d88929da7a69b91877c72675d53483e34291f150a0000000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e2215080000000000000013202c3946535f6c7986929facaea295887b6e6255483b2f22150800000000000000000000000000000000000000000000000d192633404c5966727f8c99a6b2a89c8f8275695c4f4236291c0f0013202c3946535f6c798693a0aca5988c7f899490878078726d6a67666565676a6e737a838c959faaa99e94897d72665b4f44382c201408000000000c1925323e4b5764707c8995a2aea3978a7e7265594d4034281c0f030000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a00000000000000000000000000030f1a26313d48535f6a75808b9592887d736960564e5b6875828e92929292929292929292929292918f8d8985807a736b62594f464f58626b75808a9492887d72675c50453a2e23170b0000000000010d1925313d4854606b77838e99a4afa99e93887e746960564d453d36302a25221f1d1b1a1a1b1c1d2023272c32384048515a636d77828c97a2adaca1968a7f73685c5045392d211509000000000000000000000000000613202c3946525f6c7986929fa5998c7f7266594c40332f363d464f58636e7a86929ea5998d8174675b4e4235281c0f02000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d20140700000a141e262e34393b3c3c3c3c3c3e4a5764717d8282828282828174675a4d43505d6976828282828282827a6d6053473c3c3c3c3c3c3b38342d251d130900000000000000000000000815222e3b4854616d797b7b7b7b7b7b7b7a7164584b3e3125180b00000000000000000000000000000000000000000000000008131e28313a414648484848484848484847443e362d23190e0300000000000000000000000000000000000000000000000006111c262f383f4548484848484848484848453f382f261c11060000000000000000000000000000000008131e28313a4045484848484848484848484845403830261c11060000000000000000000000000000111e2a37434f5b66727e8a939393939392867a6e62564a3f33271b0f0300000000000000000000000000000000000814202b37434f5b67737e8a93939393939185796e62564a3e3225190c000000000b17222e3944505b66717b86919ba5afa99f968c837a726a635d57514d49464442414041414345474b4f545960666e767f88919ba5b0a99e94897e73685c51453a2e22170b000000000000000000000b151f29343e48535d67717c86909ba5a99e94897f746a60554b403637414c56616b76818b95a0aaa3988e84796f655a50453b31261c120700000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e2215080000000000000013202c3946535f6c798693a0acaea295887b6e6155483b2e22150800000000000000000000000000000000000000000000000c1926323f4c5965727f8c99a6b2a99c8f8275695c4f4236291c0f0013202c3946535f6c798693a0aca69a8f898e92887e756d67615d5b5958595a5d62697079838d98a3aea59a8f83776c6054483c3024180c000000020f1b2834414d5a6673808c98a5ada094887b6f6256493d3124180c000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a00000000000000000000000000000915202b37424d58636e79848e988f857b72685f565b68758286868686868686868686868686858483807d79746f68615950475058616a747d8791968b81766b60554a3f34281d12060000000000000814202c38434f5b66717d88939ea9afa59a90857b72685f574f48413b36322e2b2928272727282a2c2f33373d434a525a626c757f89949ea9b0a59a8f84796e62574b4034281c1005000000000000000000000000000613202c3946535f6c798693a0a5988b7e7265584b3f32252c343d47525d6976828f9ba89c8f8376695d5043362a1d1004000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070000020c141c23292d2f2f2f2f2f313e4a5764717d8a8f8f8f8f8e8174675a4d43505d6976838f8f8f8f8f877a6d6053473a2f2f2f2f2f2e2c28221b130b0100000000000000000000000713202d3945515d676d6e6e6e6e6e6e6e6e695f54483c3023170a0000000000000000000000000000000000000000000000010d1925303a434c52555555555555555555544f483f352a1f14080000000000000000000000000000000000000000000000000b17222d38424a5154555555555555555554514a42382d22170b000000000000000000000000000000040f1a252f3a434b515455555555555555555554514a42382d22170b0000000000000000000000000000131f2c3946525f6b7783868686868686868175695e52463a2e22160b000000000000000000000000000000000000030f1b27333f4a56626e7a86868686868686867e73665a4d4034271a0e0000000006111d28333e49545f6a747f89939da6b0a89e958d847c756e68625d595552504f4e4d4d4e4f5154575b5f656b71788088919aa3adaba1978d82776c61564b4034291d120600000000000000000008121c27313b46505a646f79838e98a2aca1978c82776d63584e44392f303a454f5a646f79848e99a3aaa0958b81766c62574d43382e23190f04000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e2215080000000000000013202c3946525f6c7986929facaea295887b6f6255483c2f22150900000000000000000000000000000000000000000000000d192633404c596673808c99a6b2a89c8f8275695c4f4236291c0f0013202c3946535f6c798693a0acaba19996968b80766c635c56514e4c4c4c4e51575e67717b86919da8aba094887c7065584c4034281c0f03000005111e2a3743505c6975828f9ba7aa9e9185786c5f53473a2e211508000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000000000040f1a26313c47525c67727c8791978e847a7168605a6773797979797979797979797979797978777674716d69635d564f4a5159626a737c868f988e84796f645a4f44392e23170c0100000000000004101b27333e4955606b76828c97a1acaca1978d847a71696159524c47423e3a3836353434343536383b3f43484e555c646c757e87919ba5b0a99e94897e73685c51463a2f23170c00000000000000000000000000000613202c3946535f6c7986939fa5988c7e7265594c3f3226222b35414e5a6774818d9aa79d9084776a5d5144372a1e1104000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d201407000000020b12181d202222222224313e4a5764717d8a979c9c9a8e8174675a4d43505d697683909c9c9c94877a6d6053473a2d2222222222201c17110a0100000000000000000000000004111d2935404b555c6161616161616161615e574d43382c201407000000000000000000000000000000000000000000000005121e2a36414c565d616161616161616161605a51473c3024180c0000000000000000000000000000000000000000000000000f1b27333f4a545c616161616161616161615c544a3f33271b0f0300000000000000000000000000000b16212b36414c555d61616161616161616161615c544a3f33281b0f0300000000000000000000000000131f2c3946525f6b767979797979797979797165594d4135291e1206000000000000000000000000000000000000000a16222e3a46525d697579797979797979797972665a4d4034271a0e00000000000b17222d38434d58636d77818b949ea7afa89f968e878079736e6965625f5d5b5b5a5a5b5c5e6063676b70767c838a929aa3acaca2998f857b70665b50453a2f23180c010000000000000000050f1a242e38434d57626c76818b959faaa49a8f857a70665b51473c322728333d48525d67727c87919ca6a79d93887e73695f544a40352b21160c020000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e22150800000000000000121f2c3945525f6c7885929facafa295897c6f6255493c2f23160900000000000000000000000000000000000000000000000d1a2733404d5a6673808d99a6b3a89b8e8275685b4f4235281c0f0013202c3946535f6c798693a0acb3aaa59b9084796e645a514a4541403f3f41464d555f6a75808c98a3afa5998d8175695c5044382b1f130600000714202d3946525f6b7885919eaaa89b8f8276695d5044372b1e1206000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a00000000000000000000000000000009141f2a35404b55606a757f8993968d837a726a6161696c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6b696764615d58524c4d545c636b747c858e9890867c72685d53483d32271c110600000000000000000a16222d38444f5a65707b85909aa4aea99f968d847b736b645d57524e4a47444341414041424345484b4f545960666e767e879099a3adaba1978c82776c61564b4035291e1207000000000000000000000000000006121f2c3945525f6b7885929ea6998d8073675a4e42362f2e2e34414d5a6773818d9aa69d9184776a5d5144372a1e1104000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d2014070000000000070c11141515151724313e4a5764717d8a97a4a79a8e8174675a4d43505d697683909da9a094877a6d6053473a2d201515151513100c060000000000000000000000000000010c18242f39434b51545454545454545454524d453c31261b0f0400000000000000000000000000000000000000000000000814212d3a46525d686e6e6e6e6e6e6e6e6e6c63584c4034281b0e020000000000000000000000000000000000000000000000121e2b37434f5b666d6e6e6e6e6e6e6e6e6d665b4f43372b1e12050000000000000000000000000007121c27323d48535d676e6e6e6e6e6e6e6e6e6e6d665b5044372b1f120500000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c685f54483d3125190d010000000000000000000000000000000000000006121d2935414d58636a6c6c6c6c6c6c6c6c6c6960564a3e3225190c000000000005101b26313c46515b656f79828c959da6aea8a098918b847e7a75716e6c6a6867676767696a6c6f73777c81878e959ca4acaba29a90877d73695f54493e33281d12070000000000000000020d17212b36404a555f69737e88929da7a79d92887e73695e544a3f352a20212c36414b56606b75808a959faaa49a90857b71665c51473d32281e13090000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e22150800000000000000121f2b3845515e6b7884919eabb0a396897d7063564a3d3024170a00000000000000000000000000000000000000000000000e1b2834414e5b6774818d9aa7b4a79a8e8174675b4e4135281b0e0013202c3946535f6c798693a0acb9aea2968a7e73685d5248403935333233353b434d58646f7b87939faba99d9185786c6054473b2f22160900000916222f3b4854616e7a8793a0ada6998d8073675a4e4135281c0f03000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a000000000000000000000000000000030e19242f39444e59636d77818a94958d847b736c645d5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5e5d5b5855514c4c52585f666d757d868e9791887e746a60564c41362c21160b00000000000000000005101c27323e49535e69737e88929ca5afa89f968d857d756f69635e5a5653514f4e4d4d4d4e505254575b60656b717880889099a2abaca2998f857b70665b50453a2f23180d01000000000000000000000000000004111e2b3844515d6a7783909da89b8f82766a5e52473f3b3a3b3e46515c6975828e9ba79c908376695d5043372a1d1004000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d20140700000000000000040708090b1724313e4a5764717d8a97a4a79a8e8174675a4d43505d697683909daaa094877a6d6053473a2d20140909080704000000000000000000000000000000000007121d273139404547484848484848484846413b332a20150a0000000000000000000000000000000000000000000000000916222f3c4955626e7a7b7b7b7b7b7b7b7b75695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946525f6c777b7b7b7b7b7b7b7b776c5f5246392c201306000000000000000000000000030e18232e39444e59646f797b7b7b7b7b7b7b7b7b786c5f5346392d201306000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5d564d43382c2014080000000000000000000000000000000000000000010d1925303c4751595e5f5f5f5f5f5f5f5f5f5d574e44392d2216090000000000000a15202a353f49535d677079838b949ca4abaaa39c96908a86817e7b787675747373747577797c7f83888d92989fa6aea9a19990887e756b61574d42382d22170c0100000000000000000a141e29333d48525c66717b85909aa4aaa0958b81766c61574d42382d23191a242f39444e59636e78838d98a2aca1978d82786e63594f443a30251b100600000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e22150800000000000000111e2b3744515d6a7784909daab1a4978a7e7164584b3e3225180c0000000000000000000000000000000000000000000003101d2936424f5c6875828f9ba8b3a6998d8073665a4d4034271a0e0013202c3946535f6c798693a0acb6aa9e92867a6e62564b40362e2926252629313c47535f6b77838f9ba8ada195887c7063574a3e3125190c00000b1724313d4a5663707c8996a2afa4978b7e7165584c3f3226190d00000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000000000000007121d27323c47515b656e78818a94968e857d766f68615b5652525252525252525252525251504e4c494d52575d6369707880878f9891887f756c62584e443a2f251a0f05000000000000000000000b16212c37424d57626c76808a939da6aea89f978f87807a746f6a6663605e5c5b5a5a5a5b5c5e6164676b70767c838a929aa2ababa39a90877d73695e54493e34291d120700000000000000000000000000000001101d2936424f5b6874818d9aa69e92867a6f6459514b4847484a5058626d7985919da79a8e8175685b4f4235291c1003000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2ada094877a6d6053473a2d20140700000000000000000000000b1724313e4a5764717d8a97a0a09a8e8174675a4d43505d697683909da0a094877a6d6053473a2d20140700000000000000000000000000000000000000000008131e28313a414649494949494949494947423c342a20160a0000000000000000000000000000000000000000000000000916222f3c4955626f7c888888888888888376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798688888888888886796c5f5346392c2013060000000000000000000000000a141f2a35404a55606b7681888888888888888881766b5f5246392c201306000000000000000000000000000a16212c3740484f52535353535353535353514c443b31261b100400000000000000000000000000000000000000000008141f2a353f474e52535353535353535353514c453c32281d1105000000000000030e18232d37414b555e677079828a9299a0a7ada7a19b96928d8a8785838281818181828486888b8f93989ea4aaaca59e978f877e756c63594f453b31261b1106000000000000000007111c26303a454f59646e78838d97a1aca3998e84796f645a50453b30261c11131d28323d47525c67717c86919ba6a99f948a80756b60564c41372d22180e03000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e22150800000000000000101d2936434f5c6975828f9ca8b2a5998c7f7366594d4034271a0e0100000000000000000000000000000000000000000006121f2b3844515e6a7783909da9b1a5988b7e7265594c3f3226190c0013202c3946535f6c798693a0acb3a79a8e8276695d51463a2f241d1a1919202b36424e5b6773808c98a5b1a4988b7f72665a4d4134271b0e02000c1926323f4c5865717e8b97a4afa295897c6f63564a3d3024170b00000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a00000000000000000000000000000000010b16202b353f49535c666f78818a92978f888179736d67615c5853504d4a484746464647494b4d5154595d62686e747b828a919890887f766d635a50463c32281e1308000000000000000000000005101b26303b46505a646e78818a949ca4aca9a199928b85807a76726f6c6a696767676768696b6d7073777c81878e949ca3acaaa29991887e756b61574d42382d22170c01000000000000000000000000000000000e1a2733404c5965717e8a96a2a3978b80756b635c57555454565b616a747e8a95a1a3978b7e7266594d4034271a0e0100000000000000000000000000000000000003070a0b0b16222f3c4955626f7c8996a2ada094877a6d6053473a2d20140700000000000000000000000b1724313e4a5764717d8a939393938e8174675a4d43505d6976839093939393877a6d6053473a2d2014070000000000000000000000000000000000000000010d19242f3a434c52555555555555555555534e463c32271c100400000000000000000000000000000000000000000000000916222f3c4955626f7c899595959595908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693959595959386796c5f5346392c201306000000000000000000000006101b26313c46515c67727c879295959595958f857a6f645a4f43372a1e11050000000000000000000000000005101a252e373e434646464646464646464644403a32291f150a00000000000000000000000000000000000000000000030e19232d353d424546464646464646464645413b332a21160b000000000000000007111b252f39434c555e67707880888f959ca2a7aca7a29e9a969491908e8e8d8d8e8f909295989b9fa4a9aba6a09a948d857d756c635a51473d33291f140a0000000000000000040e19232d38424c57616b75808a949fa9a69c91877c72675d53483e33291f140a0b16202b35404a555f6a747f8a949ea9a69c91877c72685d53493e342a1f150b000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e221508000000000000000f1b2835414e5b6774818d9aa7b3a79a8e8175685b4f4236291d11040000000000000000000000000000000000000000000815212e3a4753606c7985929fabafa3968a7d7064574a3e3124180b0013202c3946535f6c798693a0acb0a4978b7e72665a4d4135291e120d0c0e1a26323f4b5764707d8996a2afa79b8e8275685c4f43362a1d1004000e1a2734404d5a6673808c99a6ada094877a6e6154483b2f22150900000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000000000000000040e19232d37414a545d666f7881899198928b847e78726d6864605c595755545353535456575a5d6165696e737980868d94968f877e766d645b51483e342b20160c0100000000000000000000000009141f29343e48525c666f78818a929ba2aaaba49d96918b86827e7b79777574747374747677797c8083888d92999fa6aea7a09890887f766c63594f453b30261b100600000000000000000000000000000000000b1824313d4955616d7985919ca79d92877d746d676361616163676c737c86909ba69e92877b6e62564a3d3125180c000000000000000000000000000000000002090f1316181818222f3c4955626f7c8996a2ada094877a6d6053473a2d20140700000000000000000000000b1724313e4a5764717d8686868686868174675a4d43505d6976838686868686867a6d6053473a2d201407000000000000000000000000000000000000000005111d2935414c565d6262626262626262625f584e43382c20140800000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2a2a29c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0a2a2a09386796c5f5346392c20130600000000000000000000010c17222d38424d58636e78838e99a2a2a29d93887d73685d53483d32261a0e02000000000000000000000000000009131c252c32373939393939393939393938342f2820170d03000000000000000000000000000000000000000000000007111b232b3136393939393939393939393835302921180f0400000000000000000009141d27313a434c555e666e767d848b91969ca1a5a9aaa6a3a09e9c9b9a9a9a9a9b9d9fa1a4a7aba8a49f9a958f89827b736b635a51483f352b21170d0300000000000000010c16202b353f49545e68737d87929ca6a99f948a80756a60564b41362c22170d02040f19242e39434e58636d78828d97a2aca3998e847a6f655b50463b31271c12080000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e221508000000000000000d1a2633404c5965727e8b98a4b1a99d9084776a5e5245392c2014080000000000000000000000000000000000000000000c1824313d4956626f7b8894a1adada194887b6e6255493c2f23160a0013202c3946535f6c798693a0acaea195887c6f63564a3e3125190d01000a16232f3c4855616e7a8793a0adaa9d9084776b5e5145382c1f1206000f1c2835424e5b6875818e9ba7ac9f9286796c6053463a2d20140700000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a00000000000000000000000000000000000007111b252f38424b545d666e777f878e95968f89837e78746f6c6866636261605f6061626466696d71757a7f858b9198938c847c746c645b52493f362c23190f0400000000000000000000000000020d18222c36404a545d666f78818990989fa5aca8a29c97928e8b888684828181818181828486898c9094999ea4aaa9a39d958e867e756d645a51473d33291f140a0000000000000000000000000000000000000815212d3945515d6974808b96a0a39990877e7873706e6d6e6f73777e858e98a2a2978c81766a5e52463a2e22150900000000000000000000000000000000050d141a1f23252525252f3c4955626f7c8996a2ada094877a6d6053473a2d20140700000000000000000000000a1724313d4a57636f797979797979797972665a4d434f5c687479797979797979776c6053463a2d20140700000000000000000000000000000000000000000714202d3946525d686e6f6f6f6f6f6f6f6f6a6055493c3023170a00000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2aea99c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000008131e29333e49545f6a747f8a95a0aaaca1968c81766c61564c41372c21160a000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2b28241e160e050000000000000000000000000000000000000000000000000009111920262a2c2c2c2c2c2c2c2c2c2c2c29241f170f0600000000000000000000020c151f28313a434c545c646b727980858b9095999da0a3a5a7a9a9a8a7a7a7a7a8a9a9a7a5a29f9c98948f8a847e777069615951483f362d23191005000000000000000008131e28323c47515b66707a858f99a3aca2978d82786e63594e44392f251a1005000007121c27323c46515b66707b86909ba5aaa0968b81776c62584d43392e24190f0300000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e221508000000000000000b1825313e4a5763707c8996a2aeac9f93867a6d6155483c3024180c000000000000000000000000000000000000000004101c2834404d5965727e8a97a3b0ab9e9285796c6053463a2d2114080013202c3946535f6c798693a0acac9f9386796d6054473b2e22150900000714202d3946525f6c7885919eabac9f9286796c6053463a2d20140700101d293643505c6976828f9ca9aa9e9184786b5e5245382b1f120500000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000000000000000000009131d263039424b545c656d747c838a9197948f8984807c787572706e6d6d6c6d6d6f717376797d81868b9096968f89817a726b625a524940372d241a110700000000000000000000000000000006101a242e38424b545d666e777e868d949aa0a6aba8a39e9b979492908f8e8d8d8d8e8f919395989ca0a4a9a9a49e98928b847c746c635b52483f352b21170d0200000000000000000000000000000000000005111d2935414c58636e79848e98a1a299908a84807c7b7a7a7c7e83898f97a0a29990857b7065594e42362a1e1206000000000000000000000000000000040e171f262b2f31323232323c4955626f7c8996a2ada094877a6d6053473a2d20140700000000000000000000000916222e3b47535e676c6c6c6c6c6c6c6c6960564a404c58626a6c6c6c6c6c6c6c6b655b4f44372b1f120500000000000000000000000000000000000000000815222e3b4855616e7a7c7c7c7c7c7c7c7b7164584b3e3225180b00000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000040f1a252f3a45505b65707b86919ca6afa59a8f857a6f655a4f453a2f251a0f0400000000000000000000000000000000010910161a1e1f2020202020202020201f1c18130c05000000000000000000000000000000000000000000000000000000070f151a1d1f2020202020202020201f1d19130d06000000000000000000000000030d161f28313a424a525961676e747a7f84898d909496999b9c9e9e9f9f9f9f9e9d9c9a989693908c88837e78736c665f574f473f362d241b11080000000000000000010d19242f3a444e59636d77828c96a1aba59a90857b71665c51473d32281d1309000000000b15202a353f4a545f69747e89939ea8a89d93897e74695f554a40362b20140900000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e221508000000000000000916222f3b4854616d7a86939facaea296897d7165584c4034281d1106000000000000000000000000000000000000000a15212d3844515d6975818e9aa6b3a89b8f83766a5d5144382b1f12050013202c3946535f6c798693a0acaa9e9184786b5e5245382c1f1306000005111e2b3744515d6a7783909da9ada194877b6e6155483b2f22150800111e2a3744515d6a7784909daaa99d9083776a5d5044372a1e110400000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a00000000000000000000000000000000000000010b141e273039424a535b636a727980868c929895908c8885817e7d7b7a7979797a7b7d808285898d919696918b847e7770686159514840372e251b1208000000000000000000000000000000000008131c263039424b545c656d747b83898f959a9fa4a7aba7a4a19f9d9c9b9a9a9a9b9c9d9fa2a4a8aaa6a29d98938d878079726a625a514940362d23190f0500000000000000000000000000000000000000010d1824303b47525d68727c868f979fa29b95908c89888787898b8f949aa1a09890877e74695e53483d31251a0e020000000000000000000000000000010c16202930373c3e3e3e3e3e3e4955626f7c8996a2ada094877a6d6053473a2d201407000000000000000000000006121f2b36414c555c5f5f5f5f5f5f5f5f5d574e443b4650595e5f5f5f5f5f5f5f5f5a53493e33271b0f0300000000000000000000000000000000000000000815222e3b4855616e7b888989898989897e7165584b3e3225180b00000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000b16212b36414c57616c77828d98a2ada89e93887e73685e53483e33281e130900000000000000000000000000000000000000050a0e111313131313131313131312100c0701000000000000000000000000000000000000000000000000000000000004090e111313131313131313131312100d08020000000000000000000000000000040d161f28303840484f565d63696e73787c8184878a8c8e9091929292929292908f8e8c898683807c77726d67615b544d453d352d241b120900000000000000000005121e2a35414b56606a757f89949ea0a09d93897e74695f544a40352b20160c0100000000040e19232e38424d58626c77828c97a0a0a09a90867b71675c52473c3125190d01000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e221508000000000000000713202c3945525e6a7783909ca8b2a5998d8175695d5145392e22170c02000000000000000000000000000000000005101b26323d4955616d7985919daab1a4988c8073675a4e4135291c10030013202c3946535f6c798693a0aca99c908376695d5043372a1d1104000002101c2936434f5c6975828f9ca8afa295897c6f6256493c3023160a00121e2b3845515e6b7884919eaba99c8f8275695c4f4336291d100300000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000000000000000000000020c151e2730384149515860676e757b81878c91969894918e8b89888786868687888a8c8f92959994908b858079736c655e564f473f362e251c1309000000000000000000000000000000000000010a141e273039424a535b626a71787e84898f93979b9fa2a4a6a8a9a8a7a7a7a7a8a8a9a8a6a3a19d9a96918d87827c756e67605850483f372e241b110700000000000000000000000000000000000000000008131f2a36414b56606a747d858d949a9fa09c989694949495989b9fa09b958e867e756c62574d42372b20150900000000000000000000000000000007121d28323b42484b4b4b4b4b4b4b55626f7c8996a2ada094877a6d6053473a2d2014070000000000000000000000020e1a25303a434b505353535353535353514c453c343e474e5253535353535353524f4941372d22160b0000000000000000000000000000000000000000000815222e3b4855616e7b8895969696968b7e7165584b3e3225180b00000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000007121d27323d48535d68737e89949ea9aca1978c81776c61574c41372c21170c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161e262e363d444b51575d63686c7074787b7d808283848586868685858483817f7d7a77736f6b67615c565049423b332b231b1209000000000000000000000814212d3a46525d68727c879193939393938b81776c62574d43382e23190f0400000000000007111c26313b46505b65707a858f93939393938d83786e64594d4135291c1003000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e2215080000000000000004111d2a36424f5b6774808c98a4b1a99d9185796d61564a3f34291e130900000000000000000000000000000000040d17222d38434e5a65717d8995a1adada194887c7063574b3e3226190d000013202c3946535f6c798693a0aca89b8f8275685c4f4235291c0f030000000f1b2835414e5b6774818e9ba7b0a3968a7d7063574a3d3124170a00121f2c3945525f6b7885929faba89b8e8275685b4f4235281c0f0200000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a000000000000000000000000000000000000000000030c151e262f373f474e555c636970757b81858a8e92959898969494939393949596999794918d89847f7a746e68615a534c453d352d241c130a0100000000000000000000000000000000000000020c151e273038414951585f666d73787e83878b8f9295989a9c9d9e9f9f9f9f9f9e9d9b999794918e8a86817c76706a645d564e463e362d241b120900000000000000000000000000000000000000000000020e19242f3a444e58626b737b83898f93979a9d9e9fa09f9e9d9b98948f8a837c746c635a50463b30261a0f040000000000000000000000000000000c18232f3a444d535758585858585858626f7c8996a2ada094877a6d6053473a2d20140700000000000000000000000008131e2831394044464646464646464645413b332c353c42454646464646464646433e372f251b10050000000000000000000000000000000000000000000815222e3b4855616e7b8895a2a2a2988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000030e19232e39444f59646f7a858f9aa5b0a59a90857a70655a50453a30251a100500000000000000000003070a0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b09050100000000000000000000000000000000000000000000000000000000000000000000040c141c242b333a40464c52575c6064686b6e717375767778797979797877767472706d6a67635f5b56514b453e383129211a110900000000000000000000000916232f3c4955626e798486868686868686847a6f655a50463b31261c120700000000000000000a151f2a343f49545e69737e868686868686868680756a5d5144372b1e1104000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aea295887b6e6155483b2e22150800000000000000010e1a26333f4b5864707c8894a0acada1958a7e72675b50453a30251b120a0200000000000000000000000000050d161f29333e49545f6b76828e9aa5b1a89c9084786c6054473b2f23160a000013202c3946535f6c798693a0aca79b8e8174675b4e4135281b0e020000000e1a2734414d5a6773818d9aa7b1a4978a7e7164574b3e3124180b0013202c3946525f6c7986929faca89b8e8174675b4e4135281b0e0200000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a00000000000000000000000000000000000000000000030c141d252d353c444b52585e646a7075797e8285888b8d8f919292929292908f8d8a8884817c78736e69635d565049423a332b231b120a01000000000000000000000000000000000000000000030c151e262f373f464d545b61676d72777b7f8386898b8d8f9091929292929291908e8d8a8885827e7975706b655f59524b443c342c241b120900000000000000000000000000000000000000000000000008131d28323d465059616971787e83878b8e909192939392908e8c88847e78726a625a51483e34291f140900000000000000000000000000000000101c2834404b565e6465656565656565656f7c8996a2ada094877a6d6053473a2d201407000000000000000000000000020c161f272e3438393939393939393938353029232b313639393939393939393937332d251d1309000000000000000000000000000000000000000000000815222e3b4855616e7b8895a2aca5988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000a141f2a35404b55606b76818b96a1aca99e93897e73695e53493e33291e13090000000000000000030a0f141718191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919181815110c0600000000000000000000000000000000000000000000000000000000000000000000020a121a21282f353b41464b5054585c5f62646668696b6b6c6c6c6c6b6a69686664615e5b57534f4a453f3a332d261f1710080000000000000000000000000916232f3c4955626e7879797979797979797972685d53493e34291f150a000000000000000000030d18222d37424c57616c76797979797979797979756a5d5144372b1e1104000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a5aca295887b6e6155483b2e22150800000000000000000b17232f3b4854606c7884909ca7b2a69a8f83786c61564c41372d241c140d070200000000000000000004090f161f28313b45505a65717c87939faaafa4988c8074685c5044382b1f1307000013202c3946535f6c798693a0aca79a8e8174675a4d4134271b0e010000000d1a2733404d596673808d9aa6b1a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8e8174675a4e4134281b0e0100000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000000000000000000000000000020b131b232b323940474d53595f64696d7275797c7e81838485868686858482817e7b7874706c67625d57524b453e37302921191109000000000000000000000000000000000000000000000000030c151d252d343c434a50565c61666b6f7376797c7e818284858586868685848382807e7b7875726d69645f5a544e474139322a231a120900000000000000000000000000000000000000000000000000010c16212b343e474f585f666c72777b7e8183858686868584827f7c78736d67605850483f362c22180d0300000000000000000000000000000000121f2b3844505c68707171717171717171717c8996a2ada094877a6d6053473a2d20140700000000000000000000000000040d151d23282b2c2c2c2c2c2c2c2c2c29241f1920252a2c2c2c2c2c2c2c2c2c2a27211b130b01000000000000000000000000000000000000000000000815222e3b4855616e7b8895a0a0a0988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000006101b26313c46515c67727c87929da8aca1978c82776c62574c42372c22170c0200000000000000050d141b2023252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252524211d1710090000000000000000000000000000000000000000000000000000000000000000000000080f161d242a30353a3f44484c4f5255585a5b5d5e5f5f5f5f5f5e5e5c5b595755524f4b47433e39342e28221b140d05000000000000000000000000000814212d3a46525d666c6c6c6c6c6c6c6c6c6c6960564c41372c22180d030000000000000000000006111b26303b45505a646b6c6c6c6c6c6c6c6c6c6b63594d4135291c1003000013202c3946535f6c798693a0a0a09a8e8174675a4d4134271a0e01000b1825323e4b5865717e8b98a0a0a095887b6e6155483b2e221508000000000000000007131f2b3744505c67737f8b97a2aeaba094897e73685d53493f362e251e18130f0b090707060708090c10141a2128313a434d57616c77828d99a4afaa9e93877b6f64584c4034271b0f03000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0e010000000d1a2633404c596673808c99a6b2a5988c7e7265584c3f3225190c0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e0100000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000109111920272e353c42484e53585d6165696d6f727476777879797978777574716f6c6864605c57524c46403a332c251e170f070000000000000000000000000000000000000000000000000000030b131b232a31383f454b50565a5f63676a6d707274757778787979797877767573716f6c6965615d59544e49433c362f2820191108000000000000000000000000000000000000000000000000000000050f19222c353d464d555b61666b6f72757778797979787775736f6c67625c554e463e362d241a1006000000000000000000000000000000000013202c3946535f6c797e7e7e7e7e7e7e7e7e7e8996a2ada094877a6d6053473a2d2014070000000000000000000000000000040b12171c1f20202020202020201f1d19130e141a1d1f20202020202020201e1b1610090100000000000000000000000000000000000000000000000815222e3b4855616e7b8893939393938b7e7165584b3e3225180b00000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000020c17222d38424d58636e78838e99a4afa59b90857a70655b50453b30251b100500000000000000040e171f262c303232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232312e29221b12090000000000000000000000000000000000000000000000000000000000000000000000050c12191e242a2f34383c404346494b4d4f505152525352525251504e4d4b4845423f3b37322e28231d17100a03000000000000000000000000000005111d2935404b545c5f5f5f5f5f5f5f5f5f5f5d574e443a30251b100600000000000000000000000009141e29333e48525a5f5f5f5f5f5f5f5f5f5f5e5951473c3125190d00000013202c3946535f6c798693939393938e8174675a4d4134271a0e01000b1825323e4b5865717e8b9393939393887b6e6155483b2e2215080000000000000000030f1b27333f4b57636e7a86919da8b1a69a8f857a6f655b514840373029231f1b1816141313131416191c20252b323a434c555f69737e89939eaaafa4998d82766b5f53473b2f23170b00000013202c3946535f6c798693a0aca79a8d8173675a4d4134271a0e010000000d192633404c596673808c99a6b2a5988c7e7265584c3f3225190c0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e0100000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000070e161d242a31373c42474c5155595d60636668696b6b6c6c6c6b6a696765625f5c5854504b46413b352f28221b140c05000000000000000000000000000000000000000000000000000000000109111820272d343a3f454a4e53575a5e61636567696a6b6c6c6c6c6b6b6a68676562605c5955514d48433d37312b241d160e07000000000000000000000000000000000000000000000000000000000007101a232b343c434a50565b5f6366686a6b6c6c6c6c6a6966635f5b56514a443c352c241b120800000000000000000000000000000000000013202c3946535f6c79868b8b8b8b8b8b8b8b8b8f99a4ada094877a6d6053473a2d20140700000000000000000000000000000000070c0f12131313131313131312100d0803090d11131313131313131313110f0a05000000000000000000000000000000000000000000000000000815222e3b4855616e7b868686868686867e7165584b3e3225180b00000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000008131e29343e49545f6a74808a95a0aba99e93897e73695e54493e34291e140900000000000000010c16202931373c3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3d3a342c241b1006000000000000000000000000000000000000000000000000000000000000000000000001070d13191e23282c3033373a3c3e40424344454646464645444342403e3c3936332f2b27221d18120c0600000000000000000000000000000000010d19242f39424a5053535353535353535353514c453c32281e130900000000000000000000000000020d17222c3640484f52535353535353535353524e473f352b20140900000013202c3946535f6c79868686868686868174675a4d4134271a0e01000b1825323e4b5865717e868686868686867b6e6155483b2e2215080000000000000000000b17232f3b46525e6975808b97a2adaca1968b81776d635a5249423b352f2b27242221202020212325282c31363d444c555e67717b858f9aa5b0a99e93887c71655a4e42372b1f130700000013202c3946535f6c798693a0aca79a8e8174675a4e4134271b0e010000000d1a2633404c596673808c99a6b2a5988c7e7265584c3f3225190c0013202c3946535f6c798693a0aca79a8e8174675b4e4134281b0e0100000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a000000000000000000000000000000000000000000000000000000040b12191f252b31373c4145494d515457595b5d5e5f5f5f5f5f5e5c5a585653504c48443f3a35302a241d1710090200000000000000000000000000000000000000000000000000000000000000070e151c22282e34393e43474b4e515457595b5c5d5e5f5f5f5f5f5e5d5c5a585653504d4945413c37322c262019130b0400000000000000000000000000000000000000000000000000000000000000081119222a31383f454a4f5356595b5d5f5f5f5f5f5e5c5a57534f4b453f39322b231a12090000000000000000000000000000000000000013202c3946535f6c79869398989898989898989aa1aaaca094877a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616d7779797979797979797064574b3e3125180b00000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000040f1a25303a45505b66707b86919ca6aca2978c82776c62574c42372d22170d020000000000000007121d28323b42484b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4a453e362c22170c0100000000000000000000000000000000000000000000000000000000000000000000000002080d12171c2024272a2d30323435373838393939393837363533312f2d2a26231f1b16110c060100000000000000000000000000000000000007121d2730383f444646464646464646464645413b332a21160c02000000000000000000000000000005101a242e363d434646464646464646464645423d362d23190e03000000131f2c3946525f6b76797979797979797972665a4d4034271a0e01000b1825313e4b5764707979797979797979776d6154483b2e21150800000000000000000006121e2a36414d58636f7a85909ba6b0a89d93897f756c645b534c46403b3733312f2e2d2c2d2e2f3134383c42484f565e677079838d97a1acada2978d82766b6054493d32261a0e0300000013202c3946535f6c798693a0aca89b8e8174685b4e4135281b0f020000000d1a2733404d5a6673808d9aa6b2a5988b7e7165584b3e3225180c0013202c3946525f6c7986929faca89b8e8174685b4e4135281b0f0200000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000070e141a20262b3035393d4144474a4c4e5051525253525251504e4c494743403c38332f29241e19120c0500000000000000000000000000000000000000000000000000000000000000000000030a11171d23282d32373b3e4245484a4c4e4f5151525253525251504f4d4c494744413d3935302b26211b150e08010000000000000000000000000000000000000000000000000000000000000000000710181f272d33393e43474a4d4f515253535352514f4d4a47433f3a342e2720191108000000000000000000000000000000000000000013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a094877a6d6053473a2d20140700000000000000040708080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808060200000000000000000000000000000713202c3845515c666c6c6c6c6c6c6c6c6c685e53483c2f23160a00000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000b16212b36414c57616c77828d98a2ada59b90857b70655b50463b30261b100600000000000000000c18242f3a444d5458585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585650483e34291d1105000000000000000000000000000000000000000000000000000000000000000000000000000002070b1014171b1e21232527292a2b2c2c2c2c2c2c2b2a28272523201d1a17130f0a05000000000000000000000000000000000000000000010b151e272e3337393939393939393939393835302921180f050000000000000000000000000000000009121c242c3236393939393939393939393936322b241b110700000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6960564a3e3225190c00000a16232f3c48535e686c6c6c6c6c6c6c6c6c665c5145382c201307000000000000000000020d1925303c47525e69747e89949ea8afa59b91887e756d655e57514c4743403d3c3a3a393a3b3c3e4144484d535960687079828b959fa9afa59b91867b70655a4f43382c2115090000000013202c3946535f6c798693a0aca89b8f8275685c4f4236291c0f030000000e1b2734414d5a6774818d9aa7b1a4978b7e7164574b3e3125180b00121f2c3845525f6b7885929faba89b8f8275685b4f4235291c0f0200000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a00000000000000000000000000000000000000000000000000000000000003090f141a1f24292d3135383b3e4042434445464646454443413f3d3a3734302c27231e19130d070100000000000000000000000000000000000000000000000000000000000000000000000000060c12171d22262a2e3236393b3e40414344454546464645454442413f3d3a3734312d2924201b15100a03000000000000000000000000000000000000000000000000000000000000000000000000060e151c22282d32373a3e40424445464646454443413e3b37332e29231c160e0700000000000000000000000000000000000000000013202c3946535f6c7986939393939393939393939393939393877a6d6053473a2d2014070000000000060c101315151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151514120f0a0400000000000000000000000004101c28343f4a545b5f5f5f5f5f5f5f5f5f5c564d42372b1f130700000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130601010107121d27323d48535d68737e89949ea9a99e94897e74695e54493e34291f1409000000000000000000101c2834404b565f6465656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565625a50453a2e211509000000000000000000000000000000000000000000000000000000000000000000000000000000000004070b0e111417191b1c1d1e1f1f201f1f1f1e1d1c1a181614110e0a0703000000000000000000000000000000000000000000000000030c151c23282b2c2c2c2c2c2c2c2c2c2c2c29241f170f060000000000000000000000000000000000000a121a21262a2c2c2c2c2c2c2c2c2c2c2c2a26201a120900000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5d574e44392d221609000007131f2b37424d565c5f5f5f5f5f5f5f5f5f5b544a3f34281c10040000000000000000000008141f2a36414c57626d77828c96a0aaada39a91887f777069625c57534f4c4a484746464647494a4d5054595e646b727a828b949da7b0a79d93897f74695f54493d32271b10040000000013202c3946535f6c798693a0aca99c9083766a5d5043372a1e11040000000f1b2835424e5b6874818e9ba7b0a3978a7d7064574a3e3124170b00121e2b3845515e6b7784919eaaa99c8f8276695c4f4336291d100300000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170a000000000000000000000000000000000000000000000000000000000000000003090e14181d2125282c2e3133353738393939393837363533302e2b2724201c17120d08020000000000000000000000000000000000000000000000000000000000000000000000000000000001060c11161a1e2226292c2f31333536373839393939393837363432302e2b2825211d19140f0a04000000000000000000000000000000000000000000000000000000000000000000000000000000030a11171d22262a2e313436373839393939383634322f2b27221d18110b040000000000000000000000000000000000000000000013202c3946535f6c7986868686868686868686868686868686867a6d6053473a2d201407000000020a11181c20212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211f1b150f070000000000000000000000000c18232e38424a4f525353535353535353504b443b30261a0f0300000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130e0e0e0e0e19232e39444f59646f7a858f9aa5ada2978d82776d62574d42382d22180d02000000000000000000121f2b3844515d6870727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272726c62564a3d3124180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205080a0c0e0f111212131313131211100f0d0c0a07040100000000000000000000000000000000000000000000000000000000030a11171b1e202020202020202020201f1d19130d0600000000000000000000000000000000000000000810161a1e1f2020202020202020201f1d1a150f080000000000000a16212c3740484f525353535353535353514c453c32281d11050000030f1a26303b444b505353535353535353524f4a42382e23180c0000000000000000000000030e1925303b46515b66707a858e98a2abaca39a9189817a746d68635f5c595755545353535455575a5d60656a6f767d848c949da6afa89f958b82776d62584d42372c21160a000000000013202c3946535f6c798693a0acaa9e9184786b5e5245382c1f1306000003101d2936434f5c6975828f9ca8afa296897c6f6356493d3023160a00111e2a3744515d6a7784909daaaa9d9084776a5d5144372a1e110400000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3024170b0b0a070300000000000000000000000000000000000000000000000000000000000003080c1115191c1f222527282a2b2c2c2c2c2c2b2a282624211e1b1814100b0601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0e12161a1d2022242628292b2b2c2c2c2c2c2b2a29282624211f1c1815110d080300000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c11161a1e222527292b2c2c2c2c2c2b2a2825221f1b17120c06000000000000000000000000000000000000000000000000131f2c3946525f6b767979797979797979797979797979797979776c6053463a2d2014070000020b141c23282c2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2b2620191108000000000000000000000006111c262f383f4346464646464646464644403a32291f14090000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201a1a1a1a1a1a1f2a35404b55606b76818b96a1aca69b90867b70665b50463b30261b10060000000000000000000013202c3946535f6c797e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7265584b3f3225180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f121313131313131313131312100d080200000000000000000000000000000000000000000000040a0e111313131313131313131313110e09040000000000000005101a252e373e4346464646464646464645413b332a21160b0000000009141f29323a4044464646464646464646433f382f261c110600000000000000000000000008131e29343f4a545e69737c869099a1aaaca39b938c857f79746f6b6865636260605f6061626466696c71757b81878e969ea6afa79f968d837970655b51463b31261b1004000000000013202c3946535f6c798693a0acac9f9386796d6054473b2e221509000005121f2b3844515e6a7784909daaaea194887b6e6255483c2f22150900101d2936434f5c6976828f9ca8ab9e9185786b5e5245382c1f120600000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d302418181817140f0a030000000000000000000000000000000000000000000000000000000000000005090c101316181a1c1d1e1f1f201f1f1e1d1b191715120f0b0804000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060a0d101316181a1b1d1e1f1f1f201f1f1e1e1c1b191715120f0c0905010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0e1215181b1c1e1f2020201f1e1d1b1916130f0b060100000000000000000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b655b4f44372b1f120500000a141d262e34383b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a37322b231a100600000000000000000000000a141d262d333739393939393939393938342f2820170d020000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2727272727272727313c47515c67727d87929da8a99f94897e74695f54493f34291f140a000000000000000000000013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c7e7265584c3f3225190c0000000000000004070808080808080808080808080808080808080808080808080808070604030100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131c252c32373939393939393939393835302921180f0400000000020d1720282f343839393939393939393937332d261d140a00000000000000000000000000020d18232d38424d57616a747d878f98a0a8ada59e97908a85807b787472706e6d6d6c6d6d6f707275797d81868c9299a0a8ada69e958d847a71675e54493f352a1f140900000000000013202c3946535f6c798693a0acaea195887b6f63564a3d3125180c00000814212d3a46535f6c7985929fabaca09386796d6054473a2e211408000f1c2835424e5b6874818e9aa7ac9f9286796c6053463a2d20140700000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d302525252523201b150e050000000000000000000000000000000000000000000000000000000000000000000306090b0d0f1112121313131211100f0d0b0806030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010407090b0d0f10111213131313121211100e0d0b08060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000206090c0e1011121313131212100e0c0a0603000000000000000000000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a53493e33271b0f030006111c262f383f4548484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484847433d352c22170c0100000000000000000000020b141c22272b2c2c2c2c2c2c2c2c2c2b28231d160e05000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f53463934343434343434343438424d58636e78838e99a4ada2988d82786d62584d42382d22180d02000000000000000000000013202c3946535f6c7986939290909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090968c7e7265584c3f3225190c0000000000060c101315151515151515151515151515151515151515151515151515141412110f0d0b090603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406080a0c0e0f101111121212121111100f0e0c0a08060401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c29241f170f06000000000000050e161d23282b2c2c2c2c2c2c2c2c2c2b27221c140b02000000000000000000000000000006111c26303b454f58626b747d868e969ea5aca8a29b96908c8884817e7c7b7a7979797a7b7d7f8285898d92979da4aba9a39b948c837a72685f564c42382d23180e0300000000000013202c3946535f6c798693a0acb0a4978b7e7265594d4134281c1106050b1724303c4955626e7b8794a0adaa9e9184786b5f5245392c1f1306000e1a2734404d5a6673808c99a6ada194877b6e6155483b2f22160900000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3d3232323231302c261f170e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16212c3740484f525353535353535353535353535353535353524f4941372d22160b00000b17222d38424a51545555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555534e473e34291d12060000000000000000000000020a11171b1e2020202020202020201f1c18120c0400000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346414141414141414141414149545f6a74808a95a0aba69b91867b71665b51463b31261b110600000000000000000000000013202c3946535f6c7986938983838383838383838383838383838383838383838383838383838383838383838383838383838383838383838384908c7e7265584c3f3225190c000000020a11181c202122222222222222222222222222222222222222222222222221201f1e1c1a1815120f0b070300000000000000000000000000000000000000000000000000000000000000000000000000000000000003060a0d10131517191a1c1d1d1e1e1e1e1e1e1d1d1c1a19171513100d0a060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010910161a1e1f20202020202020201f1d19130d060000000000000000040c12181c1f2020202020202020201e1b17110a02000000000000000000000000000000000a141f29333d465059626b747c848c939aa1a7aca7a19c9894908d8b89888786868687888a8c8e9195999ea3a9aaa59e98918a827a716960574d443a30261b11070000000000000013202c3946535f6c798693a0acb3a69a8e8175695d5145392d22171312131c2834404c5865717d8a96a3afa89b8f8276695d5043372a1e1104000c1925323f4b5865717e8b97a4afa296897c7063564a3d3124170b00000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574a3e3e3e3e3e3e3c37312921170d0200000000000002070b0e101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100e0b07020000000000000000000000040708090909090909090908070501000000000000000000000000030608090909090909090909080502000000000000000000000000030608090909090909090909080603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101a252e373e4346464646464646464646464646464646464646433e372f251b100500000f1b27333f4a545c6161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161615f5950453a2e22160a00000000000000000000000000060b0f1213131313131313131312100c07010000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f534d4d4d4d4d4d4d4d4d4d4d4d505b66707b86919ca7aa9f948a7f746a5f544a3f342a1f140a0000000000000000000000000013202c3946535f6c798693887b767676767676767676767676767676767676767676767676767676767676767676767676767676767676767683908c7e7265584c3f3225190c0000020b141c23282c2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2c2a292724221f1b18140f0b060100000000000000000000000000000000000000000000000000000000000000000000000001060a0f13161a1c1f2124252728292a2b2b2b2b2b2b2a2928272524211f1c1916130f0a0601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0e1113131313131313131312100d08020000000000000000000001070c1012131313131313131313120f0b06000000000000000000000000000000000000030d17212b343e475059626a727a82898f969ba1a6aaa8a4a09d9a98969493939393949596989b9ea1a5a9a9a49f99938d867f7870685f574e453b32281e140a000000000000000013202c3946535f6c798693a0acb6aa9d9185796d61554a3e342922201f1f232d3844505c6874818d99a6b2a5998c8073675a4e4135281c0f02000b1724303d4a5663707c8995a2afa4978b7e7265584c3f33261a0d01000000000000000000000000000013202c3946535f6c798693a0aca4978a7d7063574b4b4b4b4b4b4b48433b33291e13080000000000060d13171b1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1b17130d060000000000000000070c11141515151515151515151514110d08010000000000000000050b0f131515151515151515151514120e09030000000000000000040a0f121515151515151515151515130f0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131c252c32373939393939393939393939393939393939393937332d251d1309000000121e2b37434f5b666d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6b61564b3e3226190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1004000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5a5a5a5a5a5a5a5a5a5a5a5a5a5a626c77828d98a2ada2988d83786d62584d43382d23180f070000000000000000000000000013202c3946535f6c798693887b6f6969696969696969696969696969696969696969696969696969696969696969696969696969696969697683908c7e7265584c3f3225190c00000a141d262e34383b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a3a39373533312e2b2724201b17120c0701000000000000000000000000000000000000000000000000000000000000000002070d12161b1f2226292c2e3032343536373738383838383736353432302e2c2926221f1b16120d0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f19222c353e475058606870777e848a90959a9ea2a6a9a9a6a4a2a1a0a0a0a0a0a1a3a5a7aaa8a4a19d98938e88827b746d665e564d453c332920160c02000000000000000013202c3946535f6c798693a0acb9ada195897d72665b50453b332f2c2c2c2e353f4955606c7884909da9aea296897d7064584b3f3226190d00000915222f3b4854616e7a8793a0aca69a8d8174675b4e4235291c1003000000000000000000000000000013202c3946535f6c798693a0aca4978a7d70635858585858585857544d453b3025190d010000000810181e23272929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292927231e1810080000000000020b12181d2022222222222222222222211d19130c040000000000000810161b1f21222222222222222222211e1a140d06000000000000070e151a1f21222222222222222222211f1b160f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a27211b130b0100000013202c3946525f6c777b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b73675a4d4134271a0e00000000000000030507080909090909080706040100000000000000000000000000000000000000000000000000000000000000000000000005101a25303c4955626f7c8996a2afa99c908376695c4f43362b20150b000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c67676767676767676767676767676768737e89949ea9a69c91867b71665c51463c362f282119110900000000000000000000000013202c3946535f6c798693887b6f625c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c697683908c7e7265584c3f3225190c0006111c262f383f45484848484848484848484848484848484848484848484848484746454442403d3a3734302c27221d18120c06000000000000000000000000000000000000000000000000000000000000070d13181d22272b2f3235383b3d3f40424344444445454544444342403f3d3b3835322f2b27221d18130d0600000000000000000000000000000000000000040708080808080808080808070400000000000000000000000000000000000000000000000000000407080808080808080808080704000000000000000000000000000000000000000000000000000000000000000000000007101a232c353e464e565e656c73797f84898e9296999c9fa1a3a4a5a6a6a6a6a6a5a4a2a09e9b9895918c87827d77706a635b544c443b332a20170e0400000000000000000013202c3946535f6c798693a0acb8b1a69a8e83776c61574d453f3b3938393b3f47505b66717d8995a1adaa9e92867a6d6155483c3023170a00000713202d3946525f6b7884919daaa89c8f83766a5d5144382b1f1206000000000000000000000000000013202c3946535f6c798693a0aca4978a7d706565656565656565645f574c4135291d1104000007111a22292f3336363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636332f29221a1107000000020c141c23292d2f2f2f2f2f2f2f2f2f2f2d2a241e160d040000000009121a21272c2e2f2f2f2f2f2f2f2f2f2e2a251f180f060000000007101920262b2e2f2f2f2f2f2f2f2f2f2e2b27211a1108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010910161a1e1f2020202020202020202020202020202020201e1b161009010000000013202c3946535f6c79868888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888174675a4d4134271a0e0000000000050b0f1214151516161615151412100e0b08040000000000000000000000000000000000000000000000000000000000000000010c17212c37414c56626f7c8996a2afa99c908376695c51473c32271c12070000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca093867974747474747474747474747474747474747a85909aa5aa9f948a7f746a5f57524d47413a332b231b1209000000000000000000000013202c3946535f6c798693887b6f62554f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f5c697683908c7e7265584c3f3225190c000b17222d38424a5154555555555555555555555555555555555555555555555555545352504e4c4a4743403c38332e29231d17110a030000000000000000000000000000000000000000000000000000040b12181e24292e33373b3e424547494b4d4e4f50515151515151504f4e4d4b494745423e3b37332e29241e18110b04000000000000000000000000000000060c10131515151515151515151513100c0600000000000000000000000000000000000000000000060c10131515151515151515151513100c070000000000000000000000000000000000000000000000000000000000000000000008111a232c343c444c535b61686e73797d82868a8d909294969798999a9a9a9998979694918f8c8885817c77716b655f58514a423a322921180e050000000000000000000013202c3946535f6c798693a0acafa69f9d94897e73695f57504b47464545474b5159626d77838e99a5b1a69a8e82766a5d5145392c201407000005111e2a3743505c6975828e9ba7ab9e9285796c6053473a2e221509000000000000000000000000000013202c3946535f6c798693a0aca4978a7d71717171717171717170695e5245392c20130700030e19232c343b4042434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434342403b342c23190e0300000a141e262e34393b3c3c3c3c3c3c3c3c3b39352f281f160c01000007111b242c33383b3c3c3c3c3c3c3c3c3c3a36312921180e030000050f19222a31373a3c3c3c3c3c3c3c3c3c3b37322b231a100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0e1113131313131313131313131313131313131313110f0a0500000000000013202c3946535f6c798693959595959595959595959595959595959595959595959595959595959595959595959595959595959595958e8174675a4d4134271a0e000000010910161b1f2022222222222221201f1d1a1714100b0600000000000000000000000000000000000000000000000000000000000008131e28333e48535e68737d8996a2afa99c9083786e63594e43392e23190e0300000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386818181818181818181818181818181818181818c96a1aca4988d83786f6b67635e58524c453d352d241b12090000000000000000000013202c3946535f6c798693887b6f6255484343434343434343434343434343434343434343434343434343434343434343434343434f5c697683908c7e7265584c3f3225190c000f1b27333f4a545c6161616161616161616161616161616161616161616161616161605f5d5b595653504c48443f3a342f28221c150d06000000000000000000000000000000000000000000000000070e151c23292f353a3f43474b4e515456585a5b5c5d5e5e5e5e5e5e5d5c5b5a585654514e4b47433f3a352f29231c150e06000000000000000000000000020a11181c2021222222222222222221201c18110a02000000000000000000000000000000000000020a11181c2021222222222222222221201c18120a0200000000000000000000000000000000000000000000000000000000000000000008111a222b333a424950565c62686d72767a7d81838688898b8c8c8d8d8d8c8c8a89878582807c7874706b66605a544d473f38302820170f06000000000000000000000013202c3946535f6c798693a0aca89d94909490857b7169615b575452525254575c636b747e89949faaaca195897d72665a4d4135291d10040000020f1b2834414d5a66737f8c98a4ada194887b6f63564a3e3125190c000000000000000000000000000013202c3946535f6c798693a0aca4978a7e7e7e7e7e7e7e7e7e7e7a6d6154473a2e211407000914202a353e464c4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4c463e352a2014090006111c26303840454848484848484848484846413a31281e130800020d18232d363e444748484848484848484846423b332a20150a00000b16212b343c434748484848484848484847433d352c22180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a29a8e8174675a4d4134271a0e0000010b131b22272b2d2e2f2f2f2f2f2e2d2b292724201c17110b05000000000000000000000000000000000000000000000000000000050f1a252f3a454f5a646f7a858f9aa5b1aca0958a80756a60554a40352a20150a00000000000000000000000000000000000000000013202c3946535f6c798693a0acafa3978f8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e939da8b0a3968a817e7b78736f69635d564f473f372e241b120800000000000000000013202c3946535f6c798693887b6f6255483c36363636363636363636363636363636363636363636363636363636363636363636434f5c697683908c7e7265584c3f3225190c00121e2b37434f5b666d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d6d6b6a6865635f5c58544f4a45403a342d261f1810080000000000000000000000000000000000000000000009111920272e353b40464b4f53575a5d6062646668696a6a6b6b6b6b6a6a6968666563605d5a57534f4a45403a342e272018100800000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2c28231c140b0200000000000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2c28231c140c02000000000000000000000000000000000000000000000000000000000000000000081019212830373e454b51575c61666a6e717477797b7d7e7f80808180807e7d7c7a787673706c68645f5a554f49433c352e261e160e0500000000000000000000000013202c3946535f6c798693a0aca5988c848b968d847b736c6763615f5f5f6063676d757d87909ba5b0a69b9084796d6155493d3125190d010000000c1925323e4a5763707c8995a1aea4978b7e7266594d4135281c10040000000000000000000000000013202c3946535f6c798693a0aca59a8f8b8b8b8b8b8b8b8b8b877a6d6154473a2e211407000d1925313c4650575c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5750463c3125190d000b17222d38424a5155555555555555555555524c433a2f24190d0107131f2a353f484f54555555555555555555534d453c31261b0f0305111c28333d464e53555555555555555555544f473e34291e120600000000000000000000000000000000000000000000000000000000000000010305060708080808070604020000000000000000000000000000000102030303020100000000000000000000000000000013202c3946535f6c798693a0acaeaea9a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59a8e8174675a4d4134271a0e000009131d252d33373a3b3c3c3c3c3c3b3a383633302c27221d160f0800000000000000000000000000000000000000000000000000010c16212c36414c56616b76818c96a1acb6b1a69c91877c71675c51473c31271c1107000000000000000000000000000000000000000013202c3946535f6c798693a0acb4a9a19b9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9ea5afb2a69b918e8b8884807a756f686159514940372d231a0f05000000000000000013202c3946535f6c798693887b6f6255483c2f292929292929292929292929292929292929292929292929292929292929292936434f5c697683908c7e7265584c3f3225190c0013202c3946525f6c777b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a79787674726f6c6864605b56514b453f38312a221a120a020000000000000000000000000000000000000009121a232a323940464c51565b5f63676a6d6f717374757677777878777777767473716f6d6a67635f5b56514c463f39312a221a12090000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b3b38342e261d140a000000000000000000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b3b39342e261e140a00000000000000000000000000000000000000000000000000000000000000000000070f171e25303a444c535656565a5e6165686a6c6e707172737373737372716f6e6c696763605c58534e49443e38312a231c140c040000000000000000000000000013202c3946535f6c798693a0aca5988c7e8590968d857d78736f6d6c6b6b6d6f73787f878f98a2acaa9f958a7e73685c5045392d211509000000000a16222f3b4754606d7985929eaaa79a8e8275695d5144382c2014070000000000000000000000000013202c3946535f6c798693a0acaba19a989898989898989894877a6d6154473a2e21140700111d2936424d58626869696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696862584d4236291d11000f1b27333f4a545c616262626262626262625d564c41352a1d11050b17242f3b46515a606262626262626262625e574e43382c2014070915212d39444f585f626262626262626262605950463a2f23170a0000000000000000000000000000000000000000000000000000000003070a0d0f111314151515141412110f0c090602000000000000000206090c0d0f0f0f0f0f0e0d0b0906030000000000000000000013202c3946535f6c798693a0acb3a89f99989898989898989898989898989898989898989898989898989898989898989898989898988e8174675a4d4134271a0e0005101b252f373e444648484949494848464542403c38332e28211a120900000000000000000000000000000000000000000000000008131d28333d48535d68737d88939da8aeababaea3988e83786e63584e43382e23180e030000000000000000000000000000000000000013202c3946535f6c798693a0acb9b2aca8a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a9a9aaabaca39d9a9794908b868079736b635b52493f352c21170d020000000000000013202c3946535f6c798693887b6f6255483c2f221c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c7986888888888888888888888888888888888888888888888887868583817e7b7874706c67625c565049433b342c241c140b02000000000000000000000000000000000009121b242c343c434a51575d62676b6f7376797b7e80818283848485858484838281807e7c7976736f6b67625d57514a433c342c241b12090000000000000006111c262f383f4548484848484848484848453f382f261c1106000000000000000000000000000006111c262f383f454848484848484848484845403830261c11060000000000000000000000000000000000000000000000000000000000000000000005111e2a36414c565e6263636363605a5b5e606263656566666766666564636362605e5954504c48433e38322c261f19110a02000000000000000000000000000013202c3946535f6c798693a0aca6998c7f7f8a94968f89837f7c7a797878797c7f848a9199a1aaaba1988d83786d62574b4034281c11050000000007131f2c3844515d6975828e9aa6aa9e9185796d6054483c3024180c0000000000000000000000000013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a094877a6d6154473a2e21140700121f2c3945525e6a747676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676746a5e5245392c1f1200121e2b3743505b666d6f6f6f6f6f6f6f6f6e685d5246392d2114070e1a2733404c58636c6f6f6f6f6f6f6f6f6e695f54483c2f23160a0b1824313d4a55616a6f6f6f6f6f6f6f6f6f6b62574b3f3326190d0000000000000000000000000000000000000000000000000000050a0f1316191c1e202121222221201f1d1b1916120e0a0500000003090e1215181a1b1c1c1c1c1b19171513100c06000000000000000013202c3946535f6c798693a0acaea2968d8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8174675a4d4134271a0e000a16212d3741494f535455555555555453514f4c48443f39332c241b120900000000000000000000000000000000000000000000040f1a242f3a444f5a646f79848f9aa4aaa29e9fa4aa9f958a80756a5f554a3f352a1f150a0000000000000000000000000000000000000013202c3946535f6c798693a0acb5aba29d9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9d9d9fa0a3a6a7a4a09c97918b847d756d645b51473d33291e13080000000000000013202c3946535f6c798693887b6f6255483c2f2215101010101010101010101010101010101010101010101010101010101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c79869395959595959595959595959595959595959595959594949391908d8b8884817c78736d68615b544d463e362e261d140b0200000000000000000000000000000008121b242d363e464e555c62686e73777b808386888a8c8e8f90919192929191908f8e8c8a888683807b77736e68625c554e463e362d241b11080000000000000b17222d38424a5154555555555555555554514a42382d22170b00000000000000000000000000000b17222d38424a5154555555555555555554514a42382d22170b000000000000000000000000000000000000000000000000000000000000000000000714212d3a46525e686f6f6f6f6f6c635751535557585959595b61666a6d6f6f6f6d6a655f5851483f362d27211b150e070000000000000000000000000000000013202c3946535f6c798693a0aca6998c8078828c969a948f8b898785858586888b90959ba3aba9a19990867c71675c51453a2f23170c000000000003101c2835414d5966727e8a96a3ada195897c7064584c4034281c100400000000000000000000000013202c3946535f6c7986939393939393939393939393939393877a6d6154473a2e2114070013202c3946535f6c798383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383796c5f5346392c20130013202c3946525f6c787b7b7b7b7b7b7b7b7a6e6255483b2f2215080f1c2835424f5b68747b7b7b7b7b7b7b7b7b7064574b3e3124180b0c1926333f4c5965727b7b7b7b7b7b7b7b7b73675a4e4134281b0e000000000000000000000000000000000000000000000000040a10161a1f2326292b2c2d2e2e2e2e2d2c2a2825221e1a16110b05080f141a1e2225272829292928272624221f1c17120b0300000000000013202c3946535f6c798693a0acaca093867e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e74675a4d4134271a0e000f1b27333e49535b6061626262626261605e5b5854504a443d362d241b12080000000000000000000000000000000000000000010b16212b36414b56616b76818b96a1aba29891939ba5a69c91867c71665c51463c31261c110700000000000000000000000000000000000013202c3946535f6c798693a0acafa39991909090909090909090909090909090909090909090919294969a9ea2a8a8a39d968f877e766d63594f453a30251a0f0300000000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a1a09f9e9c9a9794918d88847e79736c665f58504840382f261d140a010000000000000000000000000006101a242d374048505860676d74797e83888c8f929597999a9c9d9e9e9e9e9e9e9d9c9b999795928f8c88837e79736d665f5850483f362d231a100500000000000f1b27333f4a545c616161616161616161615c544a3f33271b0f03000000000000000000000000030f1b27333f4a545c616161616161616161615c544a3f33281b0f030000000000000000000000000000000000000000000000000000000000000000000915222f3b4855626e7a7c7c7c7c74675b4e47484a4e545b61666c7176797c7c7b7976716a635a51483e33291e120a03000000000000000000000000000000000013202c3946535f6c798693a0aca69a8d80737a848d969e9b9895939292929395989ba0a6aba59f978f877d746a5f554a3f34291e12070000000000000c1925313d4a56626e7a86929eaaa5998d8174685c5044382c20150900000000000000000000000013202c3946535f6c7986868686868686868686868686868686867a6d6154473a2e2114070013202c3946535f6c798690909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090909086796c5f5346392c20130013202c3946535f6c7986888888888888887b6f6255483c2f2215090f1c2835424f5b687582888888888888887e7164574b3e3124180b0d192633404c59667380888888888888888174675b4e4134281b0e0000000000000000000000000000000000000000000000080f151c21262b2f323537393a3b3b3b3b3a383734312e2a26211c1610131a20252a2e313335363636353432312e2c28231c150c03000000000013202c3946535f6c798693a0acaca093867971717171717171717171717171717171717171717171717171717171717171717171717171716d63584c3f33261a0d00111e2a37434f5a656c6e6f6f6f6f6f6e6c6a6864605b564f483f372d241a0f040000000000000000000000000000000000000008121d28323d48525d68727d88929da8a69b908689949ea9a3988d83786d63584d43382d23180e03000000000000000000000000000000000013202c3946535f6c798693a0acaca093878383838383838383838383838383838383838383838485878a8d92979ca3aaa8a19991887f756b61574c41362b20140900000000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaeaea8a4a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a4a5a7a9a9a6a4a09d99948f8a847e777169625a524a41382f261c1309000000000000000000000000030e18222c363f49525a626a71787f858a8f94989b9ea1a4a5a7a7a6a5a4a4a4a4a5a5a6a7a6a4a19e9b98948f8a857e78716a625a51483f352c22170d0200000000121e2b37434f5b666d6e6e6e6e6e6e6e6e6d665b4f43372b1e120500000000000000000000000005121e2b37434f5b666d6e6e6e6e6e6e6e6e6d665b5044372b1f12050000000000000000000000000000000000000000000000000000000000000000000815222e3b4854616e7a87898983766a5e52494d53595f666c72787d828688898886827c756c635a4f453a2f23180d01000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173727b848c93999ea2a09f9e9f9fa1a4a8a6a39f9a948d867d756b62584e43392e23180c010000000000000915212d3a46525e6a76828e9aa6a99d9185786c6155493d3125190e020000000000000000000000131f2c3946525f6b767979797979797979797979797979797979776c6053473a2d2114070013202c3946535f6c7986939c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9386796c5f5346392c20130013202c3946535f6c7986939595959595887b6f6255483c2f2215090f1c2835424f5b6875828f95959595958b7e7164574b3e3124180b0d192633404c596673808c95959595958e8174675b4e4134281b0e000000000000000000000000000000000000000000020a121920272d32373b3f4244464748484847464543413e3a36322d28221b1d252b31363a3e404242424242413f3d3b38342e271e150b010000000013202c3946535f6c798693a0acaca09386796c65656565656565656565656565656565656565656565656565656565656565656565656565625b52473b2f23170b0013202c3946525f6b777b7b7c7c7c7b7a797774716c67615951493f362b21160b000000000000000000000000000000000000040f19242f39444f59646f79848f99a4aa9f948a7e828d98a2aa9f948a7f746a5f544a3f352a1f150a000000000000000000000000000000000013202c3946535f6c798693a0acaca0938679767676767676767676767676767676767676767677797b7e81868b9198a0a8aba39a91877d73685e53483c31261a0e03000000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acb2a79d9796969696969696969696969696969697989a9c9fa2a6aaa9a5a09b958f89827b746c645c534a41382e251b110700000000000000000000000a151f2a343e48515b646c747c838a90969ba0a4a8a8a5a19f9d9b99989898979898999a9b9da0a3a6a8a4a09b96908a837c746c635a51473e33291e14090000000013202c3946525f6c777b7b7b7b7b7b7b7b776c5f5246392c2013060000000000000000000000000613202c3946525f6c777b7b7b7b7b7b7b7b786c5f5346392d2013060000000000000000000000000000000000000000000000000000000000000000000714202d3a46535f6c79859293867a6e635956595e646b71777d83898e92959695928d877e756c61564b4035291d1206000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d817369727a81888e9396999c9d9e9e9e9d9c9a97938e89827b746b625950463c32271c11060000000000000005111d2936424e5a66727d8995a1ada195897d7165594d42362a1f13070000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b655b5044382b1f12060013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09386796c5f5346392c20130013202c3946535f6c798693a0a2a2a295887b6f6255483c2f2215090f1c2835424f5b6875828f9ca2a2a2988b7e7164574b3e3124180b0d192633404c596673808c99a2a2a29b8e8174675b4e4134281b0e0000000000000000000000000000000000000000020b141c242b32383e43474b4e505254545555545352504d4a47423e39332d26272f363c42464a4d4e4f4f4f4e4d4c4a47443f3930271d12070000000013202c3946535f6c798693a0acaca09386796c5f58585858585858585858585858585858585858585858585858585858585858585858585856514940352a1f13070013202c3946535f6c79868889898988878684817d78726b635b51483d32271c110500000000000000000000000000000000000b16202b36404b56606b75808b96a0aba3988d83787b86919ba6a69b91867b71665b51463b31261c11060000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c696969696969696969696969696969696969696a6c6e71757a80878e969fa8aca3998f857a6f64594e42372b1f1307000000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acada1958c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8c8d909296999ea2a8aca6a19a948d867e766e655c534a40372d23190f0400000000000000000006111c26313c46505a636d757e868e959ba1a7aba6a19c989592908e8d8c8b8b8a8b8b8c8d8f9193969a9ea2a8a7a19b958d867e756c63594f453b30251a0f0400000013202c3946535f6c798688888888888886796c5f5346392c2013060000000000000000000000000613202c3946535f6c798688888888888886796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000005121f2b3844515d6a778390978b80746b6563656a70767c82898f949a9ea2a3a29e9890877d73685c51463a2e22160a000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d817367686f767d82878a8d8f90919292918f8d8a87837d777169625950473e342a20150b0000000000000000010d1925313d4955616d7985919ca8a5998d82766a5e52473b3024180d02000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5b53493f33281c0f030013202c3946535f6c798693939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939386796c5f5346392c20130013202c3946535f6c798693a0acafa295887b6f6255483c2f2215090f1c2835424f5b6875828f9ca8afa4988b7e7164574b3e3124180b0d192633404c596673808c99a6afa89b8e8174675b4e4134281b0e00000000000000000000000000000000000000010b141d262e363d43494f53575a5d5f6061616161605e5c5a56534e4a443e3831313941484e5256595b5c5c5c5b5a585654504a42392f24180d0100000013202c3946535f6c798693a0acaca09386796c5f534b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4a463f372e24190e020013202c3946535f6c798693969696959492908d89847d756d63594f44382d22160a0000000000000000000000000000000007121d27323d47525d67727d87929da7a79c91877c71747f8a959faaa2988d83786d62584d43382d23180d0300000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5d5e5f6265696f757c848d96a0aaaba1978c81756a5f53473b2f24170b000000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca093867d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7e7f818386898d92979ca2a8aca59f97908880776e655c52493f352b20160b0100000000000000000b17222d38434d58626c757f8890989fa6ada6a09a95908c89868482807f7e7e7d7e7e7f818284878a8e92979ca3a9a69f9890877e756b61574c42372c20150900000013202c3946535f6c798693959595959386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693959595959386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000003101c2936424f5b6874818d9991867d75716f71757b81878d949aa0a5a2a0a0a1a4a2998f84796e62564a3e32261a0e020000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675e656b71767a7e8182848585858483817e7b77726c665f5850473e352c22180e040000000000000000000915212d3945515c6874808b97a3aa9e92867b6f63584c41352a1e1308000000000000000000000a16212c3740484f525353535353535353535353535353535353524f4941372d22170b000013202c3946535f6c798686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686796c5f5346392c20130013202c3946535f6c798693a0acafa295887b6f6255483c2f2215090f1c2835424f5b6875828f9ca8b1a4988b7e7164574b3e3124180b0d192633404c596673808c99a6b3a89b8e8174675b4e4134281b0e0000000000000000000000000000000000000009131d262f3840474e555a5f63676a6c6d6e6e6e6d6d6b6966635f5a554f49423b3a434b53595e63666869696968676563605c544b4035291d110500000013202c3946535f6c798693a0acaca09386796c5f53463e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3d3a342d251c1207000013202c3946535f6c7986919190909193969a99948f877f756b60554a3e32261a0e020000000000000000000000000000040e19242e39444e59646e79848e99a4aba0958a80756a6d78838e99a3a99f948a7f74695f544a3f342a1f140a00000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f534f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f50515355595e636a727b848e99a3aea89d92877b6f64584c4034281b0f030000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386797070707070707070707070707070717274777a7d81868b91979ea5aca9a29a928981776e645b51473c32281d12070000000000000005111d28333e4a545f6a747e88919aa2aaaba39c958f8984807c79777573727171717171727475787a7d82868b91989fa7aaa29990877d73695e53483d31261a0e03000013202c3946535f6c798693a0a2a2a09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0a2a2a09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000e1a2733404c5865717d8a96988f87817d7c7d81868c92989fa59f9a96939394979ca1968a7e73675b4f42362a1e11050000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a5a60656a6e71747677787878777674726e6b66615b544d463e352c231a10060000000000000000000005111c2834404c57636f7a86929da9a3978b8074685d51463b2f24190e0300000000000000000005101a252e373e4346464646464646464646464646464646464646433e372f261b11060000131f2c3946525f6b767979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979766b5f5246392c1f130013202c3946535f6c798693a0acaca295887b6f6255483c2f2215090f1c2835424f5b6875828f9ca8aca4988b7e7164574b3e3124180b0d192633404c596673808c99a6aca89b8e8174675b4e4134281b0e00000000000000000000000000000000000007111b252f38414a525960666b6f7376787a7b7b7b7a797775726f6b66615b544d45434c555d646a6f72747575757573726f6d665d5145392d20140700000013202c3946535f6c798693a0acaca09386796c5f534639323232323232323232323232323232323232323232323232323232323232323232312e29231b130a00000013202c3946535f6c79868584848485868a8e959d9991877d72665a4e42362a1e110500000000000000000000000000000b15202b35404b55606b75808b95a0aba4998e84796e6367717c87929ca7a69b91867b71665b51463b31261b1106000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346434343434343434343434343434343434446494d52596069727c87929da8afa3988c8074685c5044372b1f12060000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c636363636363636363636363636466686a6d71757a80868c939aa2aaaca49b938980766d63594e44392f24190e030000000000000b16222e3944505b66717b86909aa3acaaa199918a837d7874706d6a68676565646464656667696b6e71757a80868d959ea7aba2998f857a7065594e42372b1f1307000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000b1724303d4955616e7a86929d99928d8a898a8d92979ea4a09a948e898786888b91999b8f83776b5e52463a2d2114080000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4f555a5e626567696a6b6b6b6b696865625e5a555049433b342c231a11080000000000000000000000000c18242f3b47525e6975818c97a3a89c9185796e63574c41352a1f14090000000000000000000009131c252c32373939393939393939393939393939393939393937332d251d140a000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b645a4f43372a1e110013202c3946535f6c798693a0a0a0a095887b6f6255483c2f2215090f1c2835424f5b6875828f9ca0a0a0988b7e7164574b3e3124180b0d192633404c596673808c99a0a0a09b8e8174675b4e4134281b0e0000000000000000000000000000000000030e18232d37414a535c636b71777b80838586888888878684827e7b77726c665f574f4b555e676f757b7e8182828281807e7c786e6155483b2f22150800000013202c3946535f6c798693a0acaca09386796c5f5346392c252525252525252525252525252525252525252525252525252525252525252524221d18110a0100000013202c3946525f6b777978777777787a7d838b949f998e83776b5e5246392d2014070000000000000000000000000007121c27323c47525c67727c87929ca7a89d92877c72675c606a75808b96a0aba2988d82776d62584d42382d22180d020000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f534639363636363636363636363636363637383a3d41474e57606a75818c98a3afa89c9184786c6053473a2e2215090000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f56565656565656565656565758595b5e6165696f747a81889098a0a9ada49b92897e756a60564b40352a1f14090000000000030f1b27333e4a56616c77828d98a2acaba2988f877f78726d6864605e5c5a595857575758595a5c5f6265696f757b838c959ea8aba1978c81766a5f53473b2f23170b000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000814212d3945515d6975818c97a19d99979697999ea3a19b958f88827d7a797b8087909a93877a6e6255493d3024170b0000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d494e5255585b5c5d5e5e5e5e5d5b5956524e4a443e38312a221a11080000000000000000000000000007131f2a36424d59646f7b86929da8a2968b7f74685d52473c31261b1005000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a27221b130b020000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a52483e32261a0e0013202c3946535f6c7986939393939393887b6f6255483c2f2215090f1c2835424f5b6875828f93939393938b7e7164574b3e3124180b0d192633404c596673808c93939393938e8174675b4e4134281b0e000000000000000000000000000000000009141f2a353f49535c656e757c82878c8f91939495949493918e8b87837d7770696159525c67707981878b8e8f8f8f8e8d8b887b6f6255483c2f22150900000013202c3946535f6c798693a0acaca09386796c5f5346392c20181818181818181818181818181818181818181818181818181818181818181715120d070000000000111e2a37434f5a656c6c6b6a6a6a6b6d7278828d999f93877a6e6155483b2f221509000000000000000000000000030e19232e39434e59636e79838e99a3aba1968b81766b605559646e79848f99a4a99f94897e74695f54493f34291f14090000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c292929292929292929292929292a2b2d31363c454e59646f7b87939facada194887b6f63564a3d3124170b0000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f534a4a4a4a4a4a4a4a4a4a4a4b4c4f5155595e636970767e868e97a0a9ada49a91877c72675d52473c31251a0f030000000007131f2b37434f5b67727d89949fa9aea49990867d756d67615c5854514f4d4c4b4b4b4b4b4c4e505255595e636a7179838c96a1aca89e92877b7064584c4033271b0f020013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000005111d2935414d58646f7a858f99a2a6a3a3a3a6a29c96908a837d77716d6d6f757e8893968a7d7165584c3f3326190d0000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d404246494c4e505151515151504e4c4946423e39332d261f1810080000000000000000000000000000020e1925313c47535e6a75808c97a2a79c90857a6e63584d42372c21170c01000000000000000000010910161a1e1f2020202020202020202020202020202020201e1b16100901000000000a16212c3740484f525353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353524f4840372c21160a0013202c3946535f6c7986868686868686867b6f6255483c2f2215090f1c2835424f5b687582868686868686867e7164574b3e3124180b0d192633404c59667380868686868686868174675b4e4134281b0e00000000000000000000000000000000040f1a26313c46515b656e7780878e93989b9ea0a1a2a1a19f9d9b97938e89827b736b6259636e78838b92979a9c9c9c9b9995887b6f6255483c2f22150900000013202c3946535f6c798693a0acaca09386796c5f5346392c20130b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0906010000000000000f1b27333e49535b60605e5d5d5d5f6167717d8a96a296897c6f6356493d3023160a0000000000000000000000000a15202a35404a55606a75808a95a0aaa59a8f84796f64594f525d68727d88939da8a69b90867b70665b50463b30261b100600000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201c1c1c1c1c1c1c1c1c1c1c1c1d1e21252b333d47535f6b7783909ca8b0a4978b7e7265584c3f3326190d0000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f53463d3d3d3d3d3d3d3d3d3d3e404245494d52585e656c747c858e97a1abaca3988e84796e63584d42372b201409000000000b1723303c4854606c77838f9aa5b0a79d92887e746b635c56504b484542413f3e3e3e3e3f40414346494d52585f67707a85909ba6afa3988c8074685c5043372b1e12050013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000010d1925303c47535e69737d8790979c9fa09e9b96918b857e78726c666160636c76818d998d8074675a4e4135281c0f0200000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d40363a3d3f414344454545444342403d3a36322d28221c150e06000000000000000000000000000000000914202b36424d59646f7a85909ba6a1968b8075695e53493e33281e13090000000000000000000000050a0e1113131313131313131313131313131313131313110f0a0500000000000005101a252e373e4346464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646433e372e251a100500131f2c3946525f6b767979797979797979786d6155483b2f2215080f1b2835424e5b67737979797979797979797063574a3e3124170b0c1926333f4c58657179797979797979797972675a4d4134271b0e000000000000000000000000000000000914202b37424d58636d77818991999fa4a8a5a19d9b9a9a9a9b9c9f9f9a948d857d746b626974808a949da3a7a6a09b989795887b6f6255483c2f22150900000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000a16212d3741494f53575a5a5a5a5b5d636f7c8996a2968a7d7063564a3d3023170a000000000000000000000007111c27313c47515c67717c87919ca7a89e93887d73685d52484b56616b76818c97a1aca2978d82776d62574d42372d22170d02000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013101010101010101010101010121519212b36424f5b6774818d9aa6b3a6998d8073675a4d4134271b0e0100000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f534639303030303030303030323336393d41474d535a626a737c858f99a3adaaa0958b8075695e53483c3125190e020000000e1b27333f4c5864707c8894a0abada1968b80766c6259514a443f3b383634333231313132333437393d41474d555e68737e8a96a1ada89c9084786b5f53463a2d2114080013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000000814202b36424c57626b757e868c909293918f8a85807a736d67615b55535a65717d89938f8276695c5043372a1d110400000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d40342d303335363738383838373533312e2a26211c17110a030000000000000000000000000000000000030e1a25313c47525e69747f8a959fa79c91867b70655a4f453a2f251a1006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131c252c32373939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393937322c251c13090000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c665c5145392d2014070d1a26333f4b5761696c6c6c6c6c6c6c6c6c675e53473b2f2216090b1724303d49545f686c6c6c6c6c6c6c6c6c6961564a3e3226190d000000000000000000000000000000010d1925313d48535f6a747f89939ba3aaa7a09a95918e8d8d8d8e9092969a9e978f877d746a6d7985919ca6afa59c958f8c8a8b887b6f6255483c2f22150900000013202c3946535f6c798693a0acaca09386796c5f5346392c20130606060606060606060606060606060606060606060606060606050300000000000000000000000005101b252f37434f59626767676767696d75808b98a195887c6f6256493c3023160900000000000000000000030e18232e38434e58636e78838e98a3aca2978c81766c61564c41444f5a656f7a85909aa5a99e94897e74695e54493e34291f1409000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000305080f1a26333f4c5965727e8b98a5b2a89b8e8275685b4e4235281c0f0200000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c23232323232323242527292d31363b42495058616a737d87919ba6b1a79c91867b7064594d42362a1e1307000000111e2a36434f5c6874818c989d9fa29c9085796e645a50473f39342f2c292726252424242526282a2d31363c434c57626d7985919eaaaca094877b6e6255493c2f23160a0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000030e1a25303b45505a636c747b8084868685827e79746e68625c564f494854616d7986868684776b5e5145382b1f120500000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034272426282a2b2b2b2b2b2a282724211e1a16110b0500000000000000000000000000000000000000000914202b36414c57626d78838e99a3a2978c82766c61564c41372c22180e0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a26211a130a0100000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5b544a4034291d11040a17232f3a454f585e5f5f5f5f5f5f5f5f5f5c554c42372b1f13070814202c38434d565d5f5f5f5f5f5f5f5f5f5d574f44392e22160a00000000000000000000000000000005111d2a36414d5965707b86919ba5ada69d958f8985828180808183868a8e93999990867c72717d8a96a2ada99e938a837f7d7e807b6f6255483c2f22150900000013202c3946535f6c798693a0acaca09386796c5f5346392c2013131313131313131313131313131313131313131313131313131312100c0701000000000000000000000915212e3b4754606b737473737476797f87919c9c9185796d6054473b2e221508000000000000000000000a151f2a353f4a555f6a75808a959faaa59b90857a70655a4f453a3d48535e68737e89949ea9a59b90857b70655b50453b30251b10060000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000b1825313e4b5764717e8b98a4b1a89c8f8275685b4f4235291c0f0200000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c2017171717171717181a1d20252a30373e464f58616b757f8a949faaaea3978c81756a5e52473b2f23170b000000131f2c3945525f6b77848b8e909395978b8074685d52483e352e2823201d1b1918181818181a1b1e21252a313a45515d6975828e9ba7afa3968a7d7064574a3e3124180b0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000000009141f29343e48515a62696f747779797876726e68635d57514a443e45525e6a7679797979766a5e5145382b1f120500000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a1a1b1d1e1e1e1e1e1d1c1a1815120e0a0500000000000000000000000000000000000000000000030e1925303b46515c67717c87919ca69e93887d73685d53483e342a1f150b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000010910161a1e1f20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201f1e1a161009010000000a16212c3740484f52535353535353535352504a42382e23180c0006121e29333d464d51535353535353535353504b433a30251a0e0304101b27313b444c51535353535353535353514d453d33281d11060000000000000000000000000000000915212d3a46525e6a75818d98a2ada89e948b847d787573737375777a7d82888e95988e847a74818d99a6afa3988c827873717173746b6054473b2e21150800000013202c3946535f6c798693a0acaca09386796c5f5346392c202020202020202020202020202020202020202020202020202020201f1c18120b040000000000000000000915222f3c4855626f7b8181818182858a91999d948b8074695d5144382c1f130600000000000000000006111c26313c46515c66717c86919ca6a99f94897e74695e53493e3337414c57626c77828d98a2aca2978c82776c62574c42372d22170d0200000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000001040b1825313e4b5764717e8b98a4b1a89c8f8275685b4f4235291c0f0200000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c20130a0a0a0a0a0a0c0e1114191f252c343d464f59636d78838e99a4b0a99d92867a6f63574b3f34271b0f03000013202c3946525f6c777c7e818486898b877b6f63574c41362c231d1713100e0d0c0b0b0b0c0d0f1115191f2934414d5a6673808c99a6b1a5988b7e7265584c3f3226190c0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000020d17222c363f4850585e64686a6c6c6b6966625d57524c463f3936424e59646b6c6c6c6c6b64594e4236291d100400000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0f101112121211110f0d0b0805020000000000000000000000000000000000000000000000000008131e29343f4a55606a75808a959fa59a8f847a6f655a50463b31271d130a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0e1113131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313110e0a05000000000005101a252e373e4346464646464646464646433f3830261c120700010c17212b343c414546464646464646464644403931281e140900000a152029323a404446464646464646464645413b342b21160c000000000000000000000000000000000c1824313d4956626e7a86929ea9aca1968c8279726c69676667686a6d71767c838a92968c8177838f9ca9ac9f93877b706764656767625a4f43382b1f130600000013202c3946535f6c798693a0acaca09386796c5f5346392c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b28231d160d0400000000000000000814212e3a47535f6b77838d8d8e8f92969a96928b82796e63584c4034281c10040000000000000000030d18232d38434d58636d78838d98a3ada2988d82776d62574c42372c303b45505b66707b86919ba6a99e93897e73695e53493e34291e140900000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130b0b0b0b0b0b0b0b0b0b0c0c0e10141b2733404c5965727e8b98a5b2a89b8e8275685b4f4235281c0f0200000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000104080e141b222b343d47515c66717c88939eaaaea3978b8074685c5044382c1f13070000111e2b37434f5b656d707275777a7c7e81776b5f53473b2f241a110b070401000000000000000205080e1926323f4c5865727e8c98a5b2a6998c807366594c403326190d0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000006101a242d363e464d53585b5e5f5f5f5d5a56514c46413b342e313d48525a5f5f5f5f5f5f5a52483d31261a0e0100000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d010000000000000000000000000000000000000000000000000000000000000000000000000000020d18232e39434e59636e78838d98a2a1968b81766c62574d43392f251c1208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131c252c32373939393939393939393937332d261e140b000000051019222a30353839393939393939393938342f281f160c020000030e1720292f35383939393939393939393835302922190f05000000000000000000000000000000000e1b2734404d5965727e8a97a3aea79b90857a7067615c5a595a5b5e61666b717880889193887d84919eaaa99c9083776b5f57585a5b5750483d32271b0f0300000013202c3946535f6c798693a0acaca09386796c5f534639393939393939393939393939393939393939393939393939393939393938342f281f160c020000000000000006121e2b37434f5b67737e8b979a94908f8d8a86807970675d52473b3024180c0000000000000000000a141f2a343f4a545f6a747f8a949faaa69c91867b71665b50463b302529343e49545f69747f8a959faaa59b90857a70655b50453b30251b1005000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20181818181818181818181818191a1d20252d38434f5b6874818d9aa6b3a69a8d8174675a4e4134271b0e0100000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000002091019222b353f4a55606b76828d99a5b1a89c9084786c6054483c2f23170b00000f1b27333e49535b616366686b6d70727571675b4f42362a1e130800000000000000000306090c1014181e26333f4c5965727e8c98a5b2a6998c807366594c403326190d0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000000008121b242c343b42474c4f51535352504e4a46403b352f29232b3640484e5253535353524e4840362b2015090000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0100000000000000000000000000000000000000000000000000000000000000000000000000000006111c27323d47525c67717b86909aa49d93887e74695f554b41372e241a110700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001030506070808080807060402000000000000000000000000000000010203030302010000000000000000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2b27221c140c02000000000710181f25292c2c2c2c2c2c2c2c2c2c2b28231d160d0400000000050e171e24292b2c2c2c2c2c2c2c2c2c2c29251f1810070000000000000000000000000000000000101d2936424f5b6875818e9aa6afa3978b7f73685e56504d4d4d4f51555a60666e767f88928f8486929faba79a8e8174685b4f4b4e4e4b463f362c21160a0000000013202c3946535f6c798693a0acaca09386796c5f534646464646464646464646464646464646464646464646464646464646464644403931281e140900000000000000020e1a26323e4a56626e7a8692988c8382817e7a756e675e554b40352a1f1308000000000000000006111b26313b46515b66717b86919ba6aa9f958a7f746a5f54493f34291f222d38424d58636d78838e99a3aca1978c82776c61574c42372c22170c020000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c252525252525252525252525252627292c31373f4954606b7784909ca9b1a4988b7e7265594c3f33261a0d0000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000071019232e38434f5a65717d8894a0acaca194887c7064584b3f33261a0e01000b16222d38414a505457595c5e61636668665f564a3f33271a0e020000000104070a0c0f1215181c2024293038424e5b6774808d99a6b2a5998c7f7266594c3f3326190d0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000000000000009121a222a30363b3f424546464544413e3a352f2a241e1a242e363d43454646464645433d362e241a0f040000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000000000000000000000000000b16202b36404b555f6a747e88929ca49a90857b71675d534940362c23180e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003070a0d0f111314151515141412110f0c090602000000000000000206090c0d0f0f0f0f0f0e0d0b09060300000000000000000000000000000000000000000000000000010910161a1e1f2020202020202020201e1b17110a02000000000000060e14191d1f2020202020202020201f1c18120b04000000000000050c13181c1f2020202020202020201f1d19140d06000000000000000000000000000000000000111e2b3744515d6a7783909da9aca093877a6e62574c444140404245494e555c646d76808a948f8f97a2aea6998c807366594d4041413f3b342d241a0f050000000013202c3946535f6c798693a0acaca09386796c5f5353535353535353535353535353535353535353535353535353535353535353504b433a30251a0e03000000000000000a16222e3a46525e6a76828e998d827674726e69645d554c43392f24190e0200000000000000020d18222d38424d58626d78828d98a2ada3998e83786e63584d43382d22181b26313c46515c67717c87929ca7a99e93897e73695e53493e33291e13090000000000000013202c3946535f6c798693a0acaca09386796c5f5346393232323232323232323232323232323436383c4249515b66717c8894a0acada195897c7063574a3e3124180b0000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000007111c27323d4954606c7884909ca8b1a5988c8074675b4f42362a1d11040005111b262f383f44484a4d4f525457595b5a554d44392e22170a0205080b0d101316191c1f2225282c30353b414a545f6a76838f9ca8b1a4978b7e7165584b3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000810181f252b2f3336383939393735322e29241e1913121b242c323639393939393936322c241b1208000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0100000000000000000000000000000000000000000000000000000000000000000000000000000000040f19242e39434d58626c76808a949da1978d83796f655b52483e352a1f1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0f1316191c1e202121222221201f1d1b1916120e0a0500000003090e1215181a1b1c1c1c1c1b19171513100c0600000000000000000000000000000000000000000000000000050a0e1113131313131313131313120f0b0600000000000000000003080d101213131313131313131312100c0701000000000000000001070c101213131313131313131312100d080200000000000000000000000000000000000000121f2c3945525f6b7885929eabaa9e9184786b5f52463a34333436393d434a525b646d78828d989ba0a9b2a6998c7f7265594c3f3435332f2a231b1208000000000013202c3946535f6c798693a0acaca09386796c5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5c554c42372b1f13070000000000000006121e2a36424e5a66727e8a9692867a6e65625e58524b433a31271d1208000000000000000009141f29343f49545f69747f89949fa9a79c92877c71675c51463c31261c11141f2a353f4a55606a75808b96a0aba59a90857a70655a50453a30251a100500000000000013202c3946535f6c798693a0acaca09386796c5f53463e3e3e3e3e3e3e3e3e3e3e3e3e3e3f3f404245484d535b636d77828d99a4b0a99d9185796d6054473b2f2216090000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000b16212c3844505b6774808c98a4b1a89c9083776a5e5245392c20130700000a141d262d34383b3e404345484a4d4f4e4a443b32281d110b0e1114171a1d1f2225282b2e3134383c41464c535c66707b87939fabaea295897c7063564a3d3124170b0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000060d141a1f2327292b2c2c2c2b2825221d18130d0809121a21262a2c2c2c2c2c2c2a26211a120900000000000000000000000000000000000013202c3946535f6c798693a0a0a09a8d8173675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000000000000000000000000000008121d27313c46505a646e78828b959f9f958b81776d645a50463b3024180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a10161a1f2326292b2c2d2e2e2e2e2d2c2a2825221e1a16110b05080f141a1e2225272829292928272624221f1c17120b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facaa9d9083766a5d5044372a2627292d32394049525c66707b86929da9b2b2a6998c7f7265594c3f322826231e18110900000000000013202c3946535f6c798693a0acaca09386796c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c675e53473b2f22160900000000000000010d1925313d4956626d798692938b7f73675b524d47403931281f150b010000000000000006101b26303b46505b66707b86909ba6aba0968b80756b60554a40352a1f150a0e18232e39434e59646e79848f99a4aca1978c81776c61574c41372c21170c01000000000013202c3946535f6c798693a0acaca09386796c5f534b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4c4d4f5154595e656d757f89949faaafa4998d8175695d5144382c1f13070000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000004101c27333f4b5763707c8895a1adac9f93867a6d6154483b2f2216090000020b141c23282c2f313436393b3e4042413e393229201614171a1d202326292c2f3235383a3d4144484c51575e656e77828d98a3afab9f92867a6d6154483b2f2216090013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000002090e13171a1d1f20201f1e1c1916110d07020000080f151a1e1f202020201f1e1a150f080000000000000000000000000000000000000013202c3946535f6c798693939393938d8173675a4d4034271a0d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000b15202a343e48525c667079838d939393938980766c62584c4034281b0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f151c21262b2f323537393a3b3b3b3b3a383734312e2a26211c1610131a20252a2e313335363636353432312e2c28231c150c0300000000000000000004070808080808080808080704010000000000000000000000000000000000000000000000000306080808080808080808080808070400000000000000000000000000000407080808080808080808060300000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaa9d908376695d5043362a1d1a1d21272e37404a545f6a75818c98a3afb2a6998c7f7265594c3f32261a17130d060000000000000013202c3946535f6c798693a0acaca0938679797979797979797979797979797979797979797979797979797979797979797979797063574a3e3124170b00000000000000000915212d3945515d69758186868684786c5f53463c362f271f160d0300000000000000020d17222d37424d57626d77828d97a2ada4998f84796e64594e43392e23190e0307111c27323c47525d68727d88939da8a89e93887e73685e53483e33281e1309000000000013202c3946535f6c798693a0acaca09386796c5f5858585858585858585858585858585858595a5b5e61656a70777f88919ba5b0a99e93887c7065594d4034281c10030000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000b17232f3b4754606c7985929eabaea295897c7063574a3e3124180b000000020a11171c202225272a2c2f31343535322d2720181c2023272a2d303335383b3e4144474a4d5054585d62686f77808a949ea9b2a69a8e83766a5e5245392c2013070013202c3946535f6c798693a0acaca09386796c5f5346392c2013060303030303030303030303030613202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070b0e1012131313110f0d0906010000000000040a0e11131313131313110e0a04000000000000000000000000000000000000000013202c3946535f6c79868686868686868173675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e18222c36404a545e67717a848686868686867e74695c4f4336291d1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a121920272d32373b3f4244464748484847464543413e3a36322d28221b1d252b31363a3e404242424242413f3d3b38342e271e150b01000000000000060c101315151515151515151513110c07010000000000000000000000000000000000000000040a0f1214151515151515151515151513100c0700000000000000000000060c1013151515151515151515130f0b050000000000000000000000000000000000000000000013202c3946535f6c7986929facaa9d9084776a5d5144382b1f1a18161c252e38424d58646f7b87939fabb2a6998c7f7265594c3f3226190c0702000000000000000013202c3946535f6c798693a0acada09489868686868686868686868686868686868686868686868686868686868686868686867e7164574b3e3124180b000000000000000005111d2935414d5965717979797979766b5f5346392d241d150d04000000000000000009141e29343e49545e69747e89949ea9a89d93887d72685d52473d32271c120700000b15202b36404b56616b76818c97a1aca59a8f857a6f655a4f453a2f251a10050000000013202c3946535f6c798693a0acaca09386796c6565656565656565656565656565656565656566686a6d71757b8189919aa3adaba1978d82766b6054483c3024180c000000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000007131f2b3844515d6976838f9ca8b1a4988b7e7265594c3f33261a0d0000000000060c101316181b1d20222527282826221c2125282c303336393c3f4245484a4d505356595c6064696e737a8189929ba5b0aba0958a7e72665a4e4236291d11040013202c3946535f6c798693a0acaca09386796c5f5346392c2013101010101010101010101010101013202c3946535f6c798693a0acada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6b7679797979797979797266594d4033271a0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101a242e38424c555f6872797979797979797974685c4f4336291d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c242b32383e43474b4e505254545555545352504d4a47423e39332d26272f363c42464a4d4e4f4f4f4e4d4c4a47443f3930271d120700000000020a11181c20212222222222222222201d18120b03000000000000000000000000000000000000070f151b1f212222222222222222222221201c18120a02000000000000020a11181c202122222222222222211f1c161009010000000000000000000000000000000000000000121f2c3845525e6b7884919eaaab9e9285796c6053473b312b272423222126313c47535f6b77838f9ca8b2a6998c7f7265594c3f3226190c0000000000000000000013202c3946535f6c798693a0acb0a59b949393939393939393939393939393939393939393939393939393939393939393938b7e7164574b3e3124180b0000000000000000010d1925313d49545f686c6c6c6c6c6b645a4f43372b1e120b03000000000000000005101b25303b45505b65707b85909ba5aca1968c81766b61564b40362b20160b000000040f19242f3a444f5a656f7a85909aa5aca1968c81766c61564c41372c21170c0100000013202c3946535f6c798693a0acaca09386797171717171717171717171717171717171717272737476797d81868c939ba3acaca39990857b70655a4e43372c201408000000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000003101c2835414e5a6774818d99a6b3a69a8d8174675a4e4135281b0f000000000000000407090c0e111316181a1c1b1f24282d3135383c3f4246494c4e5154575a5d606366696c70757a7f858c939ba4adaea49a8f84786d61564a3e32261a0d010013202c3946535f6c798693a0acaca09386796c5f5346392c201c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c202c3946535f6c798693a0acada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002040608090a0b0b0c0c0c0b0b0a0807050301000000000000000000000000000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6960554a3d3125180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121c26303a434d5760686c6c6c6c6c6c6c6c6a62584c4034271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b141d262e363d43494f53575a5d5f6061616161605e5c5a56534e4a443e3831313941484e5256595b5c5c5c5b5a585654504a42392f24180d010000020b141c23282c2e2e2e2e2e2e2e2e2e2d29241d150d030000000000000000000000000000000008111920262b2e2e2e2e2e2e2e2e2e2e2e2e2c28231c140c0200000000020b141c23282c2e2e2e2e2e2e2e2e2e2c27221b130a0000000000000000000000000000000000000000111e2a3744505d6976838f9ca8ada194887c6f63584d433c3633312f2e2e2d2d37424e5b6773808c99a5b2a6998c7f7265594c3f3226190c0000000000000000000013202c3946535f6c798693a0acb7ada5a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0988b7e7164574b3e3124180b0000000000000000000814202c38434d565d5f5f5f5f5f5f5a52493e33271b0f020000000000000000020c17222c37424c57626c77828c97a2aca59a90857a6f655a4f443a2f24190f040000000008121d28333d48535e68737e89949ea9a89d93887d73685d53483d33281e130800000013202c3946535f6c798693a0acaca093867e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e80818386898d92979ea5acaaa29a91877e74695f54493d32261b0f03000000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000d1926333f4c5865727e8b98a4b1a89b8f8275695c4f4336291c1000000000000000000000000104070c13191f252a2f34393d4145484c4f5255585b5e606366696c6f7275797c81858a90969da5adaea59c92887d72675c5145392d211609000013202c3946535f6c798693a0acaca09386796c5f5346392c2929292929292929292929292929292929292c3946535f6c798693a0acada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306090c0e11131416171818191918181716151412100d0b08040100000000000000000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5d574e44392d211509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a141e28313b454e575d5f5f5f5f5f5f5f5f5e5950463b3024180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131d262f3840474e555a5f63676a6c6d6e6e6e6d6d6b6966635f5a554f49423b3a434b53595e63666869696968676563605c544b4035291d110500000a141d262e34383b3b3b3b3b3b3b3b3b39352f271f150b01000000000000000000000000000006101a232b32373a3b3b3b3b3b3b3b3b3b3b3b39342e261e140a000000000a141d262e34383b3b3b3b3b3b3b3b3b38332c251c1208000000000000000000000000000000000000000f1c2835424e5b6774808c99a5b0a4988c8074695f554d4743403e3c3b3a3a3a3a3f4b5864717d8a97a3b0a6998c7f7265594c3f3226190c0000000000000000000013202c3946535f6c798693a0acb9b1aaa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a4988b7e7164574b3e3124180b00000000000000000004101b26313b444c515353535353524f4940372c21160a00000000000000000009131e29333e49535e69737e89939ea9a99e93897e73685e53483d33281d13080000000000010c16212c37414c57626c77828d98a2ada49a8f857a6f645a4f453a2f251a0f05000013202c3946535f6c798693a0acaea2968d8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8c8c8e909295999ea3a9aca69f9890887e756c62574d42372c21150a00000000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000b1824313e4a5764707d8a96a3b0a99d9083766a5d5044372a1d110000000000000000000000010810171e242a30363b4045494d5154585b5e6164676a6d707376787b7e8285898d91969ca1a8afaca49c938a80766c61564b3f34281d1105000013202c3946535f6c798693a0acaca09386796c5f53463936363636363636363636363636363636363636363946535f6c798693a0acada09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000002070b0f1215181b1d1f212224242525252525242322201e1c1a1714110d09050000000000000000000000000000000000000000000000000a16212c3740484f525353535353535353514c453c32271c110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c161f29333c454c515353535353535353524e473e342a1f13070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111b252f38414a525960666b6f7376787a7b7b7b7a797775726f6b66615b544d45434c555d646a6f72747575757573726f6d665d5145392d2014070006111c262f383f4548484848484848484845403931271d120700000000000000000000000000020d18222c353d4347484848484848484848484845403830261c1106000006111c262f383f45484848484848484847443e372e241a0f030000000000000000000000000000000000000d1a26333f4b5864707c8995a1aca89c91867b71675f58534f4c4a494847474646464956626f7c8996a2afa6998c7f7265594c3f3226190c0000000000000000000013202c3946535f6c798693a0acb3a89f9a9999999999999999999999999999999999999999999999999999999999999999988b7e7164574b3e3124180b000000000000000000000a151f29323a4044464646464646433e372e251b1005000000000000000004101a25303a45505a65707a85909aa5ada2978d82776c62574c41372c21160c0100000000000005101a25303b45505b66707b86919ba6aba1968b81766b61564c41362c21160b000013202c3946535f6c798693a0acb3a89f99989898989898989898989898989898989898989898999a9c9fa2a5a9aaa5a09b948d867e756d635a50463b31261b100400000000000013202c3946535f6c798693887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000000091623303c4956626f7c8995a2afaa9e9184776b5e5144382b1e1100000000000000000000020a131a22292f363c41474c5155595d6164676b6e717476797c7f8285888b8e9195999da2a7adada7a19a928a81786e645a4f45392e23180c00000013202c3946535f6c798693a0acaca09386796c5f53464343434343434343434343434343434343434343434346535f6c798693a0acada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000004090e13171b1f2225272a2c2e2f3031323232323231302e2d2b292623201d1915110c070200000000000000000000000000000000000000000005101a252e373e4346464646464646464645413b332a20160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d17202a333a4145464646464646464645423c352c22180d02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e18232d37414a535c636b71777b80838586888888878684827e7b77726c665f574f4b555e676f757b7e8182828281807e7c786e6155483b2f221508000b17222d38424a51545555555555555554514b43392f23180c0000000000000000000000000009141f29343e474e535555555555555555555554514a42382d22170b00000b17222d38424a515455555555555555544f4940362b2014090000000000000000000000000000000000000a1723303c4854606c7884909ba6aea2978d8379716a635f5b5957555554535353535255626f7b8895a2afa6998c7f7265594c3f3226190c0000000000000000000013202c3946535f6c798693a0acaea2978e8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b7e7164574b3e3124180b00000000000000000000030d1720282f343839393939393937322c251c13090000000000000000000a16212c37414c57616c77818c97a1aca69b90867b70655b50453a30251a1005000000000000000009131e29343e49545f69747f8a959faaa89d93887d73685d53483d33281d11050013202c3946535f6c798693a0acacaca9a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a6a7a9a8a6a4a19d99958f89837c746c635b51483e34291f14090000000000000013202c3946535f6c798693887b6f6255483c2f2215090909090909090909090909090909090909090909090909090909101c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000915222f3c4855626e7b8895a2aeab9e9285786b5e5145382b1e12000000000000000000020b141c242c333a41474d52585c6165696d7074777a7d808386898c8e9194979a9da1a5a9aeaca7a29c968f8880786f665c52483e33281d120600000013202c3946535f6c798693a0acaca09386796c5f534f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f535f6c798693a0acada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000000000040a10151a1f23272b2e313436393a3c3d3e3e3f3f3f3e3e3d3b3a383533302d2925211d18130d0701000000000000000000000000000000000000000009131c252c32373939393939393939393835302921180e0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e18212930353839393939393939393936312b231a11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2a353f49535c656e757c82878c8f91939495949493918e8b87837d7770696159525c67707981878b8e8f8f8f8e8d8b887b6f6255483c2f221509000f1b27333f4a545c6161616161616161615d554b4034291d1004000000000000000000000005101b25303b4650595f61616161616161616161615c544a3f33281b0f03000f1b27333f4a545c6161616161616161605a52483c3125190d0000000000000000000000000000000000000714202c3844505c68737e8a959fa9a99f958c837b756f6b6865636261616060605f5f5f626f7b8895a2afa6998c7f7265594c3f3226190c0000000000000000000013202c3946535f6c798693a0acaca093867f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7164574b3e3124180b0000000000000000000000050e161e24282b2c2c2c2c2c2c2a27211b130a010000000000000000000e1a26323d48535e68737e89939ea0a09f948a7f74695f54493e34291e1309000000000000000000020d17222d38424d58636d78838e99a0a0a09a8f84796f645a4f44392e2216090013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09f9e9d9c9a9895918d89847e78716a625a51493f362c22180d030000000000000013202c3946535f6c798693887b6f6255483c2f2215151515151515151515151515151515151515151515151515151515151c2936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000815222e3b4855616e7b8894a1aeab9e9285786b5f5245382c1f120000000000000000020b141d262e363e454c52585e63686d7175797d8084878a8d8f9295989b9ea1a4a7aaadada9a5a09b96918b857e766e665d544a40362c21170c0100000013202c3946535f6c798693a0acaca09386796c5f5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000030910161b21262b2f33373b3e40434547484a4b4b4c4c4b4b4a49484644423f3c3935312d28231e18130d0600000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c29241e170f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f171e24292b2c2c2c2c2c2c2c2c2c2a252019110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f1a26313c46515b656e7780878e93989b9ea0a1a2a1a19f9d9b97938e89827b736b6259636e78838b92979a9c9c9c9b9995887b6f6255483c2f22150900121e2b37434f5b666d6e6e6e6e6e6e6e6d675c5145392c20130700000000000000000000010c17212c37424d57626b6e6e6e6e6e6e6e6e6e6e6d665b5044372b1f120500121e2b37434f5b666d6e6e6e6e6e6e6e6c64594d4135291c1004000000000000000000000000000000000004101c28343f4b57626d78838d97a1a9a79e958d86807b777472706f6e6d6d6d6d6c6c6c6b6f7b8895a2afa6998c7f7265594c3f3226190c0000000000000000000013202c3946535f6c798693a0acaca0938679727272727272727272727272727272727272727272727272727272727272727272726c6155493d3023170a000000000000000000000000050c13181c1f20202020201f1e1b1610090100000000000000000000111d2a36434e5a656f7a858f93939393938d83786d62584d42382d22170d020000000000000000000006101b26313c46515c67717c879293939393938b81766b61564a3e3225190c0013202c3946535f6c7986939393939393939393939393939393939393939393939393939393939292918f8d8b8885817d78736d665f5850483f372d241a1006000000000000000013202c3946535f6c798693887b6f6255483c2f222222222222222222222222222222222222222222222222222222222222222936434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000815222e3b4855616e7b8894a1aeab9f9285786b5f5245382c1f1200000000000000000a141d262f38404850575d63696f74797d8285898c909396999c9fa1a4a7aaadadaaa7a4a19d9994908b858079736c645c544b42382f251a10050000000013202c3946535f6c798693a0acaca09386796c696969696969696969696969696969696969696969696969696969696c798693a0acada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000000000070e141b21272c32373b3f43474a4d4f5254555657585858585857565453514e4c4945413d39342f2a241e18110a03000000000000000000000000000000000000010910161a1e1f20202020202020201f1c19130d050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d13181c1f20202020202020201f1d1a140e0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000914202b37424d58636d77818991999fa4a8a5a19d9b9a9a9a9b9c9f9f9a948d857d746b626974808a949da3a7a6a09b989795887b6f6255483c2f2215090013202c3946525f6c777b7b7b7b7b7b7b796d6154473b2e2114080000000000000000000008131d28333e49535e69747b7b7b7b7b7b7b7b7b7b786c5f5346392d2013060013202c3946525f6c777b7b7b7b7b7b7b75695d5145382c2013070000000000000000000000000000000000000b17232f3a45515c67717b858f979fa6a79f98918c8784817e7d7c7b7a7a797979797978787b8895a2afa6998c7f7265594c3f3226190c0000000000000000000013202c3946535f6c798693a0acaca09386796c656565656565656565656565656565656565656565656565656565656565656565625a5045392d2114080000000000000000000000000001070c1012131313131313110e0a05000000000000000000000000121f2c3945525e6b768186868686868686867c71665c51463b31261b10060000000000000000000000000a141f2a353f4a55606a758086868686868686867d72665a4d4034271a0e0013202c3946535f6c79868686868686868686868686868686868686868686868686868686868686858482817e7c7975716c67615b554e463e362d241b120800000000000000000013202c3946535f6c798693887b6f6255483c2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f36434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000915222f3c4855626e7b8895a2aeab9e9285786b5e5145382b1e120000000000000007121c262f38414a525a61686f757a8085898e9295999c9fa2a5a8abaeadaaa7a4a19e9b9894918d88847f7a746e68615a524a423930261d1308000000000013202c3946535f6c798693a0acaca0938679767676767676767676767676767676767676767676767676767676767676798693a0acada09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000020a11181f262c32383d42474b4f5356595c5e6062636465656565646463615f5d5b5855514d4945403b352f29231c150d0600000000000000000000000000000000000000050a0e1113131313131313131312100d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080c1012131313131313131313110d09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925313d48535f6a747f89939ba3aaa7a09a95918e8d8d8d8e9092969a9e978f877d746a6d7985919ca6afa59c958f8c8a8b887b6f6255483c2f2215090013202c3946535f6c79868888888888887b6e6154483b2e211508000000000000000000040f19242f3a454f5a65707a85888888888888888886796d6053463a2d20130700131f2c3945525e6b7784888888888885796d6054483c2f23170a00000000000000000000000000000000000006121e29343f4a555f69737c858d959ca1a6a39d9893908d8b8a8888878786868686868585858a96a2afa6998c7f7265594c3f3226190c0000000000000000000013202c3946535f6c798693a0acaca09386796c5f59595959595959595959595959595959595959595959595959595959595959595650483e33281d110500000000000000000000000000000000000000000000000000000000000000000000000000000000121f2c3845525e6b76797979797979797979756a5f554a3f352a1f140a00000000000000000000000000030e18232e39434e59646e7879797979797979797972665a4d4034271a0e00131f2c3946525f6b7679797979797979797979797979797979797979797979797979797979797978777674726f6c6965605c56504a433c342c241b12090000000000000000000013202c3946535f6c798693887b6f6255483c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c434f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000000091623303c4956626f7c8995a2afaa9e9184776b5e5144382b1e11000000000000040e19232e38414a535c646c737a80868b91959a9ea1a5a8acafaca9a6a3a09d9a9895928f8b8884817c78736e69635d575048403830271e140b01000000000013202c3946535f6c798693a0acaca0938783838383838383838383838383838383838383838383838383838383838383838793a0acada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000000000040c141c232a31373d43494e53575c5f6366686b6d6e70717172727171706f6e6c6a6764615e5a55514c46403a342d261f18100800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2a36414d5965707b86919ba5ada69d958f8985828180808183868a8e93999990867c72717d8a96a2ada99e938a837f7d7e807b6f6255483c2f2215090013202c3946535f6c79869395959594887b6e6154483b2e2115080000000000000000000b15202b36404b56616c76818c959595959595959386796d6053463a2d20130700111e2a36434f5b6774808c95959595897c7064574b3f33261a0e010000000000000000000000000000000000010c18232e39434d57616a737b838a90969b9fa2a3a09c9a9896959494949393939292929291939ca6b2a6998c7f7265594c3f3226190c0000000000000000000013202c3946535f6c798693a0acaca09386796c5f534c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a453e362c22170c0000000000000000000000000407080909090909090909080705010000000000000000000000000000111d2a36424e5a646b6c6c6c6c6c6c6c6c6c6a63594e43382e23180d03000000000000000000000000000007111c27323c47525d666c6c6c6c6c6c6c6c6c6c6960564a3e3225190c00111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6a69676563605d5955504b453f38312a221a1209000000000000000000000013202c3946535f6c798693887b6f6255484848484848484848484848484848484848484848484848484848484848484848484848484f5c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000b1824313d4a5763707d8a96a3b0a99d9083766a5d5044372a1d110000000000000a15202b353f49535c656e767e858b91979ca1a6aaaeaca9a6a29f9c999794918e8b8885827f7c7874706c67625d57524c453e362f261e150c0200000000000013202c3946535f6c798693a0acafa3999190909090909090909090909090909090909090909090909090909090909090909199a3afada09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000050e161e262d353c42494f545a5f63686c6f727577797b7c7d7e7e7e7e7e7d7c7a797674716d6a66615c57514c453f38312a221a120a01000000000000000000000000000000000000000004070a0c0d0e0f1010100f0e0c0a0704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070b0d0e0e0e0e0e0e0e0e0e0d0b08030000000000000000000000000000000000000000000000000103050708080909080706050300000000000000000000000000000001020303030202000000000000000000000000000915212d3a46525e6a75818d98a2ada89e948b847d787573737375777a7d82888e95988e847a74818d99a6afa3988c827873717173746b6054473b2e2115080013202c3946535f6c798693a0a2a194887b6e6154483b2e211508000000000000000007111c27323c47525d68727d88939ea2a2a2a2a2a09386796d6053463a2d201307000e1a27333f4c5864707d8995a2a2988c8073675b4e42362a1d110500000000000000000000000000000000000006111c27313c464f58616971787f858a8f9296999b9d9fa0a1a2a1a0a0a0a0a09f9f9f9e9e9fa5aeb2a6998c7f7265594c3f3226190c0000000000000000000013202c3946535f6c798693a0acaca09386796c5f53463f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3a342c241a100500000000000000000000070c11141515151515151515151514110d08010000000000000000000000000e1a26323d48525a5f5f5f5f5f5f5f5f5f5f5e5951473c32271c1107000000000000000000000000000000000b15202b36404b545c5f5f5f5f5f5f5f5f5f5f5d574e44392d221609000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5e5c5b595654504d49443f3a342d272018100800000000000000000000000013202c3946535f6c798693887b6f625555555555555555555555555555555555555555555555555555555555555555555555555555555c697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000d1a26333f4c5865727e8b98a4b1a89b8f8275695c4f4336291c10000000000005101c27323c47515b656e7780888f969da3a8adada8a4a09d999693908d8a8785827e7c7976736f6c6864605b57524c46403a332c251d140c030000000000000013202c3946535f6c798693a0acb5aba29d9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9da2abb5ada09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000000000060e17202830383f464d545a60656b6f74787b7e82848688898a8b8b8c8b8b8a89878583817d7a76726d68635d57504a433b342c241c130a010000000000000000000000000000000000040a101316181a1b1c1c1c1c1c1b191714100c070200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e13171a1a1a1a1a1a1a1a1a1a1a18140f09010000000000000000000000000000000000000003070a0d10121314151515151413110f0d0a0602000000000000000206090c0e0f1010100f0e0d0b09070400000000000000000c1824313d4956626e7a86929ea9aca1968c8279726c69676667686a6d71767c838a92968c8177838f9ca9ac9f93877b706764656767625a4f43382b1f13060013202c3946535f6c798693a0aca194887b6e6154483b2e21150800000000000000030d18232e38434e59646e79848f9aa4aeaeaeaeada09386796d6053463a2d201307000b1723303c4854616d7986929ea89c8f83776a5e5246392d211408000000000000000000000000000000000000000b15202a343d464f585f676e74797e83868a8c8f919293949596969696969797979898989aa0aab2a6998c7f7265594c3f3226190c0000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346393232323232323232323232323232323232323232323232323232323232312e29221a1208000000000000000000020b12181d2022222222222222222222211d19130c0400000000000000000000000a15212c3640484f52535353535353535353524e473f352b20150a0000000000000000000000000000000000040f19242f39424a5053535353535353535353514c453c32281d1105000a16212c3740484f525353535353535353535353535353535353535353535353535353535353535251504e4c4a4744413d38332e28221c150e060000000000000000000000000013202c3946535f6c798693887b6f6262626262626262626262626262626262626262626262626262626262626262626262626262626262697683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000003101c2935424e5b6774818d99a6b3a69a8d8174675b4e4135281b0f00000000000a16212d38434e59636d77818a929aa1a8aeaca6a19c9894908d8a8784817e7b7875726f6c696663605c5854504b46413b352f29221a130b02000000000000000013202c3946535f6c798693a0acb9b4adaaa9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9aaadb4b9ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000000050e182029323a424951585f656b71767b8084888b8e91939496979898989898979594928f8d8a86827d79746e68625b544d463e362e251c130a01000000000000000000000000000000070f161b20232527282929292929272523201c18130e0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a12191f23262727272727272727272624201a130b0300000000000000000000000000000000050a0f13171a1c1e202122222222211f1e1c1916130e0a0500000004090e1216181b1c1c1c1c1c1b1a181613100c070000000000000e1b2734404d5965727e8a97a3aea79b90857a7067615c5a595a5b5e61666b717880889193887d84919eaaa99c9083776b5f57585a5b5750483d32271b0f030013202c3946535f6c798693a0aca194887b6e6154483b2e2115080000000000000009141f2a343f4a55606a75808b96a0abb1b0b3b8ada09386796d6053463a2d201307000714202c3845515d6a76828f9ba79f93877a6e6155493d3024180b00000000000000000000000000000000000000030e18222b343d464e555c62686d72767a7d808284868788888989898a8a8a8a8a8b8b8b8e98a4b0a6998c7f7265594c3f3226190c0000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2626262626262626262626262626262626262626262626262626262624221d171008000000000000000000020c141c23292d2f2f2f2f2f2f2f2f2f2f2d2a241e160d0400000000000000000000040f1a242e363d434646464646464646464645423d352d23190e0400000000000000000000000000000000000008121d2730383f444646464646464646464645413b332a21160b000005101a252e373e434646464646464646464646464646464646464646464646464646464646464645444342403d3b3834302c28231d17110a03000000000000000000000000000013202c3946535f6c798693887b6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f7683908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000007131f2c3844515d6a76838f9ca8b1a4988b7e7265594c4033261a0d00000000030f1b27323e4955606a758089939ca4acafa8a19b95908c8884817d7a7774716e6c696663605d5a5753504c48443f3a35302a241e1710090100000000000000000013202c3946535f6c798693a0acb6ada5a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa0a5adb6ada09386796d6053463a2d20130700000000000000000000000000000000000000000000000000000000040e17202a323b444c545b626970767c82878c9094979a9d9fa1a3a4a4a5a5a5a4a3a2a09e9c9996928e8a857f79736d665f58504840372e251c1309000000000000000000000000000007101920272c2f313335353636363534322f2c28241f19130d0600000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c242a2f3334343434343434343433302b251d150b0100000000000000000000000000040b11161b1f2326292b2d2e2f2f2f2e2d2c2a2825221f1b16110b06090f151a1e222527292929292928262422201c18120b0300000000101d2936424f5b6875818e9aa6afa3978b7f73685e56504d4d4d4f51555a60666e767f88928f8486929faba79a8e8174685b4f4b4e4e4b463f362c21160a000013202c3946535f6c798693a0aca194887b6e6154483b2e21150800000000000005101b26303b46515c66717c87929ca7aaa5a4a7adada09386796d6053463a2d2013070004101d2935414e5a66737f8b98a4a2968a7d7165594c4034271b0f02000000000000000000000000000000000000030d161e252b343c434b51575d62666a6e71737577797a7b7b7c7c7d7d7d7d7d7d7e7e7e8895a2afa6998c7f7265594c3f3226190c0000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201919191919191919191919191919191919191919191919191919191815110c06000000000000000000000a141e262e34393b3c3c3c3c3c3c3c3c3b39352f281f160c010000000000000000000008121c242c3236393939393939393939393936312b231b110700000000000000000000000000000000000000010b151e272e3337393939393939393939393835302921180f0400000009131c252c3237393939393939393939393939393939393939393939393939393939393939393938363533312e2b2824201c17120c060000000000000000000000000000000013202c3946535f6c798693887b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b83908c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000010c1824303c4854606d7985929eabaea295897c7063574a3e3124180b000000000714202c37434f5a66717c87919ba5aeada59d968f8a84807c7874716e6b6865625f5c595653514e4a4744403c38332e29241e19130c05000000000000000000000013202c3946535f6c798693a0acb0a59b949292929292929292929292929292929292929292929292929292929292929292949ba5b0ada09386796d6053463a2d201307000000000000000000000000000000000000000000000000000000020c162029323c444d565e656d747b82888d93989ca0a4a7aaa8a5a3a2a1a1a0a1a1a2a4a6a8a8a5a29e9a95908b857e787169625a524940372e251b1208000000000000000000000000040f19222b32383c3e40414243434342413f3c3834302a251e17100901000000000000000000000000000000000000000000000000000000000000000000000000000007121c252e353b3f414141414141414141403c372f271d1309000000000000000000000000080f161c22272b2f333538393b3b3c3c3b3a393735322f2b26221d1711131a20262b2e313435363636353433312f2c28231d150d03000000111e2b3744515d6a7783909da9aca093877a6e62574c444140404245494e555c646d76808a948f8f97a2aea6998c807366594d4041413f3b342d241a0f05000013202c3946535f6c798693a0aca194887b6e6154483b2e2115080000000000010c17222c37424d58626d78838e98a3aaa099979ba4ada09386796d6053463a2d20130700000d1925323e4a57636f7c8894a1a6998d8174685c5043372b1e12060000000000000000000000000000000000000b151f282f363a3d3e40464c51565a5e616467696b6c6d6e6f6f6f70707070717171717b8895a2afa6998c7f7265594c3f3226190c0000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0905010000000000000000000006111c26303840454848484848484848484846413a31281e130800000000000000000000000a121a21262a2c2c2c2c2c2c2c2c2c2c2c2a2620191109000000000000000000000000000000000000000000030c151c23282b2c2c2c2c2c2c2c2c2c2c2c29241f170f0600000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b2a282724221f1c1814100b0601000000000000000000000000000000000013202c3946535f6c7986938c88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889928c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000007121d2834404c5864707c8995a1aeab9f93867a6d6154483b2f221609000000000b1724303c4854606b77828e98a3adada49b938b847e78746f6c6865615e5b585553504d4a4744413e3b3734302c27231e1a181614110f0d0a06010000000000000013202c3946535f6c798693a0acada0948986868686868686868686868686868686868686868686868686868686868686868994a0adada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000000000a141e28323b444e565f6770777f868d93999ea3a8aaa6a29e9b99979594949494949697999b9ea2a6aaa6a19c969089827b746c645b524940372d241a100600000000000000000000000b16212b343d43484b4d4e4f4f4f4f4f4d4b4845403b363029221b130b02000000000000000000000000000000000000000000000000000000000000000000000000010d18232e3740474c4d4d4d4d4d4d4d4d4d4c4841392f251a0f03000000000000000000020a121a21272d32373b3f4244464748484848474544413e3b37322d28221c1e252c31363b3e404243434342413f3e3b38342e271f150b010000121f2c3945525f6b7885929eabaa9e9184786b5f52463a34333436393d434a525b646d78828d989ba0a9b2a6998c7f7265594c3f3435332f2a231b120800000013202c3946535f6c798693a0aca194887b6e6154483b2e211508000000000008131e28333e49545e69747f8a949faaa3988e8a929eaaa09386796d6053463a2d20130700000a16222e3b4753606c7885919da99d9084786b5f53473a2e221509000000000000000000000000000000000006121d27313a41474a4b4c4d4e4f50525355585a5c5e5f6161626363636363636464646f7b8895a2afa6998c7f7265594c3f3226190c0000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b080400000000000000000b17222d38424a5155555555555555555555524c433a2f24190d0100000000000000000000000810161a1e1f2020202020202020201f1d1a150f070000000000000000000000000000000000000000000000030a11171b1e202020202020202020201f1d19130d06000000000000010910161a1e1f2020202020202020202020202020202020202020202020202020202020201f1e1d1c1a181513100c0804000000000000000000000000000000000000000013202c3946535f6c7986939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393938c7e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000040e18232e3945515c6874808c98a5b1a89c9083776a5e5245392c201307000000010e1b2733404c5864707c88949faab0a59b92898179736d68635f5c5855524f4c494643413e3b3835322f2b282a2c2c2b29272422201e1c1916120c0600000000000013202c3946535f6c798693a0acaca0938679797979797979797979797979797979797979797979797979797979797979798693a0acada09386796d6053463a2d201307000000000000000000000000000000000000000000000000000007111c26303a444d5660687179828991979ea4aaa9a39e9a95928f8c8a898887878788898a8d8f92969a9ea4a9a7a19b948d867e756d645b52493f362c22170d0200000000000000000004101c27323d464e5457595b5c5c5c5c5b5a5854514c47413b342c251d140b02000000000000000000000000000000000000000000000000000000000000000000000006121e2a35404952585a5a5a5a5a5a5a5a5a58534b41372b2014080000000000000000020b141c242b32383e43474b4e515354555555555452504e4b47433e39332d262830373d42474a4d4f4f4f4f4f4e4c4a4845403931271d1207000013202c3946535f6c7986929facaa9d9083766a5d5044372a2627292d32394049525c66707b86929da9b2b2a6998c7f7265594c3f322826231e1811090000000013202c3946535f6c798693a0aca194887b6e6154483b2e21150800000000040f1a242f3a45505a65707b86909ba6a79c9287828f9ca8a09386796d6053463a2d201307000006121f2b3744505c6975818d9aa6a094877b6f62564a3e3125190c00000000000000000000000000000000000b17232e39434c525657595a5b5c5d5e5f5e59515051535455555656565657575757626f7b8895a2afa5998c7f7265594c3f3226190c0000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a191814100a030000000000000f1b27333f4a545c616262626262626262625d564c41352a1d1105000000000000000000000000040a0e111313131313131313131313110e09040000000000000000000000000000000000000000000000000000060b0f121313131313131313131312100d0802000000000000000000050a0e11131313131313131313131313131313131313131313131313131313131313131212100f0d0b090603000000000000000000000000000000000000000000000013202c3946535f6c798686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686867e7265584c3f3225190c0013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000050d16202a35404b56616d7985919da9b0a4988c8073675b4f4236291d110400000004111d2a36434f5c6874818d99a4b0a99e938980776f68615c5753504c494642403d3a3734312e2b2825232b31363939383533312f2d2a2826231e171008000000000013202c3946535f6c798693a0acaca09386796c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c798693a0acada09386796d6053463a2d20130700000000000000000000000000000000000000000000000000030e19232e38424c565f68727a838b939ba2a9aba49e98928e898582807d7c7b7a7a7a7b7c7e8083868a8e93989ea4aba69f9790887f766d645b51483e33291f140a0000000000000000000814202d38444f586064666768696969686664615d58524c453e372f261d140b02000000000000000000000000000000000000000000000000000000000000000000000916222e3a46515b63676767676767676767645d53483c3024180b00000000000000020b141d262e363d444a4f54585b5d5f6161626261605f5d5a57534f4a443f3831313a41484e5357595b5c5c5c5b5a595754514b43392f24180d010013202c3946535f6c798693a0acaa9d908376695d5043362a1d1a1d21272e37404a545f6a75818c98a3afb2a6998c7f7265594c3f32261a17130d06000000000013202c3946535f6c798693a0aca194887b6e6154483b2e211508000000000b16202b36414c56616c77828c97a2aba0968b8083909ca9a09386796d6053463a2d2013070000030f1b2834404d5965717e8a96a3a3978b7e7266594d4135281c1003000000000000000000000000000000030f1c28343f4b555d6364656667696a6b6c6b63594e454647484949494a4a4a4a4a56636f7c8996a2afa5988c7e7265584c3f3225190c0000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2626262626262626262626262626262626262626262626262626262626262624201b150d050000000000121e2b3743505b666d6f6f6f6f6f6f6f6f6e685d5246392d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6b76797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797064584b3e3225180c0013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000040910171f28323c46515c67727e8a95a1adaca094887c7064574b3f33261a0e0100000006131f2c3945525e6b7784909ca9b0a4988d82776e655d56504b4743403c393633302d2b2825221f1c222c353c4245464442403e3b393735322e29221a11070000000013202c3946535f6c798693a0acaca09386796c5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000000000000000000000000000a15202a353f4a545e68717a848d959da5ada8a19a938d87827d797673716f6e6d6d6d6e6f717376797d82878d939aa1a8a9a299918980766d63594f453b30261b100500000000000000000a1723303c4955606a707274757676767573706d69635e57504941382f261d140a010000000000000000000000000000000000000000000000000000000000000000000b1824313e4a57636d7474747474747474746f64584c4033261a0d000000000000000a141d262f3840484f555b5f64676a6c6d6e6f6f6e6d6b6966635f5b56504a433b3a434c53595f63666869696968676563615c554b4035291d11050013202c3946535f6c7986929facaa9d9084776a5d5144382b1f1a18161c252e38424d58646f7b87939fabb2a6998c7f7265594c3f3226190c070200000000000013202c3946535f6c798693a0aca194887b6e6154483b2e21150800000007121c27323d48525d68737e88939ea9a49a8f847984909daaa09386796d6053463a2d2013070000000c1824313d4956626e7a87939fa79a8e8275695d5044382c1f130700000000000000000000000000000005121e2b3844505c676f7172737475777879756a5e5145393a3b3c3c3c3d3d3d3e4b5864717d8a97a4b0a4988b7e7165584b3e3225180b0000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346393333333333333333333333333333333333333333333333333333333333333333302c261f170e040000000013202c3946525f6c787b7b7b7b7b7b7b7b7a6e6255483b2f2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000030608080808080808080808070501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306080b0d0f101112131313131212100f0d0b09070400000000000000000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c685f54483c3023170a0013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000010205070b0f141b2129313a444e58636e78848f9ba6b2a79b8f83776b5f53473b2f23170a000000000814212e3a4754606d7a86939facaca093877b70655c534c45403b3734302d2a2724211e1b1815131f2a343e474e5253514f4c4a484644413f3a342c23190f0400000013202c3946535f6c798693a0acaca09386796c5f53525252525252525252525252525252525252525252525252535f6c798693a0acada09386796d6053463a2d20130700000000000000000000000000000000000000000000000005101b26313c47515b66707a838d969fa7afa79e968f88817b76716d6966646261616161626365676a6d71767b82888f969ea7aba39b92897f756b61574d42382d22170c01000000000000000b1825323e4b5864717c7f818282838382807d79746f69625a534a42392f261c13080000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727e818181818181818174675a4d4134271a0e01000000000007111c262f39424a525960666b707376797a7b7b7b7b7a7876736f6b66615b544d46434d555e656a6f7275767676757472706d675d5145392d20140700121f2c3845525e6b7884919eaaab9e9285796c6053473b312b272423222126313c47535f6b77838f9ca8b2a6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e2115080000030e18232e39444e59646f7a848f9aa5a89e93887d7784919eaba09386796d6053463a2d2013070000000815212d3a46525e6b7783909ca89e9285796c6054483b2f23160a0000000000000000000000000000000613202c3946535f6c787d7e808182838486796c6053473b302f2f3030303036424e5a6773808c99a5afa396897d7063574a3d3124170b0000000000000000000013202c3946535f6c798693a0acaca09386796c5f534640404040404040404040404040404040404040404040404040404040404040403f3d38312920160b0000000013202c3946535f6c7986888888888888887b6f6255483c2f221509000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f121415151515151515151514110d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080c0f1215171a1b1d1e1f1f20201f1f1e1d1c1a181613100d0905010000000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5d564d42372c2014070013202c3946535f6c798693a0acaca09386796c5f5346392c20130b0b0b0c0c0e0f1114171b20262c333b434d56606a747f8a95a0acada1968a7e73675b4f43372b1f1307000000000915222f3c4855626e7b8895a1aea99c9084776b5f544a413a342f2b2724211d1a1714120f0c0c1824303b4650595e5f5d5b59575452504e4b453e352b20150a00000013202c3946535f6c798693a0acaca09386796c5f53464646464646464646464646464646464646464646464646535f6c798693a0acada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000b16212d38434d58636d77828c959fa8afa69d958c857d76706a65615d5a5856555454545556585a5d61656a70767d858c959da6ada49b91877d73695e54493e33281d1207000000000000000b1825323e4b5865717e8b8d8f8f908f8e8c8985807a736c645c544b41382e241a100600000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c8e8e8e8e8e8e8174675a4d4134271a0e0100000000030e19232d38414b545c646b71777c80838587888888888685827f7b77726c665f58504b555f676f767b7f8183838382817e7c796e6155483b2f22150800111e2a3744505d6976838f9ca8ada194887c6f63584d433c3633312f2e2e2d2d37424e5b6773808c99a5b2a6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e21150800000a141f2a35404a55606b75818b96a1aca2978c81767885929eaba09386796d6053463a2d20130700000005111e2a36424f5b6774808c99a5a195897c7064574b3f32261a0d01000000000000000000000000000006121f2c3845525e6b77848b8d8e8f9091887c6f63574c413c39373737383a3f47525e6a76828f9ba8ada094877b6e6255483c2f2316090000000000000000000013202c3946535f6c798693a0acaca09386796c5f534d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4c49433b32271d120600000013202c3946535f6c7986939595959595887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000000000080f161b1f21222222222222222222201e19130d050000000000000000000000000000000000000000000000000000000000000000000000000000000001060b1014181b1f212426282a2b2c2c2c2c2c2c2b2a282725221f1c1915110d0803000000000000000000000000000000000000000a16212c3740484f5253535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353514b443b31261b0f030013202c3946535f6c798693a0acaca09386796c5f5346392c201818181819191a1c1e2023272c31373e454d565f68727c86919ca6b1a69b9085796e62564a3f33271b0f03000000000916222f3c4955626f7c8996a2afa79b8e8175685b4f43382f29231f1b1814110e0b08050205101c2834404c58626a6c6a686563615f5d5a5750473c32261a0e02000013202c3946535f6c798693a0acaca09386796c5f53463939393939393939393939393939393939393939393946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000000000000000000000005111c27333e49545f6a747f89949ea7b1a79d948b837a736c655f5a55514e4b4948474747484a4b4e51555a5f656b737a838b949da7ada3998f857b70655b50453a2e23180c010000000000000b1825323e4b5865717e8b989b9c9c9c9b9995918b857e766e665d534a40362c22180d02000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c989a9a9a9a8e8174675a4d4134271a0e01000000000915202a353f49535d666e767d83888c8f92949595959493918f8b88837d7771696259525d67717981878b8e8f908f8e8d8b887b6f6255483c2f221509000f1c2835424e5b6774808c99a5b0a4988c8074695f554d4743403e3c3b3a3a3a3a3f4b5864717d8a97a3b0a6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e2115080006101b26313c46515c67727c87929da8a59b90857a707986929faca09386796d6053463a2d201307000000020e1a27333f4b5864707d8995a2a4988c8073675b4e4236291d1104000000000000000000000000000004111d2a36434f5c6874818d999a9c9d988c8074685d534c484644444444464a5059646f7a86929faba99d9185786c5f53463a2d2114080000000000000000000013202c3946535f6c798693a0acaca09386796c5f5959595959595959595959595959595959595959595959595959595959595959595959544d43392e23170b00000013202c3946535f6c798693a0a2a2a295887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000000009121a21272b2e2e2e2e2e2e2e2e2e2e2d2a251e170e050000000000000000000000000000000000000000000000000000000000000000000000000001070c12171c2024282b2e313335363738393939393838363533312f2c2925211d18140e0903000000000000000000000000000000000005101a252e373e43464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464644403a32291f140a000013202c3946535f6c798693a0acaca09386796c5f5346392c2525252525252627282a2d3033383d42484f575f68717a848e98a2adaaa0958a7f73685d51453a2e22160b00000000000916222f3c4955626f7c8996a2afa79a8e8174675a4d4134271e17130f0b08070708080a0d1117212d3844505c697479767472706e6b696762594e43372b1e1205000013202c3946535f6c798693a0acaca09386796c5f5346392c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c3946535f6c798693a0acada09386796d6053463a2d20130700000000000000000000000000000000000000000000000a16222d38444f5a66717b86919ba5b0a99f958b82797169615a544e4945413e3d3b3a3a3b3b3d3f4245494e545a61687179828b959fa9aba1978c82776c61564b4034291d12060000000000000b1825323e4b5865717e8b98a1a1a2a4a7a5a19c97908880786f655c52483e34291f1409000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5a7a79a8e8174675a4d4134271a0e01000000040f1b26313c47515b656f7880878e94989c9ea0a1a2a2a1a09e9b98948f89827b746b6259636e79838b92979b9c9c9c9b9a95887b6f6255483c2f221509000d1a26333f4b5864707c8995a1aca89c91867b71675f58534f4c4a494847474646464956626f7c8996a2afa6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e211508020c17222d38424d58636e78838e99a4aa9f94897e746d798693a0aca09386796d6053463a2d201307000000000b17232f3c4854616d7986929ea89b8f83766a5e5245392d2014080000000000000000000000000000010e1b2733404c5965717d8995a1a8a89c90857a6f655d5854525150505153565b626b75808c97a3afa5998d8175695c5044372b1e12050000000000000000000013202c3946535f6c798693a0acaca09386796c6666666666666666666666666666666666666666666666666666666666666666666666655f554b3f33271b0e02000013202c3946535f6c798693a0acafa295887b6f6255483c2f22150900000000000000000000000000000000000000000000000000000000000000000000000007111b242c32373a3b3b3b3b3b3b3b3b3b3936302920170d030000000000000000000000000000000000000000000000000000000000000000000000050c12181d23272c3034373a3d3f414344454646464645444342403e3b3835312d29241f1a140e08010000000000000000000000000000000009131c252c3237393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393938342f2820170d03000013202c3946535f6c798693a0acaca09386796c5f5346393232323232323233343537393c3f44484e535a6169717a838c96a0aaada3998e83786d62574c4035291d120600000000000916222f3c4955626f7b8895a2aea79a8e8174685b4e423529221d191715141414141517191d2229333e4955606c788583817e7c7a7876736a5f53463a2d211407000013202c3946535f6c798693a0acaca09386796c5f5346392c201f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f202c3946535f6c798693a0acada09386796d6053463a2d20130700000000000000000000000000000000000000000000040f1b27323e4a55606c77828d98a3adaca1978d837970675f574f48423d393532302f2e2e2e2f303235393d42484f575f677079838d97a2aca99e94897e73675c51453a2e23170b0000000000000b1825323e4b5865717e8b95949495989b9fa5a8a19a928a81776e645a50463b30261b10050000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000000915202c37424d58636d77818a92999fa4a8a5a09d9b9999999a9c9e9f9a948d867d756b626974808b959da3a7a69f9b989795887b6f6255483c2f221509000a1723303c4854606c7884909ba6aea2978d8379716a635f5b5957555554535353535255626f7b8895a2afa6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e21150808131e29343e49545f69747f8a95a0aaa3988d82776d6d7a8794a0ada09386796d6053463a2d201307000000000714202c3845515d6a76828f9ba79f92867a6d6155493c3024170b0000000000000000000000000000000b1824303d4955616d7985909ba7ada1968b81776f6964615f5e5d5d5e5f62676d747d87929da8aba094897d7165594d4034281b0f030000000000000000000013202c3946535f6c798693a0acaca093867973737373737373737373737373737373737373737373737373737373737373737373737371675c4f43362a1d1104000013202c3946535f6c798693a0acafa295887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000020d18232d363d434748484848484848484846413b32291f1409000000000000000000000000000000000000000000000000000000000000000000020910171d23292e33383c404447494c4e505152525353525251504e4c4a4845413d3935302b251f19130c05000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b28241d160e0500000013202c3946535f6c798693a0acaca09386796c5f53463e3e3e3e3e3e3e3f3f40424346484c4f54595f656c737b838c959ea8afa59b91877c72675c51463a2f24180d0100000000000815212e3b4854616e7a8794a0ada99c8f83766a5d51463b332d2926242221212021222326292d333b454f5a65717d89908d8b898785827a6e6154483b2e211508000013202c3946535f6c798693a0acaca09386796c5f5346392c2013131313131313131313131313131313202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000000000000000000000814202c38434f5b66727d88939fa9afa59a8f857b71675e554d453e37312d29252322212121222426292d32373e454d555e67717b85909ba5b0a59a8f84796d62564b3f33281c100400000000000b1825323e4b5865717e89888888898b8f949aa0a8a49c938a80766c62574d42372c21160b0000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000010d1925313d48545f6a757f89939ca4aaa7a09994918e8c8c8c8e8f9295999e978f877e746b6d7985919ca7afa59c948f8b8a8a887b6f6255483c2f221509000714202c3844505c68737e8a959fa9a99f958c837b756f6b6865636261616060605f5f5f626f7b8895a2afa6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e2115080f1a25303a45505b65707b86919ca6a79c91867b71666e7b8794a1ada09386796d6053463a2d2013070000000004101c2935414e5a66737f8b98a4a2968a7d7164584c4033271b0e0200000000000000000000000000000814202c3945505c68737f8a959fa9a89d938a817a74706d6b6a6a6a6a6c6f72787e868f99a3aea4998e83786c6054483c3024180c000000000000000000000013202c3946535f6c798693a0acaca0938680808080808080808080808080808080808080808080808080808080808080808080808080776b5e5144382b1e1105000013202c3946535f6c798693a0acaca295887b6f6255483c2f221509000000000000000000000000000000000000000000000000000000000000000000000007131e2a353f484f53555555555555555555524c443b31261a0e0300000000000000000000000000000000000000000000000000000000000000040c131b22282e343a3f44484c505356585a5c5e5f5f5f5f5f5f5e5d5b595754514d4a45413c36312b241d160f07000000000000000000000000000000010910161a1e1f202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201f1c18120c040000000013202c3946535f6c798693a0acaca09386796c5f534b4b4b4b4b4b4b4b4c4c4d4e505255585c60656a70767d858d959ea7afa69d938980756b60554a3f34291e13070000000000000713202d3946525f6c7885919eaaab9e92867a6e62574d453e393532302f2e2d2d2e2f303235393e454d57616c77828e999a9896938f83776a5e5246392d201407000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000000000000000000000d1925303c4854606b77838e9aa5b0a99e93887e73695f554c433b332c26211c1917151414141517191d21262c333b434c555f69747e89949faaaca1958a7e73675c5044382c21150900000000000b1825323e4b5865717d7c7b7b7b7c7f83888f969ea6a59c92887e73695e53493e32271c110500000000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e01000005111e2a36424d5965707b86919ba5aea69d958e898481808080818386898e93999990867c73717d8a96a2aea99e938a837e7d7d807b6f6255483c2f2215090004101c28343f4b57626d78838d97a1a9a79e958d86807b777472706f6e6d6d6d6d6c6c6c6b6f7b8895a2afa6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e21150b16212c36414c57616c77828d98a2aba0958a80756a616e7b8895a1ada09386796d6053463a2d20130700000000000d1925323e4a57636f7b8894a0a5998d8174685c4f43372a1e1205000000000000000000000000000004101c2834404b57626e78838e98a1aaa59c938b85817d7a7877767777797b7e83899098a1aba59c92887d72665b5044382c201408000000000000000000000013202c3946535f6c798693a0acaea2978e8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d84776b5e5144382b1e1105000013202c3946535f6c798693a0a0a0a095887b6f6255483c2f22150900000000000000000000000000000000000000000000000000000000000000000000000b17232f3b465159606161616161616161615e564d42372b1f1306000000000000000000000000000000000000000000000000000000000000060e161e252c333a40454b5054585c5f626567696a6b6c6c6c6c6b6a69686663605d5a56514c47423c362f282119110901000000000000000000000000000000050a0e11131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131312100c0701000000000013202c3946535f6c798693a0acaca09386796c5f58585858585858585858595a5b5d5f6164686c70757b81888f979fa7aea69d948b81776d63594e44392e23180d0100000000000005111e2b3744505d6975828e9aa6aea2968a7f74695f574f4a45423f3d3b3b3a3a3a3b3d3f41454a50575f69737d88939fa7a4a2968a7e72665a4e42362a1e1105000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d20130700000000000000000000000000000000000000000004111d2935414d5965707c88949fabafa3988d82766c61574d433a3129211b15100d0a08080708090a0d10151b2129313a434d57626c77838e99a4b0a69b8f84786c6155493d3125190d00000000000a1724303d4955616b71706f6e6e6f73777d848c949da6a49a90857b70655a4f44392d22160b00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e0100000915212e3a46525e6a76818d98a3ada89e948b837d78757373737476797d82878d94988f857a74818d9aa6afa3978c817872707173736b6054473b2e21150800000b17232f3a45515c67717b858f979fa6a79f98918c8784817e7d7c7b7a7a797979797978787b8895a2afa6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e2115121d27323d48535d68737e89949ea9a4998e84796e63626f7b8895a2ada09386796d6053463a2d20130700000000000916222e3b4753606c7885919da99c9084776b5f53463a2e2115090000000000000000000000000000000c18232f3a46515c67717c868f98a0a7a59d96918c8987858483838485878b8f949ba2aaa49c938a80766b60554a3f33271c1004000000000000000000000013202c3946535f6c798693a0acb3a9a09a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9184776b5e5144382b1e1105000013202c3946535f6c7986939393939393887b6f6255483c2f22150900000000000000000000000000000000000000000000000000000000000000000000000e1a2733404c57626b6e6e6e6e6e6e6e6e6e685e53473b2f2215090000000000000000000000000000000000000000000000000000000000060f18202830373e454b51565c6064686c6f7274757778797979797877767472706d6a66625d58534d47413a332b231b130a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c6565656565656565656565656668696b6e7174787c81878d939aa1a9aca49c948b82786f655b51473d32271d120700000000000000020f1c2834414d5966727e8a96a1ada79b90857b7169615b55514e4b4a484747474748494b4e51555b6169717b858f9aa5b0a89c91857a6e62564a3e32261a0e02000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d2013070000000000000000000000000000000000000000000814212d3945515d6975818d99a4b0a99e92877b70655a50453b31281f17100904000000000000000001040910171f28313b46505b66717c88949fabaca095897d7165594d4135291d1004000000000815212d39444f5961646362616163666c727a828b949ea8a1978c82766b60554a3e33281c1105000000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e0100000c1825313d4a56626e7a86929ea9aca1968c8279726c68666666686a6d71767c838a92968c8277838f9ca9ac9f93877b70666464666762594f43372b1f1306000006121e29343f4a555f69737c858d959ca1a6a39d9893908d8b8a8888878786868686868585858a96a2afa6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e211519232e39444f59646f7a858f9aa5a89d92887d72675c626f7b8895a2ada09386796d6053463a2d201307000000000006121f2b3744505c6875818d9aa6a094877b6e62564a3d3125180c00000000000000000000000000000007121e2935404b55606a737d868e959ca2a7a29d99959392919090919294979ba0a5a6a09a928a81786e645a4f44392d22170b00000000000000000000000013202c3946535f6c798693a0acacacaba7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69e9184776b5e5144382b1e1105000013202c3946535f6c7986868686868686867b6f6255483c2f22150900000000000000000000000000000000000000000000000000000000000000000000000f1c2835424e5b68747b7b7b7b7b7b7b7b7a6f63564a3d3024170a00000000000000000000000000000000000000000000000000000000060f18212a323a41494f565c62676c7175787b7e8182848586868686858483817e7c7976726e69645e58524b443d352d251c130a01000000000000000000000000000000000000000000000000000000000000000000000306080808080808080808080603000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca093867971717171717171717171717272737476787a7d8184888d92989ea4aba8a19a928a827970665d534a3f352b20160b0000000000000000000c1925313d4956626d7985909ba6ada2978d837a736c66615d5a585655545353545556585a5d61666c737b838d96a1abaca1968b8074695d51463a2e22160a00000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d2013070000000000000000000000000000000000000000000c1824303d4955616d7986929da9b0a4988d81756a5f54493e33291f160d0500000000000000000000000000050d161f29343f4a55606b77838e9aa6b1a5998e8275695d5145392d2014080000000005111c28333e474f555756555555565b61687079828c96a0a99e93887d72665b4f44392d22160a000000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e0100000e1b2734404d5965727e8a97a3afa79b90857a7067605c5a59595b5d61656b717880889193897d84919eaaa99c9083776b5e57585a5a5750473d32271b0f030000010c18232e39434d57616a737b838a90969b9fa2a3a09c9a9896959494949393939292929291939ca6b2a6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e21151f2a35404b55606b76818b96a1aca1968b81766b6055626f7b8895a2ada09386796d6053463a2d2013070000000000030f1b2834404d5965717e8a96a3a3978b7e7266594d4134281c0f030000000000000000000000000000010d18232e39434e58616b737c838a91969b9fa3a5a2a09e9d9d9d9d9fa0a3a5a29f9a958f8880786f665c52483d32271c110600000000000000000000000013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09e9184776b5e5144382b1e11050000131f2c3946525f6b767979797979797979786d6155483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b687582888888888888887d7063574a3d3024170a000000000000000000000000000000000000000000000000000000050f18212a333c444c535a61676d73787c8185888b8d8f90929293939292918f8d8b8986827e7a756f6a635d564f473f372e251c130a0000000000000000000000000000000000000000000000000000000000000000050b0f1314151515151515151514120f0a0500000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca093867e7e7e7e7e7e7e7e7e7e7e7e7e7f8081838487898d9094999ea3a9aaa49d978f8880786f675e544b41382e23190f040000000000000000000915212d3945515d68747f8a959fa9a99f958c857d77726d6a6765636261606061616364676a6d72777d858d959fa8aea49a90857a6e63584c4135291d110600000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d2013070000000000000000000000000000000000000000020f1b2734404c5965717d8a96a2aeaca094887c7065594e42372c22170d04000000000000000000000000000000040e18222d38434f5b66727e8a96a2aeaa9e9286796d6155493c3024170b00000000000b17212c353d44494b4a4848484a4f565e67707a848f99a4a4998e83776c61554a3e33271b10040000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000101d2936424f5c6875818e9aa6afa3978b7e73685e55504d4c4d4e51555a5f666e767e88918f8486929faba79a8e8174685b4f4b4d4e4b463e352b21160a0000000006111c27313c464f58616971787f858a8f9296999b9d9fa0a1a2a1a0a0a0a0a09f9f9f9e9e9fa5aeb2a6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e211b26313c47515c67727d88929da8a59a8f857a6f645955626f7b8895a2ada09386796d6053463a2d2013070000000000000c1824313d4955626e7a87939fa69a8e8275695d5044382b1f130600000000000000000000000000000007121d27323c464f59616a727980858a8f9396999b9c9e9e9f9f9f9e9d9b9996938e89847d766e665d544a40362c21160b0000000000000000000000000013202c3946535f6c79869393939393939393939393939393939393939393939393939393939393939393939393939393939393939184776b5e5144382b1e11050000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c665c5145392d20140700000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828f95959595958a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000030d17212a333c454e565d656c72797e84898d919497999b9d9e9fa0a09f9e9d9c9a9895928e8a85817b756e686159514940372e251c12080000000000000000000000000000000000000000000000000000000000000810161b1f212222222222222222211f1b160f08000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaea2968d8b8b8b8b8b8b8b8b8b8b8b8b8c8c8d8e8f919396999ca0a5a9a8a39e98928c857e766e665d554c42392f261c12070000000000000000000005111d2935404c57626d78838d97a0a9a89f968f88837e797673716f6e6d6d6d6d6e6f717376797e83898f979fa8aea69c92887e73685d52473b3024180d0100000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000000000000000005121e2a3743505c6875818d9aa6b2a89c9083776b5f54483c31261b1005000000000000000000000000000000000006111c27323e4a56616d7986929eaaaea296897d7165584c3f33271a0e010000000005101a232c33393c3e3d3c3b3b3e444c555e68727d88929da89f94897d72665b4f43382c2015090000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000111e2b3844515d6a7784909da9aca093877a6e62574c444040404245494e555c646c758089948f9097a2aea6998c807366594d4041413f3a342c231a0f0400000000000b15202a343d464f585f676e74797e83868a8c8f919293949596969696969797979898989aa0aab2a6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e21222d38434d58636e79848e99a4a99e93897e73685d5355626f7b8895a2ada09386796d6053463a2d2013070000000000000815212d3946525e6b7783909ca89e9185786c6054473b2f22160a000000000000000000000000000000000b16202a343d474f5860676e747a7e83878a8c8e90919292929291908f8c8a86827d78726b645c544b42382e241a0f040000000000000000000000000013202c3946535f6c79868686868686868686868686868686868686868686868686868686868686868686868686868686868686868684776b5e5144382b1e110500000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5b544a4034291d110400000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca2a2a2978a7d7063574a3d3024170a00000000000000000000000000000000000000000000000000000a151f29333c454e575f676f767d848a8f94999da1a3a6a8a9a7a6a6a6a6a7a9a9a7a4a19e9a96918c868079726b635b524940372e241a10060000000000000000000000000000000000000000000000000000000009121a21272b2e2e2e2e2e2e2e2e2e2e2b27211a12090000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acb3a89f999898989898989898989898989899999a9c9ea0a2a5a9a8a5a19c98938d87817a736c645c544b433a30271e140a0000000000000000000000000c18242f3b46515c67717b858e979fa6a8a19a948e8a8683807e7c7b7a7a7a7a7b7c7d8082868a8e949aa1a9aca59c948a81766c61574c41352a1f13080000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d20130700000000000000000000000000000000000000000814212d3a46535f6b7884919da9b0a4988c8073675b4f43372c201409000000000000000000000000000000000000000a16222d3945515d6976828e9ba7b2a5998d8174685b4f4236291d1004000000000008111a21282d3031312f2e2f333a434c56616b76818c97a3a59a8e83776c6054493d31251a0e0200000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000121f2c3945525f6b7885929eabaa9e9184786b5f52463a34333335383d434a525a646d77828d979ca1a9b2a6998c7f7265594c3f3434332f29221a1108000000000000030e18222b343d464e555c62686d72767a7d808284868788888989898a8a8a8a8a8b8b8b8e98a4b0a6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e2129343f49545f6a75808a95a0aba2978d82776c61574c55626f7b8895a2ada09386796d6053463a2d20130700000000000005111e2a36424f5b6774808c99a5a195887c6f63574b3e3226190d01000000000000000000000000000000040e18222b353d464e555c63696e73777a7d8082838485858685848382807d7a76726d67615a524a423930261c12080000000000000000000000000000131f2c3946525f6b76797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979756a5d5144372b1e110400000a16212c3740484f52535353535353535352504a42382e23180c0000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8aea4978a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000007121c27313b454e576069717981888f959ba0a5a9a7a4a09e9c9b9a99999a9a9c9ea0a3a7aaa6a29d97918b847d756d645b524940362c22170d02000000000000000000000000000000000000000000000000000007111b242c33383a3b3b3b3b3b3b3b3b3a37322c241b110700000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acacaca9a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a6a7a9a8a6a4a29f9c9995918c87827c766f69615a524a423931281e150c0200000000000000000000000007131e2935404a555f69737c858d959ca2a8a59f9a96928f8c8a89888787878788898a8c8f92969a9fa5aca8a19a938a81786e655a50453a2f24190e020000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d20130700000000000000000000000000000000000000000a1623303c4955626e7b8794a0acada195887c6f63574b3f33271b0f030000000000000000000000000000000000000005111d2935414d5a66727e8b98a4b0a99c9084776a5e5145382c1f13060000000000000810161c2123242422222228313a444f5a646f7b86919da89f94887c7165594e42362a1f130700000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e01000013202c3946535f6c7986929facaa9d9083766a5d5043372a2627292c32384048525b66707b86919da8b3b2a6998c7f7265594c3f322826231e18100800000000000000030d161e252b343c434b51575d62666a6e71737577797a7b7b7c7c7d7d7d7d7d7d7e7e7e8895a2afa6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e25303b45505b66717b86919ca7a69b91867b70655b504855626f7b8895a2ada09386796d6053463a2d201307000000000000020e1a26333f4b5864707d8995a2a4988c7f73675a4e4235291d100400000000000000000000000000000000061019232b343c444b52575d62676a6e71737576777879797878777573716e6a66615c564f48403830271e140a010000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b63594d4135291c1003000005101a252e373e4346464646464646464646433f3830261c12070000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a000000000000000000000000000000000000000000000000030e19232e38434d576069727b838b939aa0a6aba5a09b9794918f8e8d8d8d8d8e8f9194979a9fa4a9a8a39c968f877f766d645b52483e34291f140900000000000000000000000000000000000000000000000000030e19232d363e4447484848484848484847433d362d23190e02000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09f9f9e9d9b9a989593908c8985807b76706b645e575048403830271f160c0300000000000000000000000000020d18232e39434d57616a737b838a91979ca1a6a6a29e9b9997969594949494949597999b9ea2a6a9a6a19c96908981786f665d53483e34291e1308000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d20130700000000000000000000000000000000000000000c1925323e4b5764717d8a96a3afab9e9285796c6054473b2f23160a0000000000000000000000000000000000000000010d1925313e4a56636f7c8895a1aeac9f9386796d6054473b2e22150800000000000000050b10141718171615161f28333d48535e6975818c98a3a5998d82766a5e53473b2f23170c00000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e01000013202c3946535f6c798693a0acaa9d908376695d5043362a1d1a1c21272e364049545f6a75808c98a3afb2a6998c7f7265594c3f32261917120d0600000000000000000b151f282f363a3d3e40464c51565a5e616467696b6c6d6e6f6f6f70707070717171717b8895a2afa6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e2c37414c57626d77828d98a3aa9f958a7f74695f54494855626f7b8895a2ada09386796d6053463a2d201307000000000000000b17232f3c4854616d7986929ea79b8f83766a5e5145392c2014070000000000000000000000000000000000071019222a323940464c52565a5e616466686a6b6b6c6c6b6b6a686764615e5a55504a443d362f261e150c020000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5e5951473c3125190d0000000009131c252c32373939393939393939393937332d261e140b000000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000000000009141f2a35404a555f68727b858d959da5aba6a099948f8b8885838181808081818385878a8e93989ea4aba7a099918980766d645a50453b30261b100500000000000000000000000000000000000000000000000008141f2a353f484f545555555555555555534f483f352a1f1307000000000000000000000000000000000000000000000000000013202c3946535f6c79869393939393939393939393939393939393939393929291908f8d8b898683807c78746f6a655f59534c453e362e261e150d0400000000000000000000000000000007121c27313b454e58616971787f868c91959a9da1a3a6a6a4a2a1a1a0a0a1a1a2a3a5a7a5a3a09d9a95918b857e776f665d544b41372c22170c01000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d20130700000000000000000000000000000000000000000e1a2734404d596673808c99a5b2a89c8f83766a5d5144382b1f13060000000000000000000000000000000000000000000916222e3b4754606d7986939facaea195887c6f6256493d3023170a00000000000000000004080a0b0b09080d16212c37424d58646f7b87939eaa9e92877b6f63574c4034281c1004000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e01000013202c3946535f6c7986929facaa9d9084776a5e5144382b201b18161c242e38424d58646f7b87939fabb2a6998c7f7265594c3f3226190c0601000000000000000006121d27313a41474a4b4c4d4e4f50525355585a5c5e5f6161626363636363636464646f7b8895a2afa6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e333d48535e69737e89949fa9a3998e83786d63584d424855626f7b8895a2ada09386796d6053463a2d201307000000000000000713202c3845515d6a76828f9ba79f9286796d6155483c3023170b00000000000000000000000000000000000007101820272e353b41464a525d666a6b6b6b6b68605f5f5e5d5c5a5855524e4a453f39332c241d140c03000000000000000000000000000000000a16212c3740484f52535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353524e473f352b20140900000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2b27221c140c02000000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a0000000000000000000000000000000000000000000000040f1a26313c47515c66707a848e979fa7aca39c958e89837f7b787674737373737476787b7e82878d939aa1a9aba39b928980766c61574d42372c21160b0000000000000000000000000000000000000000000000000c1824303c47515a606161616161616161605a51473b3024180b000000000000000000000000000000000000000000000000000013202c3946535f6c798686868686868686868686868686868686868686868685848382817e7c7a7774706c68645f5a544e48413b332c241c140c0300000000000000000000000000000000000b151f29333c464e575f666e747a8085898d919497999b9c9d9e9f9f9f9f9f9e9d9c9b999794918d8985807a736c655d544b42392f251b100600000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d20130700000000000000000000000000000000000000000f1c2835424e5b6874818e9aa7b3a69a8d8174675b4e4235291c100300000000000000000000000000000000000000000006131f2c3845525e6b7784919daab0a3978a7d7164584b3e3225180c00000000000000000000000000000000050f1a25303c47535f6a76828e9aa6a3978c8074685c5044382d211509000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000121f2c3845525e6b7884919eaaab9e9285796c6053473c322b272523222126313c47535f6b77838f9ba8b2a6998c7f7265594c3f3226190c000000000000000000000b17232e39434c525657595a5b5c5d5e5f5e59515051535455555656565657575757626f7b8895a2afa5998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2f39444f5a646f7a85909ba5a79d92877c71675c51463c4855626f7b8895a2ada09386796d6053463a2d2013070000000000000004101c2935414e5a66737f8b97a4a296897d7164584c3f33271a0e02000000000000000000000000000000000000060e161d242a30353d4a56636e7777777777726a625951514f4d4b4945423e39342e28211a130b02000000000000000000000000000000000005101a252e373e434646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464645423d362d23190e030000000000010910161a1e1f2020202020202020201e1b17110a0200000000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000000000915202b37424d58636e78828c96a0a9aba29a928a837d77736f6c69686766666768696b6e72767b81888f979fa8ada49b91887e73695e53493d32271c100500000000000000000000000000000000000000000000000e1b2834404c58636c6e6e6e6e6e6e6e6e6b63584c4034271b0e0100000000000000000000000000000000000000000000000000131f2c3946525f6b7679797979797979797979797979797979797979797979787776757472706d6a6764605c58534e49433d363029221a130b02000000000000000000000000000000000000030d17212b343c454d555c63696f74797d8185888a8c8e909192929292929291908f8e8c8a8785817d79746e68625b534b423930271d13090000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acada09386796d6053463a2d2013070000000000000000000000000000000000000000101d2a3643505d6976838f9ca9b1a5988b7e7265594c4033261a0d0100000000000000000000000000000000000000000004111d2a3643505c6976828f9ca8b2a5988c7f7266594c4033261a0d000000000000000000000000000000000009141f2b36424e5a65717d8995a1a89c9084786d6155493d3125190d020000000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000111e2a3744505d6976838f9ca8ada194887c7064584d443c373431302f2e2e2d36424e5b6773808c99a5b2a6998c7f7265594c3f3226190c000000000000000000030f1c28343f4b555d6364656667696a6b6c6b63594e454647484949494a4a4a4a4a56636f7c8996a2afa5988c7e7265584c3f3225190c000000000000000013202c3946535f6c798693a0aca194887b6e6154483b35404b56616b76818c97a1aba1968b80756b60554a3f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000d1925323e4a57636f7b8894a0a5998d8074685b4f43362a1e110500000000000000000000000000000000000000040b12191e24313e4a5764717d848484847c746b635b534a423f3c3936322d28231d161008010000000000000000000000000000000000000009131c252c3237393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393936322b241b11070000000000000000050a0e1113131313131313131313120f0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000000020e1a26313d48535f6a75808a949ea8ada39990888078726c67635f5d5b5a59595a5b5d5f62666b70767d858d959ea8ada39a8f857b70655a4f44382d21150a0000000000000000000000000000000000000000000000101c2936434f5c69757b7b7b7b7b7b7b7b74685c4f4235291c0f0300000000000000000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6b6a68676563615e5b5854504c47423d37322b251e171008010000000000000000000000000000000000000000050f19222a333b434a51585e63686d7175787b7d8082838485868686868585848381807d7b7875716d68635d575049413930271e150b010000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0acaca09386796d6053463a2d2013070000000000000000000000000000000000000000111e2b3844515e6a7784919daab0a3978a7d7164574b3e3125180b00000000000000000000000000000000000000000000010f1c2835424e5b6874818e9ba7b3a69a8d8173675a4d4134271b0e000000000000000000000000000000000004101c27333f4b57636e7a8693a0aca195897d7165594e42362a1e12060000000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e0100000f1c2835424e5b6773808c99a5b0a4988c8075695f564e4743403e3d3c3b3a3a3a3f4b5764717d8a97a3b0a6998c7f7265594c3f3226190c00000000000000000005121e2b3844505c676f7172737475777879756a5e5145393a3b3c3c3c3d3d3d3e4b5864717d8a97a4b0a4988b7e7165584b3e3225180b000000000000000013202c3946535f6c798693a0aca194887b6e6154483b3c47525d67727d88939da8a59a8f84796f64594e43393c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000916222e3b47535f6c7884919da99c9084776b5f52463a2d211508000000000000000000000000000000000000000001070d1724313d4a57636f7a848e918e867d756d655c544c443c332b26211c17110b05000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a26201a1209000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a0000000000000000000000000000000000000000000007131f2b36424e5965707b86919ca6b0a59b91877e766e67605b5753504e4d4d4d4d4e5053565a5f656b737b838c96a0aaaba1978c82766b6055493e32261a0e0300000000000000000000000000000000000000000000101c2936434f5c6976838888888888888275695c4f4236291c0f03000000000000000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5e5d5c5a595654524f4b4844403b37312c26201a130d0500000000000000000000000000000000000000000000000710182129313940464d52585d6165696c6f71737576777879797979787877767473716e6c6965615c57524c453e372f271e150c03000000000000000013202c3946535f6c798693a0a0a0a09386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693a0a0a0a09386796d6053463a2d2013070000000000000000000000000000000000000000121f2c3845525f6b7885929eabafa296897c6f6356493d3023170a00000000000000000000000000000000000000000000000e1a2734414d5a6773818d9aa6b3a79b8e8174685b4e4235281b0f00000000000000000000000000000000000915202c3844505c67737f8b97a3afa59a8e82766a5e52463a2e22170b0000000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e0100000d1a26333f4b5864707c8995a0aca89d91867b71685f59534f4d4b494848474747464956626f7c8995a2afa6998c7f7265594c3f3226190c0000000000000000000613202c3946535f6c787d7e808182838486796c6053473b302f2f3030303036424e5a6773808c99a5afa396897d7063574a3d3124170b000000000000000013202c3946535f6c798693a0aca194887b6e6154483b434e58636e79848f99a4a89e93887d73685d52473d323c4855626f7b8895a2ada09386796d6053463a2d201307000000000000000006121f2b3743505c6875818d9aa6a093877a6e6256493d3124180c000000000000000000000000000000000000000000000916222e3b47535e68727c8791988f877f766e665e564e453d352d241c140c040000000000000000000000000000000000000000000000010910161a1e1f2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201f1d1a150f0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a000000000000000000000000000000000000000000000b17232f3b47535e6a76818d98a3ada99e93897f756c645c554f4a474442414040404244464a4e545a6169717a848e98a3ada99e93887c71665a4e43372b1f130700000000000000000000000000000000000000000000101c2936434f5c69768390959595958f8275695c4f4236291c0f03000000000000000000000000000000000000000000000000000a16212c3740484f52535353535353535353535353535353535353535353535251504f4e4c4a4845423f3c38342f2b26211b150f090200000000000000000000000000000000000000000000000000060f171f272e353b41474c5155595c5f62646668696b6b6c6c6c6c6b6b6a69686664625f5c5955514c46413a342d251d150c0300000000000000000013202c3946535f6c798693939393939386796c5f5346392c2013060000000000000000000000000613202c3946535f6c798693939393939386796d6053463a2d2013070000000000000000000000000000000000000000131f2c3946525f6c7986929facafa295887b6f6255493c2f22160900000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3a89b8f8275685b4f4235281c0f00000000000000000000000000000000020d1925313d4954606c7884909ca7b3aa9e92867a6e63574b3f33271b0f0300000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e0100000a17232f3c4854606c7884909ba6aea2988d837a716a645f5c5957565554545353535355626f7b8895a2afa6998c7f7265594c3f3226190c00000000000000000006121f2c3845525e6b77848b8d8e8f9091887c6f63574c413c39373737383a3f47525e6a76828f9ba8ada094877b6e6255483c2f231609000000000000000013202c3946535f6c798693a0aca194887b6e6154483f4a545f6a75808b95a0aba2978c81766c61564b41362f3c4855626f7b8895a2ada09386796d6053463a2d2013070000000000000000030f1b2834404c5965717e8a96a3a3978a7e7265594d4034281b0f0300000000000000000000000000000000000000000006121f2b36414c56606a757f8993999189817870685f574f473f362e261e160d05000000000000000000000000000000000000000000000000050a0e111313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313110e09040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a000000000000000000000000000000000000000000020f1b27333f4b57636f7b87929ea9aea3978c82776d635a524a443f3a37353433333435373a3e42484f575f68727c86919ca7afa4998e82766b5f53473b2f23170b00000000000000000000000000000000000000000000101c2936434f5c697683909ca2a29c8f8275695c4f4236291c0f030000000000000000000000000000000000000000000000000005101a252e373e43464646464646464646464646464646464646464646464645454442413f3d3b3936332f2c28241f1a15100a0400000000000000000000000000000000000000000000000000000000050d151c232a30363b4045494d505356585a5b5d5e5f5f5f5f5f5f5e5d5d5b5a585553504d4945403b352f29221b130b030000000000000000000013202c3946535f6c798686868686868686796c5f5346392c2013060000000000000000000000000613202c3946535f6c798686868686868686796d6053463a2d201307000000000000000000000000000000000000000013202c3946535f6c7986929facaea295887b6e6155483b2f22150800000000000000000000000000000000000000000000000d1926333f4c5966727f8c99a6b2a99c8f8275695c4f4236291c0f0000000000000000000000000000000006121e2a36414d5965717d8994a0acb8afa3978b7f73675b4f43382c20140800000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e0100000713202c3844505c67737e8a949fa9a99f958c837c75706b686664636261616060605f5f626f7b8895a2afa6998c7f7265594c3f3226190c00000000000000000004111d2a36434f5c6874818d999a9c9d988c8074685d534c484644444444464a5059646f7a86929faba99d9185786c5f53463a2d211408000000000000000013202c3946535f6c798693a0aca194887b6e61544846505b66717c87919ca7a69b90857a70655a4f453a2f2f3c4855626f7b8895a2ada09386796d6053463a2d2013070000000000000000000c1824303d4955626e7a87939fa69a8e8175695c5044372b1f1206000000000000000000000000000000000000000000020e1a25303a444e59636d77818b969b928a827a716961595148403830281f170f070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000006121e2b37434f5c6874808c97a3afa99d92867b70655b51484039332e2b2927262627282a2e32373d454d56606a74808b96a1adaa9f93877b6f64574b3f33271b0e020000000000000000000002070a0b0c0c0c0c0c0c0c101c2936434f5c697683909ca9a99c8f8275695c4f4236291c0f0c0c0c0c0c0c0c0b0a07020000000000000000000000000000000009131c252c32373939393939393939393939393939393939393939393939393837363433312f2c292623201c18130e090400000000000000000000000000000000000000000000000000000000000000030b12181f252a3034393d404447494b4d4f50515252525352525151504f4d4b494644403d39342f2a241e171009010000000000000000000000131f2c3946525f6b767979797979797979766b5f5246392c1f130600000000000000000000000006131f2c3946525f6b767979797979797979766b5f5346392d201306000000000000000000000000000000000000000013202c3946535f6c798693a0acaea295887b6e6155483b2e22150800000000000000000000000000000000000000000000000c1926323f4c5965727f8c99a6b2a99c8f8275695c4f4236291c0f000000000000000000000000000000000b17232f3a46525e6a76828d99a5b1b1b2a79b9084786c6054483c3024180c01000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000030f1c28333f4b56626d78838d97a0a9a79e958d87817b787572716f6e6e6d6d6d6d6c6c6c6f7b8895a2afa6998c7f7265594c3f3226190c000000000000000000010e1b2733404c5965717d8995a1a8a89c90857a6f655d5854525150505153565b626b75808c97a3afa5998d8175695c5044372b1e1205000000000000000013202c3946535f6c798693a0aca194887b6e6154484c57626d78838d98a3aa9f94897e74695e53493e33282f3c4855626f7b8895a2ada09386796d6053463a2d2013070000000000000000000815212d3946525e6b7783909ca89d9185786c6053473b2e2216090000000000000000000000000000000000000000000008131e28323d47515b656f7a848e989c948c847b736b635a524a423a31292119100700000000000000000000000000000000000000000000000000000000000000000000010407090a0b0c0c0c0c0b0a080604010000000000000000000000000305060707070605040200000000000000000000000000000000000000000000000000000000000000000000040608080808080808080806040000000000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a0000000000000000000000000000000000000000000915222e3a47535f6c7884909ca8b0a4988c8175695e54493f362e27221e1c1a1a1a1a1c1e21262c333b444e58636e7985909ca8b0a4988c8074685b4f43372a1e1105000000000000000001080e13161819191919191919191c2936434f5c697683909ca9a99c8f8275695c4f4236291c19191919191919191816130e08010000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b2a2928262422201d1a1713100b07030000000000000000000000000000000000000000000000000000000000000000000000070d14191f24282d3134373a3d3f4142434445464646464545444342403e3c3a3734302d28241e19130d0600000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6b645a4f43372a1e110500000000000000000000000005111e2a37434f5a646b6c6c6c6c6c6c6c6c6b645a4f43372b1e12050000000000000000000000000000000000000000131f2c3946525f6c7986929facaea295887b6f6255483c2f22150900000000000000000000000000000000000000000000000d192633404c596673808c99a6b2a89c8f8275685c4f4236291c0f00000000000000000000000000000004101c27333f4b57636e7a86929eaaa7a4a5aaa094887c7064584d4135291d1105000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000000b17232e3a45515c66717b858e979fa6a79f98928c8884817f7d7c7b7b7a7a7a79797979787b8895a2afa6998c7f7265594c3f3226190c000000000000000000000b1824303d4955616d7985909ba7ada1968b81776f6964615f5e5d5d5e5f62676d747d87929da8aba094897d7165594d4034281b0f03000000000000000013202c3946535f6c798693a0aca194887b6e615448535e69747e89949faaa3988d83786d62574d42372c222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000005111d2a36424f5b6774808c98a5a194887b6f63574a3e3225190d00000000000000000000000000000000000000000000020c16212b353f49535e68727c86909b9e958d857d756c645c544b433b332b22190f0500000000000000000000000000000000000000000000000000000000000002060a0e11131517181919191818161513100d0a0602000000000001060a0d0f11131313131312100f0d0a070300000000000000000000000000000000000000000000000000000000060b101315151515151515151513100b06000000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a0000000000000000000000000000000000000000000b1824313d4a56626f7b8894a0acaca094887c7064584d42372d241c16120f0e0d0d0e0f12151b2129323c47525d6874808b97a4b0a89c9084776b5f52463a2d21140800000000000000030b13191f22252525252525252525252936434f5c697683909ca9a99c8f8275695c4f42362925252525252525252525231f1a130c030000000000000000000000000000010910161a1e1f202020202020202020202020202020202020202020201f1e1e1c1b19181513110e0b070300000000000000000000000000000000000000000000000000000000000000000000000000000002080e13181c2124282b2e303234353738383939393939383736353432302d2b2824201c18130d080200000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5a52483e32261a0e02000000000000000000000000020e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5a52493e33271b0f020000000000000000000000000000000000000000121f2c3945525f6b7885929fabafa295897c6f6256493c2f23160900000000000000000000000000000000000000000000000d1a2734404d5a6673808d9aa6b3a89b8e8275685b4f4235281c0f0000000000000000000000000000000914202c3844505c67737f8b97a3a59c9799a0a5998d8175695d5145392d22160a000000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e0100000006121d29343f4a555f69737c858d959ba1a6a39d9894908e8c8a8988888787878686868685858a96a2afa6998c7f7265594c3f3226190c000000000000000000000814202c3945505c68737f8a959fa9a89d938a817a74706d6b6a6a6a6a6c6f72787e868f99a3aea4998e83786c6054483c3024180c00000000000000000013202c3946535f6c798693a0aca194887b6e61544f5a65707a85909ba6a79c91877c71665b50463b3025222f3c4855626f7b8895a2ada09386796d6053463a2d201307000000000000000000010e1a26333f4b5864707c8995a1a4988b7f73665a4e4135291c100400000000000000000000000000000000000000000000050f19232d37414c56606a747e89939d9f978f877e766e665d554d453d342b21160b0000000000000000000000000000000000000000000000000000000003080e12161a1d20222425252626252423211f1c1916120d09030001070d1216191c1e1f202020201f1d1b1917140f0a03000000000000000000000000000000000000000000000000010a11171c1f2122222222222222211f1c1711090100000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a0000000000000000000000000000000000000000000d1a2733404c5965727e8b97a3b0a99d9084786c5f54483c31261b120b06030000000002050a1017202a35404c57636f7b8794a0acaca093877b6e6255493c3023170a000000000000020c151d242a2f313232323232323232323236434f5c697683909ca9a99c8f8275695c4f423632323232323232323232312f2b251e150c02000000000000000000000000000000050a0e111313131313131313131313131313131313131313131313121211100e0d0b09070401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070c1015181c1e21232627292a2b2c2c2c2c2c2c2b2b2a28272523211e1b1814100c0702000000000000000000000000000000000a16212c3740484f525353535353535353524f4840372c21160a00000000000000000000000000000a16212c3740484f525353535353535353524f4940372c21160a000000000000000000000000000000000000000000121f2b3845515e6b7884919eabb0a3968a7d7063574a3d3024170a00000000000000000000000000000000000000000000000f1b2835414e5b6774818e9aa7b4a79a8e8174675b4e4134281b0e0000000000000000000000000000010d1925313d4854606c7884909ca79e938b8e98a49d9185796d62564a3e32261a0e020000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e01000000010c18232e38434d57616a737b838a90959a9ea2a4a09d9a9897969594949493939393929292949ca6b2a6998c7f7265594c3f3226190c0000000000000000000004101c2834404b57626e78838e98a1aaa59c938b85817d7a7877767777797b7e83899098a1aba59c92887d72665b5044382c20140800000000000000000013202c3946535f6c798693a0aca194887b6e615456616c76818c97a2aba0958b80756a5f544a3f34291f222f3c4855626f7b8895a2ada09386796d6053463a2d201307000000000000000000000a17232f3c4854616d7986929ea79b8f82766a5d5145382c201307000000000000000000000000000000000000000000000007111b25303a444e58626d77818b95a0a199908880786f675f574f463d33281c11050000000000000000000000000000000000000000000000000000070e14191e23262a2c2f30313232323231302e2c2926221e19140f090c12181d2226282b2c2d2d2d2c2b2a282623201b150e0600000000000000000000000000000000000000000000010b131b22282c2e2e2e2e2e2e2e2e2e2c28221b130a01000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a0000000000000000000000000000000000000000000f1c2835424e5b6774818d9aa6b3a69a8d8174685c4f43372b20140900000000000000000000050e19242f3b47535f6b7784909da9afa3968a7d7164584b3f3225190c00000000000009141e272f363b3e3f3f3f3f3f3f3f3f3f3f3f434f5c697683909ca9a99c8f8275695c4f423f3f3f3f3f3f3f3f3f3f3f3e3b362f271e140a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080c0f121517191b1c1d1e1f1f20201f1f1f1e1d1c1a191714120f0c08040000000000000000000000000000000000000005101a252e373e4346464646464646464646433e372e251a1005000000000000000000000000000005101a252e373e4346464646464646464646433e372e251b1005000000000000000000000000000000000000000000111e2a3744515d6a7784909daab1a4978b7e7165584b3f3225190c0000000000000000000000000000000000000000000003101d2936434f5c6975828f9ba8b3a6998c8073665a4d4034271a0d000000000000000000000000000006121e2a36414d5965717d8994a0a69a8e828894a0a2968a7e72665a4e42372b1f13070000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000000006111c27313b454f58616971787e858a8e9295989b9d9ea0a1a2a2a1a1a0a0a0a09f9f9f9fa0a5aeb2a6998c7f7265594c3f3226190c00000000000000000000000c18232f3a46515c67717c868f98a0a7a59d96918c8987858483838485878b8f949ba2aaa49c938a80766b60554a3f33271c100400000000000000000013202c3946535f6c798693a0aca194887b6e61545d68727d88939ea8a4998e84796e63584e43382d2318222f3c4855626f7b8895a2ada09386796d6053463a2d201307000000000000000000000713202c3845515d6976828e9ba79e9286796d6154483c2f23170a00000000000000000000000000000000000000000000000009141e28323c46515b656f79848e98a2a29a928a8179716960584f44392d211508000000000000000000000000000000000000000000000000030b12191f252a2f3336393b3d3e3f3f3f3f3e3c3a3835322e2a25201a14161d23292e323537393a3a3a3938363532302c2620180f0600000000000000000000000000000000000000000009131d252d33383b3b3b3b3b3b3b3b3b38332d251c1309000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a000000000000000000000000000000000000000000111d2a3743505d6976838f9ca8b1a4978b7e7265594c4033271b0f03000000000000000000000007131e2a37434f5c6874818d9aa7b2a5998c8073665a4d4034271a0e000000000004101b25303941474b4c4c4c4c4c4c4c4c4c4c4c4c4f5c697683909ca9a99c8f8275695c4f4c4c4c4c4c4c4c4c4c4c4c4c4b47413930261b1005000000000000000000000004080a0c0c0c0c0c0c0c0c0c0b0804000000000000000000000102030303020100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306080a0c0e0f11111213131313121211100f0e0c0a080503000000000000000000000000000000000000000000000009131c252c32373939393939393939393937322c251c13090000000000000000000000000000000009131c252c32373939393939393939393937322c251c130900000000000000000000000000000000000000000000101d2936434f5c6975828f9ba8b2a5998c8073665a4d4034271b0e0200000000000000000000000000000000000000000006121f2b3845515e6a7784909da9b1a4988b7e7265584c3f3226190c00000000000000000000000000000b17232e3a46525e6a75818d99a5a2968a7e84909ca69a8f83776b5f53473b2f23170c0000000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e0100000000000a151f29333d464f575f666d73797e8286898c8e9092939495959696969696979797979899a0aab2a6998c7f7265594c3f3226190c000000000000000000000007121e2935404b55606a737d868e959ca2a7a29d99959392919090919294979ba0a5a6a09a928a81786e645a4f44392d22170b0000000000000000000013202c3946535f6c798693a0aca194887b6e6159646e79848f9aa4a89d92887d72675c52473c31271c15222f3c4855626f7b8895a2ada09386796d6053463a2d2013070000000000000000000004101c2935414d5a66727e8b97a4a295897d7064584b3f33261a0e010000000000000000000000000000000000000000000000020c16202a353f49535d67727c86909aa0a09c938b837b726a6155493d3124180b0000000000000000000000000000000000000000000000050d151d242a30363b3f4245484a4b4c4c4c4b4a494745423e3a36312b251f21282f353a3e414446464646464543413f3c38312a21180d030000000000000000000000000000000000000004101b252f373f44474848484848484847443f372e251a0f040000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a000000000000000000000000000000000000000000121e2b3845515e6b7784919daaafa296897c7063564a3d3124180b000000000000000000000000020e1b2733404c5965727e8b98a5b1a79b8e8175685b4f4235281c0f00000000000915212c37414b5257585858585858585858585858585c697683909ca9a99c8f8275695c5858585858585858585858585857534b42382d21160a000000000000000000030a0f14171919191919191919191714100a0300000205080a0c0d0e0f0f0f0f0f0e0d0b090705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2a26211a130a0100000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2a27211b130a01000000000000000000000000000000000000000000000f1b2835414e5a6774818d9aa6b3a79b8e8175685c4f43362a1d11050000000000000000000000000000000000000000000915212e3a4753606c7986929fabafa396897d7063574a3e3124180b0000000000000000000000000004101b27333f4b57636e7a86929eaa9e92867a808b97a39f93877b6f63584c4034281c100400000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000000000030e18212b343d454d555c62686d7276797d8082848586878888898989898a8a8a8a8a8b8e98a4b0a6998c7f7265594c3f3226190c0000000000000000000000010d18232e39434e58616b737c838a91969b9fa3a5a2a09e9d9d9d9d9fa0a3a5a29f9a958f8880786f665c52483d32271c11060000000000000000000013202c3946535f6c798693a0aca194887b6e61606a75808b96a0aba1968c81766b60564b40352a201515222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000000000d1925323e4a56636f7b8894a0a5998c8074675b4f42362a1d1105000000000000000000000000000000000000000000000000040e19232d37414b56606a747e899393939393938d857c7265584c3f3226190c00000000000000000000000000000000000000000000050e171f272e353c41464b4f5254565858595958575654514e4a46423c3730292b323a40464a4e50525353535251504e4b48433c33291f1409000000000000000000000000000000000000000a15212c37414950545555555555555554504940362c2115090000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a000000000000000000000000000000000000000000121f2c3945525f6b7885929fabaea194887b6e6155483b2f221509000000000000000000000000000b1824313e4a5764707d8a96a3b0a99c8f8376695c5043362a1d1000000000000d1925313d49535d636565656565656565656565656565697683909ca9a99c8f8275696565656565656565656565656565645d54493e32261a0d0100000000000000050d151b202425262626262626262524201b150e070b0e111416181a1b1c1c1c1c1c1b19181614110e0a0602000000000000000000000000000000000000000000000000000000000407080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080704010000000000000000000000000000000000010910161a1e1f20202020202020201f1e1a16100901000000000000000000000000000000000000010910161a1e1f20202020202020201f1e1b1610090100000000000000000000000000000000000000000000000d1a26333f4c5965727e8b98a4b1a99d9084776b5e5245392d2014080000000000000000000000000000000000000000000c1825313d4a56626f7b8894a1adada094877b6e6255483c2f231609000000000000000000000000000814202c3844505b67737f8b97a3a69a8e82767b87939fa4988c8074685c5044382d21150900000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000000000040d161e252b333b434a51575c61666a6d7073757778797b7b7b7c7c7c7d7d7d7d7d7d7e8895a2afa6998c7f7265594c3f3226190c00000000000000000000000007121d27323c464f59616a727980858a8f9396999b9c9e9e9f9f9f9e9d9b9996938e89847d766e665d544a40362c21160b000000000000000000000013202c3946535f6c798693a0aca194877a6d6166717c87929ca7a59a90857a6f645a4f44392f24190e15222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000000000916222e3b47535f6c7884919da89c9083776b5e5246392d2114080000000000000000000000000000000000000000000000000007111b252f3a444e58626c778186868686868686867f7265594c3f3226190c000000000000000000000000000000000000000000040e172029313940474d52575b5e616364656565656462605e5a56524d48423b34343c444b51565a5d5f6060605f5e5c5a58544e453b31251a0e020000000000000000000000000000000000020e1a26323d49535b6061616161616161605b52483d32261a0d0000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c7986929facada094877a6d6054473a2e211407000000000000000000000000000916232f3c4956626f7c8895a2afaa9d9084776a5d5044372a1d1100000000000f1c2835414e5a656f7272727272727272727272727272727683909ca9a99c8f82757272727272727272727272727272726f665a4e4235291c1003000000000000040e171f262c30323232323232323232302c27201713171b1e2123252628282929292827262423201d1a17130e0904000000000000000000000000000000000000000000000000060c10131515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151513110c07010000000000000000000000000000000000050a0e1113131313131313131313110e0a0500000000000000000000000000000000000000000000050a0e1113131313131313131313110e0a05000000000000000000000000000000000000000000000000000b1824313e4a5763707c8995a2aeac9f93877a6e6155493d3024180c010000000000000000000000000000000000000005111d2935414d5966727e8b97a3b0aa9e9185786c5f53463a2d211407000000000000000000000000010d1925313d4854606c7884909ba7a2968a7e7277838f9ba79c9085786d6155493d3125190d02000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e0100000000000b151f2830363b3d3e40464b51555a5d616466686a6c6d6e6e6f6f6f6f7070707071717b8895a2afa6998c7f7265594c3f3226190c000000000000000000000000000b16202a343d474f5860676e747a7e83878a8c8e90919292929291908f8c8a86827d78726b645c544b42382e241a0f04000000000000000000000013202c3946535f6c798693a0aca094877a6d626d78838e98a3a99e94897e73685e53483d32281d120915222f3c4855626f7b8895a2ada09386796d6053463a2d201307000000000000000000000006121f2b3743505c6875818d9aa69f93877a6e6255493d3024180b000000000000000000000000000000000000000000000000000009131e28323c46505b656f787979797979797979797165584b3f3225190c0000000000000000000000000000000000000000020c162029323b434b52585e63676b6d707172727271706f6d6a67635e59534d463e3d464e565c6266696c6d6d6d6c6b6967645f574d42362a1e1205000000000000000000000000000000000005111e2a36424e5a656d6e6e6e6e6e6e6e6c645a4e4236291d100000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201407000000000000000000000000000815222f3b4855616e7b8895a2aeaa9e9184776a5d5144372a1e110000000000101c2936434f5c69767e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e83909ca9a99c8f827e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e766a5d5044372a1d11040000000000010c16202931373c3f3f3f3f3f3f3f3f3f3c383129211f23272a2d2f31333435363636353433312f2d2a26231f1a15100a040000000000000000000000000000000000000000020a11181c2021222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222201d18120b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3b4854616d7a86929fabafa2968a7d7165594d4135291d1206000000000000000000000000000000000000000a16212d3945515d6975828e9aa6b3a79b8f8276695d5044372b1e120500000000000000000000000006121e2a35414d5965717c8894a0aa9e92867a6e727e8b97a3a195897d7165594d42362a1e1206000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000000007121d27313a41474a4b4c4d4f5051525354575a5c5e5f6061626262636363636363646f7b8895a2afa6998c7f7265594c3f3226190c00000000000000000000000000040e18222b353d464e555c63696e73777a7d8082838485858685848382807d7a76726d67615a524a423930261c120800000000000000000000000013202c3946535f6c798693a0aca09386796d69747f8a949faaa2988d82776c62574c41362c21160b0915222f3c4855626f7b8895a2ada09386796d6053463a2d2013070000000000000000000000030f1b2734404c5965717d8a96a3a3968a7d7165594c4034271b0f0200000000000000000000000000000000000000000000000000010c16202a343f49535d666c6c6c6c6c6c6c6c6c6c685f54483c3024170b000000000000000000000000000000000000000009141e28323b444d555c63696f73777a7c7e7e7f7f7e7d7b7976736e6a645e575049454f5860686e7376787979797977757370695e53463a2e21140800000000000000000000000000000000000815212d3946525e6b767b7b7b7b7b7b7b766a5e5144372b1e110000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110000000000101c2936434f5c6976838c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c949fabaa9e938c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c84776a5d5044372a1d1104000000000007121d28323b43484b4c4c4c4c4c4c4c4c49433b33292b2f3336393c3e40414242424242413f3e3c3936332f2b26211b150f08010000000000000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d29241d150d0300000000000000000004070808080808080808080808080808080808080808080808080808080807060503010000000000000000000000000000000000000000000000000000000000000407080808080808080808080704010000000000000000000713202c3945515e6a77838f9ca8b2a6998d8175695d51453a2e23180d02000000000000000000000000000000000006111c27323e4a55616d7985929eaab0a4988b7f73665a4e4135281c0f030000000000000000000000000b17222e3a46525e6a75818d99a5a69a8e82766a6e7a86929ea59a8e82766a5e52463a2e22170b000000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e01000000000c17232e39434c535758595a5b5c5d5f605f5a524f51525354555555565656565757626f7b8895a2afa5998c7f7265594c3f3226190c0000000000000000000000000000061019232b343c444b52575d62676a6e71737576777879797878777573716e6a66615c564f48403830271e140a0100000000000000000000000013202c3946535f6c798693a0aca09386796c707b86909ba6a69c91867b70665b50453a30251a0f050915222f3c4855626f7b8895a2ada09386796d6053463a2d2013070000000000000000000000000b1824303d4955626e7a87939fa69a8d8175685c5043372b1e12060000000000000000000000000000000000000000000000000000040e18222d37414b545c5f5f5f5f5f5f5f5f5f5f5d564d43382c2014080000000000000000000000000000000000000005101b25303a444d565f676e757a7f8386898a8c8c8c8b8a8886837f7a756f69625a524d57616a72797e8285868686858482807b6e6255483c2f22150900000000000000000000000000000000000c1824313d4955626e7a87888888888882766a5d5144372b1e110000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110000000000101c2936434f5c697683909898989898989898989898989898999da6b0b0a59d9998989898989898989898989898989084776a5d5044372a1d110400000000000c18232f3a444d54585959595959595958544d453b32373b3f4346494b4c4e4f4f4f4f4e4d4c4a4846423f3b36312c262019120b03000000000000000000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b39352f271f150b01000000000000060c101315151515151515151515151515151515151515151515151515151514141311100e0c090703000000000000000000000000000000000000000000000000060c10131515151515151515151513110c07010000000000000004101d2936424e5b6773808c98a4b0a99d9185796e62564b3f34291e140a01000000000000000000000000000000040e18222d38434f5a66727d8a96a2aeaca094887c6f63574a3e3225190d00000000000000000000000004101b27333f4b57626e7a86929eaaa2968a7e72656a76828e9aa69e92867a6e63574b3f33271b0f030000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e01000000030f1c2834404b555e6364666768696a6b6d6b64594e4446474848494949494a4a4a56636f7c8996a2afa5988c7e7265584c3f3225190c000000000000000000000000000000071019222a323940464c52565a5e616466686a6b6b6c6c6b6b6a686764615e5a55504a443d362f261e150c020000000000000000000000000013202c3946535f6c798693a0ac9f9286796c77828c97a2aaa0958a7f746a5f54493e34291e1309000915222f3c4855626f7b8895a2ada09386796d6053463a2d2013070000000000000000000000000814212d3946525e6b7783909ca89d9184786c5f53473a2e22150900000000000000000000000000000000000000000000000000000006111b252f39424a5053535353535353535353514c443b31261b1004000000000000000000000000000000000000000b16212c37414c565f68717880868b90939597989998989795928f8b86817b746c645c545e69737c848a8f9193939392918f887b6f6255483c2f22150900000000000000000000000000000000030f1b2834404c5965717e8a959595958b7f72665a4e4135291c100000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110000000000101c2936434f5c697683909c9e9e9e9e9e9e9e9e9e9e9e9e9e9fa2aab3b3aaa29f9e9e9e9e9e9e9e9e9e9e9e9e9e9d9084776a5d5044372a1d110400000000000f1c2834404b565f6465656565656565655f574d433d43474b4f525557595a5b5c5c5c5b5a595755524f4b47423d37312b241d150d05000000000000000000000000000006111c262f383f454848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484845403931271d120700000000020a11181c2021222222222222222222222222222222222222222222222222222221201f1e1c1b181613100c080400000000000000000000000000000000000000020a11181c2021222222222222222222201d18120b03000000000000010d1a26323f4b57636f7c8894a0acaea2968a7e73675c51463b30261c130a0300000000000000000000000000050d16202a343f4a55606b77838e9aa6b2a89c9084786c5f53473b2f22160a0000000000000000000000000814202c38444f5b67737f8b97a2aa9e9286796d6166727e8a96a2a3978b7f73675b4f43382c2014080000000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e0100000005121f2b3844505c676f7172737576777879766a5e5145393a3b3c3c3c3c3c3d3f4b5864717d8a97a4b0a4978b7e7165584b3e3225180b0000000000000000000000000000000007101820272e353b41464a4e5255585a5c5d5e5f5f5f676b6b6b6b6b675e544a453f39332c241d140c03000000000000000000000000000013202c3946535f6c798693a0ac9f928578737d88939ea9a4998e83786e63584d42382d22170d02000915222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000000000005111d2a36424f5b6773808c98a5a094887b6f63564a3e3125190c0000000000000000000000000000000000000000000000000000000009131d2730383f444646464646464646464644403a32291f150a0000000000000000000000000000000000000005111c28333e49535e68717a838a91979c9fa2a4a5a4a2a2a2a19f9b97928c867e766e655c65707b858e969b9ea0a0a09f9d95887b6f6255483c2f2215090000000000000000000000000000000006121f2b3743505c6875818d9aa2a094887b6f63564a3e3225190d0000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110000000000101c2936434f5c6976839092929292929292929292929292929298a2adada1989292929292929292929292929292929084776a5d5044372a1d11040000000000121e2b3844505c68707272727272727271695f554c494e53575b5f626466676869696868676563615e5b57534e49433c362f271f170f06000000000000000000000000000b17222d38424a5154555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555554514b43392f23180c000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2c2b292725221f1c1814100b0601000000000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2d29241d150d030000000000000a16232f3b47535f6b77848f9ba7b2a69b8f84786d62574c42382e251c150e0804000000000000000001050a10171f28323c46505b66717c88939fabafa3978c8074685b4f43372b1f13060000000000000000000000010d1925313d4854606c78848f9ba7a69a8d8275695d616d7986929ea79b8f84786c6054483c3024180c0100000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000000613202c3946535f6c797e7f818283848586796c6053473b302e2f2f2f303036424e5a6773808c99a5afa396897d7063574a3d3124170b0000000000000000000000000000000000060e161d242a30353a3e4246494b4d4f50515860697177777777777065584c3f342e28211a130b0200000000000000000000000000000013202c3946535f6c798693a0ab9e92857879848f9aa5a79d92877c72675c51463c31261b100600000915222f3c4855626f7b8895a2ada09386796d6053463a2d201307000000000000000000000000010e1a26333f4b5864707c8995a1a4978b7e72665a4d4135281c1004000000000000000000000000000000000000000000000000000000010b151e272e33373939393939393939393938342f2820170d03000000000000000000000000000000000000000a16222d39444f5a656f79838c959ca2a8a8a29d999796969697989b9e9d97908880776e656a76828c97a0a7aba39c97949394887b6f6255483c2f221509000000000000000000000000000000000916222e3b47535f6c7884919da99d9184786c5f53473b2e2216090000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110000000000101c2936434f5c69768385858585858585858585858585858586919da9a99c908685858585858585858585858585858584776a5d5044372a1d11040000000000131f2c3946525f6c797f7f7f7f7f7f7f7a71675e54545a5f64686b6e70727475757575757372706e6b67635f5a544e474039312921180f060000000000000000000000000f1b27333f4a545c616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161615d554b4034291d100400000a141d262e34383b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a39373634312f2c2824201c17120c0600000000000000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b3b39352f271f150b01000000000007131f2b37434f5b67737f8b96a2adaca0958a7e73695e544a40372e261f1914100c0a09080708090b0d11151b2229313a444e58626d77838e99a4b0a99e92877b6f63574b3f33271b0f03000000000000000000000006121e2935414d5965717c8894a0aca195897d7165595d6975828e9aa6a094887c7064584d4135291d110500000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e0100000006121f2c3845525e6b77848c8d8e8f9092887c6f63574c423c39383737383a3f48535e6a76838f9ba8ada094877b6e6255483c2f231609000000000000000000000000000000000000040b12191e24292e3236393c3f4149515a626a727a83848484807366594c4033261d161008010000000000000000000000000000000013202c3946535f6c798693a0aa9e918477808b96a1aca1968b80756b60554a40352a1f140a0000000915222f3c4855626f7b8895a2ada09386796d6053463a2d201307000000000000000000000000000a17232f3c4854606d7985929ea79b8e8276695d5144382c1f130700000000000000000000000000000000000000000000000000000000030c151c23282b2c2c2c2c2c2c2c2c2c2c2b28241e160e0500000000000000000000000000000000000000030f1b27323e4a55616c77818b959ea7ada49d96918d8a8989898a8c8e92969b9a928980766d6f7b87929ea9ada399918b888687887b6f6255483c2f221509000000000000000000000000000000000d1925323e4a56636f7b8894a0a69a8d8175685c5043372b1f12060000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000f1c2936424f5b68737878787878787878787878787878787883909ca9a99c8f827878787878787878787878787878787874685c5043362a1d10040000000000121f2b3844515d69737c868c8c8c8c8c837970665c5f656b6f74777a7d7f818282828282817e7d7a77736f6a655f59524b433b332a21180e040000000000000000000000121e2b37434f5b666d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d675c5145392c2013070006111c262f383f454848484848484848484848484848484848484848484848484848484747454442403e3b3834302c28231d17110a03000000000000000000000006111c262f383f454848484848484848484845403931271d12070000000000030f1b27333f4b57626e7a85919ca7b1a69b90857a70665c52494038312a25201c19171515141516171a1d21262c333b434c565f6a747e89949faaafa4988d82766a5e53473b2f23170b0000000000000000000000000b17222e3a46525e6975818d99a5a99d9185796d61555965717d8996a2a5998d8175695d5145392d22160a00000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e0100000004111d2a36434f5c6874818d999b9c9d988c8074685d544c484645444445474a5159646f7b87939faba99d9185786c5f53463a2d2114070000000000000000000000000000000000000001070d13191d22262a323a424b535b636c747c848c9190867b7165584c3f3326190c0500000000000000000000000000000000000013202c3946535f6c798693a0aa9d90837c87929da7a59a8f84796f64594e44392e23180e030000000915222f3c4855626f7b8895a2ada09386796d6053463a2d201307000000000000000000000000000713202c3845515d6976828e9ba79e9285796d6054483b2f23160a0000000000000000000000000000000000000000000000000000000000030a11171b1e202020202020202020201f1c18130c05000000000000000000000000000000000000000006131f2b37434f5b66727d88939da7ada49b928b85817e7c7c7c7d7f82868a8f959b92897f75727e8b97a3afa79c9187807b797a7c7b6e6255483c2f22150900000000000000000000000000000004101c2935414d5a66727e8b97a4a3968a7e7165594c4034281b0f030000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000e1a27333f4b5761696b6b6b6b6b6b6b6b6b6b6b6b6b6b6b75828f9ca9a99c8f82756b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6962574c4034281b0f020000000000101c2935414c57616a747e87919999958b82786e656b71767b8084878a8c8d8e8f8f8f8e8d8b898783807b76706a645d554d453c332a20160c020000000000000000000013202c3946525f6c777b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b796d6154473b2e211408000b17222d38424a51545555555555555555555555555555555555555555555555555554545352514f4d4a4744413d38332e28221c150e07000000000000000000000b17222d38424a5154555555555555555554514b43392f23180c0000000000000b17222e3a46525d6974808b96a1acaca1978c82786e645b524a433c36302c28252322212121222426292d32383e454d565e68717b86909ba5b0a89d92877c7065594e42362a1f13070000000000000000000000040f1b27333f4b56626e7a86929ea9a4998d8175695d5155616d7985919da99d9185796d62564a3e32261a0e02000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e01000000010e1b2733404c5865717d8995a1a9a89c90857a6f665e5855535151515153565b626b75818c97a3afa5998d8175685c5044372b1e1205000000000000000000000000000000000000000000020b131b232b343c444c545d656d757e868e9692887e74695f54493d3024170b0000000000000000000000000000000000000013202c3946535f6c798693a0a99c9083838e99a3a99e93887d73685d52483d32271c1207000000000915222f3c4855626f7b8895a2ada09386796d6053463a2d2013070000000000000000000000000004101c2935414d5a66727e8b97a4a195897c7064574b3f32261a0e01000000000000000000000000000000000000000000000000000000000000060b0f121313131313131313131312100c07010000000000000000000000000000000000000000000a16222f3b47535f6b77838e9aa5afa69b9289817a75716f6f6f7173767a7e848a919991877c75818e9aa7aea2968a7f756f6d6d6f70695e53463a2d2114080000000000000000000000000000000713202c3845515d6976828e9ba79f93877a6e6255493d3024180c000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000b17232f3a454f575d5e5e5e5e5e5e5e5e5e5e5e5e5e5e6975828f9ca9a99c8f8275695e5e5e5e5e5e5e5e5e5e5e5e5e5e5d5850463b3024180c0000000000000c1824303b454f58626c757f89929c9d948a80766e757c82878c909396989a9b9c9c9c9b9a989693908c87827c756e675f574e453c32281e140a0000000000000000000013202c3946535f6c7986888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888887b6e6154483b2e211508000f1b27333f4a545c61616161616161616161616161616161616161616161616161616161605f5d5b595754504d49443f3a342d27201811090000000000000000000f1b27333f4a545c616161616161616161615d554b4034291d1004000000000006121e2935414c57636e79858f9aa5afa89e948a80766d645c544d47413c383532302f2e2e2e2f303336393e434950575f68707a838d98a2acaca2978c81766b5f54483d31251a0e0200000000000000000000000814202c38444f5b67737f8b96a2aca094887c7064584c515d6975818d99a5a2968a7e72665a4e42372b1f1307000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e01000000000b1824303c4955616d7884909ba6ada1968b81786f6964615f5e5d5d5e6063676d747d87929da8ab9f94887d7165594c4034281b0f030000000000000000000000000000000000000000040c141d252d353d464e565e666f777f879098958b81766c62584d43382c2014080000000000000000000000000000000000000013202c3946535f6c798693a0a99c90858a959faaa2978c82776c61564c41362b20160b00000000000915222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000000000000000d1925313e4a56636f7b8894a0a5988c8073675b4e4236291d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323e4a57636f7b88949fabab9f948a80766f69656362636466696e737980878f978e847983909da9ab9e92867a6e63606163635f574d42362a1e12050000000000000000000000000000000a17232f3c4854606d7985929ea89c9083776b5e5246392d211408000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000a16222d38434c54595b5b5b5b5b5b5b5b5b5b5b5b5b5c6975828f9ca8a99c8f8275695c5b5b5b5b5b5b5b5b5b5b5b5b5b5a554d44392e22170b00000000000008131e29333d46505a636d76808a949d9c92897f7980878d93989ca0a3a3a09f9e9e9e9fa1a3a29f9c98938d878079716960574e443a30261b110600000000000000000013202c3946535f6c7986939595959595959595959595959595959595959595959595959595959595959595959595959595959595959594887b6e6154483b2e21150800121e2b37434f5b666d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d6d6b6a686663605d5955504a453f38312a231b120a0100000000000000121e2b37434f5b666d6e6e6e6e6e6e6e6e6d675c5145392c2013070000000000010d1924303b46525d68737e89939ea8b0a69c928980766e665f58524d4844413f3d3b3b3a3b3c3d3f4245494e545a6169717a838c959fa9afa59a90857a6f64594e43372c2015090000000000000000000000010d1925313c4854606c78848f9ba7a79b8f84786c6054484d5965717d8995a1a69a8f83776b5f53473b2f23170c000000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e01000000000814202c3844505c68737e8a959fa9a89d938a817a75716e6c6b6a6a6b6c6f73787e879099a3aea3998e83776c6054483c3024180c0000000000000000000000000000000000000000050e161e262e373f474f586068707881899199978d83796e645a50463c31271b10040000000000000000000000000000000000000013202c3946535f6c798693a0aca19791939ca6a69b90867b70655a4f453a2f241a0f0400000000000915222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000000000000000916222e3a47535f6c7884919da89c8f83776a5e5245392d20140800000000000000000000000003090d0f111111111111100e0b06000000000000050a0d10111111111111100d0a050000000000000000000000000000000000000000000000000f1b2834414d5a66737f8b98a4b0a69a8e83786d645d58565556575a5d62676e757d858e958a8085919eaba89c8f83766a5d53545657544d453b30251a0e020000000000000000000000000000010e1a26333f4b5764707c8995a1a5988c8074675b4f42362a1d1105000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000d1a26323e4a555f6567676767676767676767676767676875828f9ca8a99c8f8275696767676767676767676767676767665f554a3f33271a0e010000000000020d17212b343e48515b656e78828b959f9b9187838b92999ea4a39e9a9694929191929394979a9ea4a39e98928b837b726960564c42382d22170c01000000000000000013202c3946535f6c798693a0a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a194887b6e6154483b2e2115080013202c3946525f6c777b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a7978777572706d6965605b56504a433c342d241c130a0100000000000013202c3946525f6c777b7b7b7b7b7b7b7b796d6154473b2e21140800000000000008131e2a35404c57616c77818c96a0a9aea49b92898078716a635e5854504d4b4948484748484a4c4e51555a5f656c737b838c959ea7b0a69d93897e74695e53483d32261b0f04000000000000000000000006121e2935414d5965707c8894a0aca3978b7f73675b4f434955616d7985919da99f93877b6f63584c4034281c10040000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000000004101c2834404b57626d78838d97a1a9a59c938c86817d7a7977777777797b7f84899099a2aba59c92877d72665b4f44382c20140800000000000000000000000000000000000000060f172028303840495159616a727a828a939b9a90857b71675d52483e342a20150a000000000000000000000000000000000000000013202c3946535f6c798693a0aca9a19d9fa5aa9f948a7e74695e53493e33281e13080000000000000915222f3c4855626f7b8895a2ada09386796d6053463a2d201307000000000000000000000000000006121e2b3743505c6875818d9aa69f93867a6e6155493c3024170b0000000000000000000000080f14191c1e1e1e1e1e1e1d1a17110b030000020910161a1c1e1e1e1e1e1e1c1a1610090200000000000000000000000000000000000000000000101d2a3643505c6975828e9ba7aea296897d72665c524c4949494b4d51565c636b737c858f918788939faca79a8d8174675b4e474a4a48433b33291f140900000000000000000000000000000005111d2a36424e5b6773808c98a5a195897c7064584b3f33261a0e01000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000f1c2835424e5a667174747474747474747474747474747475828f9ca8a99c8f827574747474747474747474747474747471675b4f4236291d1003000000000000050f19222c363f49535c667079838d96a099918e959ca3a69f98928e8a878584848586888a8e93989ea5a39c958d847b72685e54493f34291e1207000000000000000013202c3946535f6c798693a0acaeaeaeaaa6a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a194887b6e6154483b2e2115080013202c3946535f6c79868888888888888888888888888888888888888888888888888887868583817f7c7975716c67615b554e463f362e251c130900000000000013202c3946535f6c7986888888888888887b6e6154483b2e211508000000000000020d19242f3a45505b65707a848e97a1aaada49b928a827b756e6964605d5a5856555454545556585b5e61666b70777e858d959ea7b0a79e948b81776c62574c42372b20150a0000000000000000000000000b16222e3a46525d6975818d99a5aa9e92867a6e63574b3f44505c6975818d99a5a4988c8074685c5044382d2115090000000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e0100000000000c17232f3a46515c67717b858f979fa6a59e97918d8987858484848486888b8f959ba2aba49c938a80756b60554a3e33271c1004000000000000000000000000000000000000030e172129323a424a525b636b737b848c949c9c92887e73695f554b41362c22180e03000000000000000000000000000000000000000013202c3946535f6c798693a0acb3adaaabaea3988d83786d62574d42372c22170c010000000000000915222f3c4855626f7b8895a2ada09386796d6053463a2d2013070000000000000000000000000000020f1b2734404c5965717d8a96a2a2968a7d7165584c4033271b0f020000000000000000000912192025292a2a2a2a2a2a2a27221c150d04020b141b2126292a2a2a2a2a2a2926211b140b02000000000000000000000000000000000000000000121e2b3845515e6b7784919daaac9f9286796d61554a413d3c3d3e41454b5259616a737d879292939aa4afa6998c807366594c403d3d3b37312a21170d030000000000000000000000000000000814212d3946525e6a77838f9ca89e9285796d6154483c2f23170a00000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110000000000101c2936434f5c697681818181818181818181818181818181828f9ba8a99c8f8381818181818181818181818181818181776a5d5044372a1d11040000000000000007101a242d37414a545e67717b858e98a19c9b9fa7a59c948d87827e7b79787778797b7e82878d949ba4a79f968d847a70655b50453a2f24180d010000000000000013202c3946535f6c798693a0acb7b4a9a09998989898989898989898989898989898989898989898989898989898989898989898989894887b6e6154483b2e2115080013202c3946535f6c798693959595959595959595959595959595959595959595959594949392908e8b8985817d78736d665f58504840372e251b1107000000000013202c3946535f6c7986939595959594887b6e6154483b2e2115080000000000000007131e29343e49535e68727c858f98a0a9ada49c948d86807a75706c6966646362616161626365676a6e72767c82888f979fa7afa69e958c83796f655a50463b30251a0f040000000000000000000000030f1b27333f4b56626e7a86929ea9a69a8e82766a5e52463a404c5864707c8995a1a89c9084786d6155493d3125190d0100000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e01000000000007121e29343f4a555f69737c858d959ca1a7a29d99969492919090919294979ba0a6a5a099928a81786e64594f44392d22160b0000000000000000000000000000000000000009151f29333b444c545c646d757d858e969e9f958a80766c62574d43392f251a100600000000000000000000000000000000000000000013202c3946535f6c798693a0acb9b9b7b2a79c91877c71665b51463b30261b1005000000000000000915222f3c4855626f7b8895a2ada09386796d6053463a2d2013070000000000000000000000000000000b1824303d4955626e7a87939fa6998d8174685c4f43372a1e1206000000000000000008121b242b313537373737373736332e271f160d0b141d252c323637373737373736322c251d140b000000000000000000000000000000000000000000131f2c3946525f6c7885929fabaa9d9184776b5e514539302f3032353a40474f58616b75808b969fa4acb2a6998c7f7265594c3f32312f2b261f180f05000000000000000000000000000000000b1824303d4955616e7a87939fa79b8e8276695d5145382c20130700000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110000000000101c2936434f5c6976838e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e949faaab9f958e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e84776a5d5044372a1d1104000000000000000008121b252f38424c555f69727c868f9aa5a8aba69c938a827b76716e6c6b6b6b6c6f72767b8289929ba4a89f968c82776c62574b4035291e12060000000000000013202c3946535f6c7986919ba5b0b0a4988e8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b887b6e6154483b2e2115080013202c3946535f6c798693a0a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a1a0a09e9d9a9895918d89847e78716a625a524940372d23190e040000000013202c3946535f6c798693a0a2a2a194887b6e6154483b2e21150800000000000000010c17222d37424c56606a737c868e979fa7aea69f98918b86817c797673716f6e6e6d6e6f707174767a7e82878d939aa1a9aca59d948c837a70675d53493e34291e14090000000000000000000000000814202c38434f5b67737e8b96a2ada195897d7165594e42363c4854606c7885919da9a195897d7165594d42362a1e120600000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000000000010d18232e39434e58616a737b838a90969b9fa2a5a2a09f9e9d9d9e9fa1a4a5a29e9a948e8880786f665c52483d32271c1105000000000000000000000000000000000000030f1a26313b454d555e666e767e878f979fa1978d83786e645a50463b31271d13080000000000000000000000000000000000000000000013202c3946535f6c798693a0acacacacaba0958b80756a5f554a3f342a1f140900000000000000000915222f3c4855626f7b8895a2aca09386796d6053463a2d2013070000000000000000000000000000000814212d3946525e6a77838f9ca89d9084786b5f53463a2e2115090000000000000005101a242d363c41444444444444433f3931281f14121c262f373e42444444444444423e372f261c1207000000000000000000000000000000000000000013202c3946535f6c798693a0acaa9d908376695d5043372a222325292e353d464f59636e7984909ba7b3b2a6998c7f7265594c3f3226231f1b150e0600000000000000000000000000000000020f1b2734404c5965717d8a96a2a4978b7e72665a4d4135291c100400000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110000000000101c2936434f5c697683909b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9fa6b0b1a79f9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9084776a5d5044372a1d110400000000000000000009131d26303a434d57606a747d8a96a3b0aa9f948a8178716a65625f5e5e5e6062666a70778089929ca6a89e93897e73685d51463a2e23170b00000000000000131f2c3945525e6a75808a949ea8aea295887e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7a6e6154483b2e2115080013202c3946535f6c798693a0acaeaea8a4a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a4a4a5a7a9a7a4a19d99948f89837c746c645b52493f352b20150b0000000013202c3946535f6c798693a0acaea194887b6e6154483b2e211508000000000000000006101b25303a444e58616a737c858d959da4aba9a39c97918d898582807d7c7b7a7a7b7b7c7e8083868a8e93999ea5aca8a29a938b837a71685e554b41372d22180d020000000000000000000000010d1925303c4854606c77838f9ba7a89c9185796d6155493d313844505c6874818c98a5a59a8e82766a5e52463a2e22170b00000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e0100000000000007121c27323c464f58616971787f858a8f9296989a9c9d9e9e9f9e9e9c9b9896928e89837d766e665d544a40362b21160b0000000000000000000000000000000000000007131f2b37424d575f67707880889199a1a4998f857b71675c52483e34291f150b010000000000000000000000000000000000000000000013202c3946535f6c798693a0a0a0a0a0a0998f84796e63594e43382d23180d0200000000000000000915222f3c4855626f7b8895a0a0a09386796d6053463a2d20130700000000000000000000000000000005111d2a36424e5b6773808c98a5a094877b6f62564a3d3125190c000000000000000a16212c3640474d5051515151514f4a433a31261b18242e3841494e5151515151514e4941382e24180d010000000000000000000000000000000000000013202c3946535f6c798693a0acaa9d908376695d5043372a1d16191d242b343d47525d68737f8a96a2aeb2a6998c7f7265594c3f322619130f0a03000000000000000000000000000000000006121e2b3743505c6874818d99a6a094887b6f63564a3e3225190d0000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110000000000101c2936434f5c697683909b9b9b9b9b9b9b9b9b9b9b9b9da3a8aab0b7b8b1aba8a49d9b9b9b9b9b9b9b9b9b9b9b9b9084776a5d5044372a1d1104000000000000000000010b141e28323e4955616c78838e99a5b1a89c8f82786f665f59555351515253565a5f666d76808a95a0aba59b9085796e62574b3f33271b0f03000000000000111d2a36424e59636d77828c96a0aaa4998e847a71717171717171717171717171717171717171717171717171717171717171717171717171695e5246392d2014070013202c3946535f6c798693a0acb2a79d9796969696969696969696969696969696969798999b9da0a3a7aaa5a09a948d867e766d645b51473c32271c110600000013202c3946535f6c798693a0acaea194887b6e6154483b2e21150800000000000000000009141e28323c464f58616a737b838b9299a0a6aba8a29d9995918f8c8a898887878888898b8d8f92969a9fa4aaa9a49d979089817970685f564c43392f251b100600000000000000000000000006121d2935414d5965707c8894a0aca4988c8074685c5044392d34404c5864707c8894a0aa9e92867a6e63574b3f33271b0f03000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e01000000000000000b15202a343d464f585f676e74797e8386898c8e8f919192929291908e8c8986827d78726b645c544b42382e241a0f04000000000000000000000000000000000000000916222f3b47535f697179828a929aa0a09c92887d73695f554a40362c22180e03000000000000000000000000000000000000000000000013202c3946535f6c79869393939393939393887d72675d52473c31271c11060000000000000000000915222f3c4855626f7b88939393939386796d6053463a2d201307000000000000000000000000000000010e1a26333f4b5764707c8995a1a3978b7e7266594d4134281c10030000000000030f1b27323e4852595d5d5d5d5d5d5b554c42372c201e2935404a535a5d5d5d5d5d5d5a534a4035291e120500000000000000000000000000000000000000131f2c3946525f6c7985929fabaa9d9184776b5e5145382c231e1c1a19222b36404b57626e7a86929eaab2a6998c7f7265594c3f3226190c03000000000000000000000000000000000000000915222e3a47535f6b7884909da99d9184786c5f53473a2e2216090000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110000000000101c2936434f5c6976838e8e8e8e8e8e8e8e8e8e8e8e8e919ba6b2aeababafb3a79b928e8e8e8e8e8e8e8e8e8e8e8e8e84776a5d5044372a1d11040000000000000000000006121e2a36424e5a66727d8994a0abb6aa9e93897f756c62584f46454445474a4e545c646e78838e99a5aca1968a7f73675b5044382b1f13070000000000000e1a26313d47515c66707a848e98a2aaa0968c82786e65656565656565656565656565656565656565656565656565656565656565656565645f574d41362a1e11050013202c3946535f6c798693a0acada1958c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b8c8e9093979ba0a6aca69f98908880766d63594e43392d22170b00000013202c3946535f6c798693a0a3a3a194887b6e6154483b2e211508000000000000000000020c16202a343d464f586169717981888e949aa0a5a9a9a5a19e9b99979695949494959697999c9fa2a6aba7a39e98928c857e776f675e564d443a31271d1309000000000000000000000000000a16222e3a46525d6975818d99a5ab9f93877b7064584c403428303c4854606c7884909ca8a3978b7f73675b4f43372c201408000000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e0100000000000000040e18222b343d464e555c63686e72767a7d7f81838485858585848382807d7a76716c676059524a42392f261c120800000000000000000000000000000000000000000a1724303d4a5663707b838b9393939393938a80766b61574d43392e241a100600000000000000000000000000000000000000000000000013202c3946535f6c7986868686868686868681766b61564b40352b20150a000000000000000000000915222f3c4855626f7b86868686868686796d6053463a2d201307000000000000000000000000000000000a17232f3b4854606d7985929ea79a8e8275695d5044382b1f1307000000000005121e2b37434f5a646a6a6a6a6a6a675e54483d3024212e3a46515c656a6a6a6a6a6a655c51463a2e21150900000000000000000000000000000000000000121f2b3845515e6b7784919daaac9f9286796d6154493d342e2b28272625242f3a46515d6976828e9ba7b2a6998c7f7265594c3f3226190c00000000000000000000000000000000000000000c1925313e4a56626f7b8794a0a69a8d8175685c5043372b1f12060000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110000000000101c2936434f5c697681818181818181818181818181818a97a4aba39e9ea3aca4978b8181818181818181818181818181776a5d5044372a1d1104000000000000000000000916222e3a46525e6a76828e9aa5b1b0aca59b91887e746a61574d443a383a3d424a525c67727d8994a0aca79b9084786c6054483c2f23170b0000000000000915202b36404a545e68727c86909aa5a89e948a80756b61585858585858585858585858585858585858585858585858585858585858585858544d453b3025190d010013202c3946535f6c798693a0acaca093867d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7e808184878b8f959ba2aaaaa29a92887e756a60554a3f33281c1105000013202c3946535f6c7986939696969694887b6e6154483b2e21150800000000000000000000040e18222b343d464f575f676f767d83898f94999da1a4a8aaa8a5a4a2a1a1a1a1a2a2a4a6a8a9a6a3a09c97928d87817a746c655d554c443b32281f150b01000000000000000000000000030f1b27333f4a56626e7a86929da9a79b8f83776b5f53473b2f242b3844505c6874808c98a4a79b8f84786c6054483c3024180c010000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000000000000000061019222b343c434b51575d62666a6d70737476777878787877767573706d6a66615b554f4840382f261d140a0000000000000000000000000000000000000000000a1724303d4a5763707d868686868686868682786e645a4f453b31271d120800000000000000000000000000000000000000000000000000131f2c3946525f6b76797979797979797979796f655a4f44392f24190e04000000000000000000000815222f3b4855616d7879797979797979766b5f5346392d201306000000000000000000000000000000000713202c3844515d6976828e9ba79e9185796c6054473b2f22160a00000000000714202d3a46535f6b7577777777777065594c40332723303d4956626e7777777777776e62564a3d3124180b00000000000000000000000000000000000000111d2a3643505c6975828e9ba7aea295897d71655a4f463f3a3735333232313135414d5a66727f8b98a4b1a6998c7f7265594c3f3226190c0000000000000000000000000000000000000003101c2835414d5966727e8b97a3a3968a7d7165594c4034271b0f030000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000f1c2835424e5a667174747474747474747474747478838e99a5a39992929aa4a69a8e847874747474747474747474747471675b4f4236291d1003000000000000000000000c1925313e4a56626f7b87939fabada59f9ea29a90867c73695f564c42392f3138404a55606c77838f9ba7aca094887c7064584b3f33271a0e020000000000040f19242e38424c56606a747e89939da7a69c92887d73695f554b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b48433c33291f1408000013202c3946535f6c798693a0acaca09386797070707070707070707070707070707070717375777b7f848a9098a0a9aca49a91877c71665b5044392d21150a000013202c3946535f6c79868a8a8a8a8a8a887b6e6154483b2e2115080000000000000000000000061019222b343d454d555d646b72787e83888d9195989b9ea0a1a3a4a5a5a5a5a5a4a2a19f9d9a9793908b86817b766f69625a534b433a322920160d03000000000000000000000000000814202c37434f5b67737e8a96a2aea2968a7e72665b4f43372b1f27333f4b5864707c8894a0aca094887c7064584d4135291d11050000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e01000000000000000000071019222a323940464c51565a5e616466686b6e6f70706f6c6a686664615e5a55504a443d362e261d140b020000000000000000000000000000000000000000000a1723303d4a56636f7879797979797979797970665c52483e33291f150b0100000000000000000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c675e53483d33281d120800000000000000000000000714202d3945515c666c6c6c6c6c6c6c6c6b645a4f43372b1e12050000000000000000000000000000000004101c2835414d5a66727e8b97a0a095887c7063574b3e32261a0d00000000000714212e3a4754606d79848484848174685b4f42362924303d4a5663707c848484847e7265594c4033271a0e010000000000000000000000000000000000000f1b2834414d5a66737f8b98a4b0a5998d82766b6158514b464442403f3e3e3e3e3e4a5763707d8a96a3b0a6998c7f7265594c3f3226190c0000000000000000000000000000000000000007131f2c3844505d6975828e9aa79f93877a6e6255493d3024180b000000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000d1a26323e4a555f656767676767676767676769747f8a95a0a89d928788939ea9a0958a7f746967676767676767676767665f554a3f33271a0e01000000000000000000030f1c2835414d5a66727e8b97a3afa69b939298a1988f857b71685e544b41372e2e39444f5b67737f8b97a3b0a5988c8074675b4f42362a1d110400000000000008121c26303a444e58626c77818b959fa9a3998f857b71675d53483e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3c38312a21170d02000013202c3946535f6c798693a0acaca09386796c636363636363636363636363636363646566686b6e73787e868e97a1abaca3988e83786c61554a3e32261a0e010013202c3946535f6c787d7d7d7d7d7d7d7d7a6e6154473b2e211408000000000000000000000000071019222b333c434b525a60676d72777c8185898c8f9193959697989898989897969492908e8b87837f7a76706a645e5750494139312820170e0400000000000000000000000000010d1924303c4854606c77838f9ba7a99e92867a6e62564a3e32261a232f3b47535f6b7884909ca8a4998d8175695d5145392d21160a0000000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000000000000000000007101820272e353b40454a505860676d73777a7c7d7d7b7975706a635c544d49443f39322b241c140b02000000000000000000000000000000000000000000000915222e3a47525d676c6c6c6c6c6c6c6c6c6c685f544a40362c22170d0300000000000000000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5c554c41372c21160b01000000000000000000000004111d2934404a545b5f5f5f5f5f5f5f5f5f5a52493e33271b0f0200000000000000000000000000000000000d1925313e4a56636f7b88939393938c8073675a4e4235291c10000000000006131f2c3845515e6a778390919083776a5e5145382c222f3b4854616d798691918d8174685b4f42362a1d11040000000000000000000000000000000000000c1925323e4a57636f7b87939fabaa9e93887d736a625c5753504e4d4c4b4b4a4a4a4a55626f7c8895a2afa6998c7f7265594c3f3226190c000000000000000000000000000000000000000a16232f3b4854606c7985919ea89c9083776a5e5246392d211408000000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000a16222d38434c54595b5b5b5b5b5b5b5b5b65707a86909ba6a1968b80828c97a3a69c91867b70655b5b5b5b5b5b5b5b5b5a554d44392e22170b0000000000000000000005121f2b3744505d6976828e9ba7aea2958a868f99a1978d837a70665d534940362c333f4a57636f7b8794a0ada89c9084776b5e5245392c201307000000000000000a141e28323c46515b656f79838d97a1aba1978d83796f645a50463c323232323232323232323232323232323232323232323232323231302c2620180f0500000013202c3946535f6c798693a0acaca09386796c5f565656565656565656565656565657585a5c5f62676d747c858f99a4afaa9f94897d72665a4e42362a1e110500121e2b3744505c676e70707070707070706f685d5145392d20130700000000000000000000000000071019212a323941484f555b61676c7075797c80828586888a8b8b8c8c8c8b8a89888684817e7b77736f6a655f59534c463e372f271f160e05000000000000000000000000000006121d2935414d5964707c8894a0aca5998d8175695d51463a2e22161f2b37434f5b6773808c98a4a99d9185796d62564a3e32261a0e0200000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000000000000000000000060e151d232a323d465059626a72787e8387898a898885817b756e665d544b41372e27211a120a02000000000000000000000000000000000000000000000006121e2a36414c555c5f5f5f5f5f5f5f5f5f5f5c564d43382e241a10060000000000000000000000000000000000000000000000000000000a16212c3740484f5253535353535353535353504b433a30251a0f05000000000000000000000000000c18232e38424a505253535353535353524f4940372c21160a0000000000000000000000000000000000000915222e3a47535f6c7884868686868683766a5d5144372b1e11000000000004101d2936424f5b6874818d9a9286796d6054473b2f222c3945515e6a7783909c9084776a5e5245392c2013070000000000000000000000000000000000000916222e3b47535f6b77828e99a4afa49a8f857c746d67635f5d5b595958575757575656626f7b8895a2afa6998c7f7265594c3f3226190c000000000000000000000000000000000000010d1a26323f4b5764707c8995a1a5988c8073675b4f42362a1d1105000000000000000000000000000000000000000000000000000f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170a00000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000005111c27313a43494d4e4e4e4e4e4e4e55606b76818c97a2a69b90857a7b86919ca7a2978c81766b61564e4e4e4e4e4e4e4d49433b32271d1106000000000000000000000814212d3a4653606c7885919eaaab9f92867d87919a9f958c82786f655b52483e352e3a47535f6b7884919daaac9f93867a6d6154483b2f22160900000000000000020c16202b353f49535d67717b858f9aa4a99f958b81766c62584e443a302625252525252525252525252525252525252525252525252523201b150e060000000013202c3946535f6c798693a0acaca09386796c5f534a4a4a4a4a4a4a4a4a4a4a4a4a4a4b4d4f52565c626a737d87929da9b1a69a8e83766a5e5246392d211408000f1c28343f4a555d626363636363636363635e564c4135291d11040000000000000000000000000000070f1820272f363d444a50565b6065696c707376787a7b7d7e7e7e7f7e7e7d7c7b797775726f6b67635e59544e48423b342d251d150d040000000000000000000000000000000a16222e3a46515d6975818d99a4aca094897d7165594d4135291d111b27333f4b57636f7b8894a0aca2968a7e72665a4e42372b1f130700000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e01000000000000000000000000040d18242f3a444e58626b747c848a8f9395969694918d8780786f665d53493f34291e130800000000000000000000000000000000000000000000000000020e19252f3a434b5053535353535353535353504b443b31271c12080000000000000000000000000000000000000000000000000000000005101a252e373e43464646464646464646464644403931281e1309000000000000000000000000000007121c2630383f43464646464646464646433e372e251b100500000000000000000000000000000000000006121e2b3743505c687479797979797979756a5d5144372b1e110000000000010e1a2733404c5965727e8b9795897c7063574a3e31252936424f5b6874818d9a93867a6d6154483b2f22160a00000000000000000000000000000000000006121e2b37434e5a66717d88929da7aba1978e867e78736f6c6967666565646464636363636f7b8895a2afa6998c7f7265594c3f3226190c00000000000000000000000000000000000004111d2936424e5b6773808c98a4a195897c7064584b3f33261a0e010000000000000000000004090b0d0d0d0d0d0d0d0d0d0d0d0d0f1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d3024170d0d0d0d0d0d0d0d0d0d0d0d0c0a070300000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110000000000000a151f2831383d40414141414146515c67727d88939ea8a0958a7e7475808b96a1a99e93887d72675c51464141414141413d38312920160b00000000000000000000000a16232f3c4955626e7b8894a1ada99c9083777e88929c9e948a81776d645a50473d333743505c6975828e9ba8aea295897c7063574a3d3124180b0000000000000000040f19232d37414b555f69737d88929ca6a79c92887e746a60564c42372d23191818181818181818181818181818181818181818181817140f0a03000000000013202c3946535f6c798693a0acaca09386796c5f53463d3d3d3d3d3d3d3d3d3d3d3d3e3f4043464b5158616b76818c98a4afab9f93877a6e6255493d3024170a000b17232e39434b5256565656565656565656534c443a2f24190d01000000000000000000000000000000060e161d242c32393f454a4f54585c606466696b6d6f7071727272727171706e6d6b6865625f5b57524d48423d373029221b130b03000000000000000000000000000000030f1b27333f4a56626e7a86919da9a89c9084786c6054483d3125190d17232f3b47535f6b77838f9ba8a69a8e83776b5f53473b2f23170c00000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e0100000000000000000000000007121e2a35404b56606a747d868e959b98959495979a98918a82786f655b50453a2f24180c000000000000000000000000000000000000000000000000000008131e2831393f444646464646464646464644403a32291f150a00000000000000000000000000000000000000000000000000000000000009131c252c3237393939393939393939393938342e271f160c020000000000000000000000000000000b141e262d333739393939393939393937322c251c130900000000000000000000000000000000000000020f1b2734404c57626a6c6c6c6c6c6c6c6b63594d4135291c100000000000000b1824313d4a56636f7c8895988b7e7266594d4034272733404c5965727e8b9795897c7063574b3e3225190c000000000000000000000000000000000000020e1a26323e4955606b76818b959ea6a9a098908a847f7b7876747372717171717070706f6f7b8895a2afa6998c7f7265594c3f3226190c0000000000000000000000000000000000000814202d3945525e6a76838f9ba89e9285796d6054483c2f23170a000000000000000000040b101518191a1a1a1a1a1a1a1a1a1a1a1a1c2835424f5b6875828f9ca8b0a4978a7d7063574a3d30241a1a1a1a1a1a1a1a1a1a1a1a1a1917130e08010000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000030d161f262d313434343437424d58636d78838e99a4a5998e83786d6e79848f9aa5a4998f84796e63584d423734343434312d271f170e0400000000000000000000000b1825313e4b5764707d8a96a3afa79a8e817476808a939d9c938980766c62594f453c34414d5a6673808c99a6b1a4988b7e7265584c3f3326190d00000000000000000007111b252f39434d57616c76808a949ea8a49a90867c72685d53493f352b21170d0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a07040000000000000013202c3946535f6c798693a0acaca09386796c5f5346393030303030303030303030313234363a3f464f5964707b87939facafa3968a7d7165584b3f3226190d0006121c2731394146494c4c4c4c4c4c4c4c4a47423a32281e13080000000000000000000000000000000000040b131a21272e34393f44484c5054575a5c5f6162636465656565656464646464615b56534f4b46423d37312b251e18100901000000000000000000000000000000000814202b37434f5b67737e8a96a2aea3978b8074685c5044382c201408131f2b37434f5b67737f8b97a3ab9f93877b6f63584c4034281c1004000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000000000000000000000000b17232f3b46515d68727c86909898918c8988888a8e949c948b81776d62574c4034291d110500000000000000000000000000000000000000000000000000010c161f272e34383939393939393939393938342f2820170d03000000000000000000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2b28231d150d0400000000000000000000000000000000020c141c22272b2c2c2c2c2c2c2c2c2c2a27211b130a0100000000000000000000000000000000000000000b17232f3b4650585e5f5f5f5f5f5f5f5e5951473c3125190d0000000000000915222e3b4754606d7986929a8e8175685c4f43362a24313d4a56636f7b8895988c7f73665a4d4134281b0f020000000000000000000000000000000000000a16212d38444f5a646f79838c949ca3a9a29b958f8b87858281807e7e7e7d7d7d7d7d7c7c7c8895a2afa6998c7f7265594c3f3226190c0000000000000000000000000000000000000b1724303c4955616d7a86929fa79b8e8276695d5144382c2013070000000000000000060e151c212426262626262626262626262626262835424f5b6875828f9ca8b0a4978a7d7063574a3d30262626262626262626262626262626231f1a130b0200000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000040d151b2125272828323d48535e69747f8a95a0a99e93887d726768737e89949faaa0958a8074695e54493e3328282725211c150d050000000000000000000000000d1926333f4c5965727e8c98a5b1a5998c7f736e78818b959e9b91887e746b61574e443a3f4b5865717e8b97a4b1a6998d8073675a4d4134271b0e0100000000000000000009131d27313b46505a646e78828c96a0aaa2988e84796f655b51473d33291f140a000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c232323232323232323232425272a2e343d48535f6b7783909ca8b2a6998d8073675a4d4134271b0e00000b17232e39444d5458595959595959595650473d32271c100400000000000000000000000000000000000001080f161c22282e33383c4044484b4d505254555757585b626a7071717171716c63574b433f3b36312c26201a140d060000000000000000000000000000000000010d1924303c4854606b77838f9ba7ab9f93877b6f63574b3f33271c10040e1b27333f4b57636f7b87939faba4988c8074685c5044382c211509000000000000000000000c1925323f4c5865727e8c98a5b2a79a8e8174675a4d4134271a0e010000000000000000000000030f1b27333f4b57636e79848e98968d86807c7b7b7e838a929b93897e73685d5145392d2115090000000000000000000000000000000000000000000000000000040d151d23282b2c2c2c2c2c2c2c2c2c2c2b28231d160e050000000000000000000000000000000000000000000000000000000000000000010910161a1e1f202020202020202020201f1c17120b04000000000000000000000000000000000000020a11171b1e20202020202020201f1e1b1610090100000000000000000000000000000000000000000007131e29343e464d5253535353535353524e473f352b20140900000000000006131f2b3845515e6a7683909c9084776b5e5245392c212e3a4753606c7985929b8e8275695c5043372b1e120500000000000000000000000000000000000005101c27323d48535d67707a828a92989ea3a6a09b9794918f8e8c8c8b8b8a8a8a8a898989898c97a3b0a6998c7f7265594c3f3226190c0000000000000000000000000000000000020e1b2733404c5864717d8a96a2a4978b7e72665a4d4135291c100400000000000000050f1820272d3133333333333333333333333333333335424f5b6875828f9ca8b0a4978a7d7063574a3d333333333333333333333333333333322f2b241d140b01000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110000000000000000030a1015181a232e39444f5a65707b86919ba6a3988d82776c61616c77838e99a4a79c91867b70655a4f44392e241a1915100a03000000000000000000000000000e1b2734414d5a6773818d9aa6b1a4978b7e71666f79838c96a09a90867d736960564c433d4a5763707d8996a3b0a89b8e8275685b4f4235291c0f02000000000000000000010b151f2a343e48525c66707a848f99a3aaa0968b81776d63594f453b30261c12080000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2017171717171717171717191b1e232b37424f5b6774818d9aa6b3a89b8e8275685b4f4235291c0f00000f1b28343f4b555f656666666666666661594f44382c2013070000000000000000000000000000000000000000040b11171d22272c3034383b3e414346474950575e666d747c7d7d7d7d7d74675a4d41342f2a25201b150f090200000000000000000000000000000000000006111d2935414d5864707c8894a0aba69a8e82766a5e53473b2f23170b000a16222e3b47535f6b77838f9ba7a89c9084786d6155493d3125190d010000000000000000000c1925323f4c5865727e8c98a5a7a79a8e8174675a4d4134271a0e01000000000000000000000006121f2b3743505c68737f8b96988e847b74706e6e72788089939b9085796d6155493d3125180c000000000000000000000000000000000000000000000000000000030b12171c1e202020202020202020201f1c18120c040000000000000000000000000000000000000000000000000000000000000000000000050a0e111313131313131313131313120f0c0700000000000000000000000000000000000000000000060b0f12131313131313131313110e0a050000000000000000000000000000000000000000000000020d18222c353c42454646464646464645423d362d23190e0300000000000003101c2935424e5b6774818d9993867a6d6154483b2f222b3844515d6a76838f9c9185786b5f53463a2d211408030303030201000000000000000000000000000b16212c36414b555e68707880878d92979b9ea1a3a09e9c9a999898989797979696969695979ea8b2a6998c7f7265594c3f3226190c000000000000000000000000000000000005121e2a37434f5c6874818d99a5a094887b6f63564a3e3125190d00000000000000020d17212a32383d40404040404040404040404040404040424f5b6875828f9ca8b0a4978a7d7063574a404040404040404040404040404040403f3c362f261d1309000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000409141f2a35404b55606b76818c97a2a89d92877b70655a5b66717c87929da8a2978c82766c61564b40352a1f1409050000000000000000000000000000000f1b2835424e5b6875818e9ba8b0a3968a7d706367717a848e97a1988f857b72685e554b414955626f7b8895a2afa99c8f8376695c504336291d100300000000000000000000040e18222c36404a545e68727c87919ba5a79d93897f756b61574c42382e241a100600000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130a0a0a0a0a0a0a0a0b0c0e121a26333f4c5965727e8b98a5b1a99c8f8376695c4f4336291c100000111e2b3744505c6770737373737373726b6054483c2f23160900000000000000000000000000000000000000000000060c11161b2024282c2f32363d444c535a616970777f868a8a8a8a8174675a4d4134271e19140f090400000000000000000000000000000000000000000a16222e3a46515d6975818d98a4ada2968a7e72665a4e42362a1e12070006121e2a36424e5b67737f8b97a3ada195897d7165594d42362a1e12060000000000000000000c1925323f4c5865727e8c989a9a9a9a8e8174675a4d4134271a0e0100000000000000000000000815212e3a47535f6c7884909c91867c7269636162666e77818c97968a7e7265594d4034271b0e0200000000000000000000000000000000000000000000000000000000060b0f121313131313131313131312100c07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101a232a313639393939393939393936322b241b110700000000000001070d1a26333f4c5865717e8a9795897c7063574a3e31252935424e5b6774808d9994877b6e6255493c3023170f0f0f0f0f0f0d0b060100000000000000000000040f1a252f39434c565e666e757b81868b8f929597999b9c9d9e9e9f9f9f9fa0a0a0a0a0a1a2a7afb2a6998c7f7265594c3f3226190c00000000000000000000000000000000000915212e3a46535f6b7784909ca99d9184786c5f53473a2e2216090000000000000008131e29333c43494c4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4f5b6875828f9ca8b0a4978a7d7063574d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4b4741382f251a0f030013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110000000000000000000005101a25303b46515c67727d88939ea9a1968b80756a5f5455606b76818c97a2a99e93887d72675c51473c31261b10050000000000000000000000000000000f1c2936424f5c6975828f9ca8afa296897c6f635f68727c858f99a1978d847a70675d534a4855616e7b8894a1aeaa9d9083776a5d5044372a1d1104000000000000000000000006101a242e38424c57616b757f89939da7a59b91877d73685e544a40362c22180e03000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000020b1824313e4b5764717d8a97a4b1a99c908376695c4f4336291c100001121f2c3845525f6b788080808080807d7063574a3d3024170a000000000000000000000000000000000000000000000000060b0f141c232a313940474f565d656c737a82899197938a81776e64584c4033261a0e0904000000000000000000000000000000000000000000030f1b27333e4a56626e7a86919da9a99d9185796d61554a3e32261a0e0200020e1a26323e4a56626e7b87939faba5998e82766a5e52463a2e22170b0000000000000000000c1925323f4c5865727e8c8d8d8d8d8d8d8174675a4d4134271a0e0200000000000000000000000a1723303d4956626f7b8894988c80756a605854565c65707b87939a8e8175685c4f4336291d1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070c0e1010101010100f0d090400060a0e101010101010100e0a06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000811192025292c2c2c2c2c2c2c2c2c2a26201a1209000000000000060d12171a24303d4956626f7b8894988c7f72665a4d41342826333f4c5864717d8a96968a7d7164584b3f33261c1c1c1c1c1c1c1a17120c050000000000000000000008131d27313a434c545c636a70767a7e8286888b8d8e9090919292929292939393949494969da8b2a6998c7f7265594c3f3226190c00000000000000000000000000000000000c1825313d4a56626e7b8794a0a6998d8175685c5043372b1e1206000000000000000c1824303a454e555959595959595959595959595959595959595b6875828f9ca8b0a4978a7d706359595959595959595959595959595959595958524b41362b2014080013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000000000b16212c37424d58636e78848e99a4a69b90857a6f64594d4e59646f7a85919ca7a59a8f84796e63584d42372c21170c010000000000000000000000000000101c2936434f5c6976838f9ca9afa295887b6f6256606a737d87909a9f968c82786f655c524854616e7a8794a1aeaa9d9184776a5d5144372a1e110400000000000000000000000008121c26303b454f59636d77818b959faaa3998f857a70665c52483e34291f150b010000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000002050b1824313e4b5764717d8a97a4b1a99c8f8376695c4f4336291c100004121f2c3945525f6b78858c8c8c8c8a7d7063574a3d3124170a000000000000000000000000000000000000000000000000050e171f262d353c434b525960686f767e858c949b948a81786f655c52473c3024170b00000000000000000000000000000000000000000000000814202b37434f5b67737e8a96a2aea4988c8175695d5145392d2115090000000a16222e3a46525e6a76838f9ba7aa9e92867a6e62574b3f33271b0f0300000000000000000c1925323f4c5865727e818181818181818174675a4d4134271d140900000000000000000000000b1825313e4b5764717d8a9795897c7064584e484a535e6a7783909c9084776a5d5144372b1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d13181b1d1d1d1d1d1d1c19150f0b11161a1c1d1d1d1d1d1c1a16110b04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e14191d1f202020202020201f1d1a150f080000000000000710171e2327292e3a4753606c7985929b8e8275695c5043372a29303c4955626e7b8794998d8074675b4e4235292929292929292826231d170f07000000000000000000010b151f28313a424a52595f656a6e7276797c7e808283848485858586868686868787878b97a3afa6998c7f7265594c3f3226190c00000000000000000000000000000000030f1c2834414d5966727e8b97a3a2968a7d7165594c4034271b0f0200000000000000101c2935414c5760656666666666666666666666666666666666666875828f9ca8b0a4978a7d7066666666666666666666666666666666666666645d53483c3024180b0013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000007121d28333d48535e69747f8a95a0aba0958a7e73685d524748535e69747f8a95a0aba0958a80746a5f54493e33281d12070000000000000000000000000000101c2936434f5c697683909ca9afa295887b6f625558616b757e88929b9e948b81776d645a5054616d7a8794a1aeaa9e9184776a5d5144372a1e1104000000000000000000000000000a141f29333d47515b656f79848e98a2aba0968c82786e645a50453b31271d13090000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130b0b0b0b0b0b0b0c0d0f11151b26333f4c5865727e8b98a4b1a79b8e8275685b4f4235291c0f0006131f2c3946525f6c7986929999978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000020d17202930383f464e555c646b727981888f979d948b81786f665d534a41362b1f140800000000000000000000000000000000000000000000000c1824303c48545f6b77838f9ba6a6a094887c7064584c4035291d11090401060b121e2a36424e5a66727e8a97a3a6a3978b7f73675b4f43372c20140800000000000000000b1824313e4a56626d7373737373737373736f64584c40382f251b1004000000000000000000000b1825323e4b5865717e8b9894877a6d6154473c424e5b6875818e9b9185786b5e5145382b1e12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000811181f2427292a2a2a2a2a2825201a151c2226292a2a2a2a2a2926221d160e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090d11121313131313131313110e090400000000000006101922292f3335363844515d6a76838f9c9184786b5f5246393636363a46535f6c7885919c8f83766a5d5144383636363636363635332e2821190f06000000000000000006101921282e323940474e54595e62666a6d6f71737576777778787979797979797a7a7b8895a2afa6998c7f7265594c3f3226190c0000000000000000000000000000000006131f2b3844505d6975828e9aa69f93877a6e6155493d3024180b0000000000000000121f2b3845515d68717373737373737373737373737373737373737375828f9ca8b0a4978a7d73737373737373737373737373737373737373736f64594c4033271a0d0013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110000000000000000020d18232e39444f5a65707b86919ca6a4998e83786d62574c41414c58636e79848f9aa5a79c91867b70655a4f443a2f24190e0300000000000000000000000000101c2936434f5c697683909ca9afa295887b6f62554f59636c768089939d9d938980766c625954616d7a8794a1aeaa9e9184776a5d5144372a1e110400000000000000000000000000030d17212b353f49535d67727c86909aa4a89e948a80766c61574d43392f251b110700000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201818181818181818191a1b1e21262d37434f5b6774808d99a6b1a5988c8073665a4d4134271b0e000613202c3946535f6c7986939fa4978b7e7164574b3e3124180b000000000000000000000000000000000000000000000009141f29323b424951585f676e757d848b939a9e948b82786f665d544b41382f241a0e030000000000000000000000000000000000000000000000101c2935414d5864707c88949a9a9a9a8f84776c6054483c30241b19150f0c12171a1c26323e4a56626e7a86929a9a9a9a8f84786c6054483c3024170b00000000000000000916222e3a46515b63676767676767676767645d56524a41372c211509000000000000000000000b1825323e4b5865717e8b9894877a6e61554940444f5c6875828e9b9184786b5e5145382b1e1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111a222a303436363636363635312c251f272e3336363636363636332e2720170e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e18222c343a3f424242424e5b6774808d9993877a6e615548424242424244505d6975828f9b9285796d6054474242424242424242423f3a332b21170d02000000000000020d18222b33393e41424344484d52565a5d6063656768696a6b6b6b6c6c6c6c6d6d6d6f7b8895a2afa6998c7f7265594c3f3226190c000000000000000000000000000000000a16222f3b4754606c7885919ea89c8f83776a5e5246392d211408000000000000000013202c3946535f6c798080808080808080808080808080808080808080828f9ca8b0a4978a80808080808080808080808080808080808080808074675b4e4134281b0e0013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000009141f2a35404b56606b76818c97a2a99e93887d72675c51453a3b46515c67727d88939ea9a2988d82776c61564b40352a1f140a00000000000000000000000000101c2936434f5c6976828f9ca9afa295887c6f625549515a646e77818b959e9b92887e746b6157616e7a8794a1aeaa9d9084776a5d5144372a1e11040000000000000000000000000000050f19232d37414c56606a747e88929ca6a69c92887d73695f554b41372d23180e04000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2525252525252525252526282a2d31373f49545f6b7783909ca8ada195897d7064574b3e3225190c000713202d3a4653606d798693a0a4988b7e7165584b3e3225180b00000000000000000000000000000000000000000000020e1a25303b444d545b626a717880878e969d9e958c827970665d544b42392f261d1308000000000000000000000000000000000000000000000000121f2b3845515d6975818d8d8d8d8d8d8b7f73675b4f43372b292825201a171e232729292e3a46525e6a76828d8d8d8d8d8d887c7064584c4033261a0d000000000000000006121e29353f4951575a5a5a5a5e636464646464625c53493d3226190d000000000000000000000b1824313e4a5764707d8a9696897d71655a514d4e56606c7884909c9083766a5d5044372a1e110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e19232c343b40434343434343413d362f2931393f424343434343423f39322920150b00000000000000000000000000000004070809090909090909090807050507080909090909090909080705010000000000000000000000000000000000000000000000000000000000000009141f2a343e454b4f4f4f4f4f5864717d8a9696897d7064574f4f4f4f4f4f4f4f5a6673808c9895887c6f63564f4f4f4f4f4f4f4f4f4e4b453d33291e130800000000000008141f29343d444a4d4f50515253545657565456585a5b5d5d5e5f5f5f5f5f5f6060626f7b8895a2afa6998c7f7265594c3f3226190c000000000000000000000000000000010d1926323e4b57636f7c8895a1a5988c8073675b4e42362a1d1105000000000000000013202c3946535f6c79868d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d949faab2a69a918d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8174675b4e4134281b0e0013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110000000000000005101b25303b46515c67727d88939ea9a3988d82766b60554a3f3435404b56616c77828d98a3a99e93887d72675d52473c31261b10050000000000000000000000000f1c2935424f5c6875828f9ca8afa296897c6f63564948525c656f79838c96a09a90877d736960616e7b8894a1aeaa9d9083766a5d5043372a1d110400000000000000000000000000000007111b25303a444e58626c76808a949fa9a4998f857b71675d53493f342a20160c020000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346393232323232323232323232333437393d4249515b65707b87939faba89d9185796d6154483c2f23160a000714202d3a4753606d798693a0a5988b7e7165584b3f3225180c0000000000000000000000000000000000000000000005121e2a36424c565e666d747c838a9299a09e958c837970675e544b423930261d140b0100000000000000000000000000000000000000000000000013202c3946535f6c7980808080808080807a6e62574b3f36363634312c2521292f3335363636424e5a66727e808080808080808074675a4d4134271a0e0000000000000002091018232d3740474b4d525a61686f71717171716e655a4e4235291c10000000000000000000000a16232f3c4955626e7a8793998d82776c635c595a6068727d8894998d8174685b4f4235291c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000914202b353e464c4f50505050504d484138313b434a4f50505050504f4a443b31271c1105000000000000000000000000070c111415151515151515151515141111141515151515151515151514110d070100000000000000000000000000000000000000000000000000000000000d1925313c4650575b5c5c5c5c5c626e7b8794988c8073665c5c5c5c5c5c5c5c5c5c64707d8996978b7e72655c5c5c5c5c5c5c5c5c5c5b564f453b3024180c0000000000010d1925303b454f565a5b5d5e5f60616263625d544c4d4f5051515252525253535355626f7c8995a2afa5988c7f7265594c3f3226190c00000000000000000000000000000004101d2935424e5a67737f8c98a4a195897c7064574b3f33261a0e01000000000000000013202c3946535f6c7986939a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9ea6b0b7aca29c9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a8e8174675b4e4134281b0e0013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000000b16212c37424d58636e78848e99a4a89c91867b70655a4f44392e2e39444f5a65707b87929da8a59a8f84796e63584d42372d22170c0100000000000000000000000f1b2835414e5b6874818e9ba7b0a3978a7d7064574a404a535d67707a848e97a1998f857b7268626f7c8895a2afa99c8f8276695c4f4336291d10030000000000000000000000000000000009141e28323c46505a646e78838d97a1aba1978d83796f655a50463c32281e140a0000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f53463e3e3e3e3e3e3e3e3e3e3e3f40414346494e545b636c77828d98a4ada2978c8075695d5145382c201407000714202d3a4753606d7a8794a0a5988c7e7265584c3f3225190c000000000000000000000000000000000000000000000814212e3a46525e6870777f868d959ca09f958c837a70675e554c423930271e140b0200000000000000000000000000000000000000000000000000121f2b3845515d6871737373737373737372695e524642424242413d372f2b333a3f42424242424a56616c7373737373737373736e64584c4033261a0d000000000000050c141b222a31383f474e555d646b737a7d7d7d7d7d766a5d5043372a1d11000000000000000000000814212d3a46525f6b77838f9a93887e756e6866676b727a848e9994897c7164584c3f33271a0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a25313c4750585c5d5d5d5d5d59524a3f38434d555b5d5d5d5d5d5b554d43392d22160a00000000000000000000020b12181d2022222222222222222222211d1d2022222222222222222222201d18120b0300000000000000000000000000000000000000000000000000000000111d2936424d5862686969696969696c7885919b8e82756969696969696969696969696e7a87939a8e817569696969696969696969696761574c4034281c0f030000000004101d2935414d57616768696a6b6d6e6f706e665b4f43424344454545464646464a5663707d8996a3b0a5988b7e7265584c3f3225190c0000000000000000000000000000000714202c3945515e6a76838f9ba79e9285796d6054483b2f23170a00000000000000000013202c3946535f6c798693a0a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a9acacacacaca8a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69b8e8174675b4e4134281b0e0013202c3946535f6c798693a0acaca09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1acaa9e9184776a5d5144372a1e1100000000000007121d28333e48535e69747f8a95a0aba1968b80756a5f54493e322728333e49545f6a75808b96a1aba0958b80756a5f54493e33281d120700000000000000000000000e1a2734404d5a6773808d99a6b1a4988b7e7165584b3f414b555e68727b858f99a1978d847a7067707d8a96a3b0a89b8e8275685b4f4235281c0f0200000000000000000000000000000000020c16202a343e48525c67717b858f99a3a99f958b81766c62584e443a30261c110700000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f534b4b4b4b4b4b4b4b4b4b4b4b4c4c4e5052555a5f656d757e89939ea9a59b91867b6f64584c4034281c1004000714212e3a4754616d7a8794a1a5998c7f7265594c3f3226190c000000000000000000000000000000000000000000000916222f3c4955626f7a82899193939393938d837a71685e554c433a30271e150c020000000000000000000000000000000000000000000000000000101c2935414c57606566666666666666666660574f4f4f4f4f4f4d484138343d454b4f4f4f4f4f4f505a62666666666666666666645c52473c3024170b0000000001080f171e252d343b434a515960676e767d858a8a8a8a83776a5d5044372a1d110000000000000000000005111e2a36434f5b66727e89949a90878079757373777c848c96988e83776c6054483c3024170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111d2a36424e5962686969696969645c51453d49555f676969696969675f554a3e32261a0d010000000000000000020c141c23292d2f2f2f2f2f2f2f2f2f2f2d2a292d2f2f2f2f2f2f2f2f2f2f2d29241d150d03000000000000000000000000000000000000000000000000000000121f2c3845525e6a737575757575757576828f9b918578757575757575757575757575757884919d908477757575757575757575757573695d5044372b1e11050000000006121f2c3845515d697275767778797a7c7d776b5e52453936373838383939393f4c5865717e8b97a4b0a4978a7e7164574b3e3125180b0000000000000000000000000000000b1723303c4855616d7986929fa79b8e8276695d5144382c1f130700000000000000000013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09b8e8174675b4e4134281b0e0013202c3946535f6c798693a0a0a0a09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a0a0a09e9184776a5d5144372a1e110000000000030d18232e39444f5a65707b86919ca7a69b90857a6e63584d42372c21212c38434e59646f7a85909ba6a79c91867b70655a50453a2f24190e03000000000000000000000c1926333f4c5965727e8b98a5b1a6998c8073665a4d4039434d56606a737d87909a9f968c83796f717e8b98a4b1a6998d8073675a4d4134271b0e010000000000000000000000000000000000040e18222c36404b555f69737d87919ba5a79d93887e746a60564c42382d23190f05000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5858585858585858585858585858595a5c5f62666a70777e87919aa5a69d93897f74695e53473c3024180c00000815212e3b4854616e7b8794a1a6998c7f7366594c403326190d000000000000000000000000000000000000000000000916222f3c4955626f7c8686868686868686847a71685f564c433a31281e150c030000000000000000000000000000000000000000000000000000000c1824303a454e555959595959595959595a5c5c5c5c5c5c5c5c59534a403b464f575b5c5c5c5c5c5c5c5b59595959595959595958524a41362b1f1408000000030b131a212930373e464d545c636a727980888f96958c837970665b4f4236291c1000000000000000000000020e1a26323e4a56616c77828c9699918a8581808183888e969a91877c71665b4f44382c2014080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3945525e6a7476767676766d625649404d596671767676767671665a4e4236291d110500000000000000000a141e262e34393b3c3c3c3c3c3c3c3c3b393535393b3c3c3c3c3c3c3c3c3b39352f271f150b00000000000000000000000000000000000000000000000000000013202c3946535f6c798282828282828282838e9a9487828282828282828282828282828282838f9c9387828282828282828282828282786b5e5145382b1e1205000000000613202c3946535f6c7982838485868788867a6d6154483c33302f2e2e2f3238434f5b6774818d99a6afa295897c7063564a3d3024170a0000000000000000000000000000020e1a27333f4c5864717d8996a2a3978b7e72665a4d4135281c100400000000000000000013202c3946535f6c7986939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393938e8174675b4e4134281b0e0013202c3946535f6c798693939393939386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8893939393939184776a5d5144372a1e11000000000009141f2a35404b56616b76818c97a2aba094897e73685d52473c31261b1b26313c47525d68737e8a94a0aba3988d82776c61564b40352a1f150a000000000000000000000b1824313e4a5764707d8996a3afa79b8e8275685c4f43363b444e58616b757e88929b9e948b817773808d99a6b1a4988b7e7265594c3f3326190d0000000000000000000000000000000000000006101a242f39434d57616b758089949ea8a49a90867c72685e54493f352b21170d030000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c6565656565656565656565656565656667696b6e72767b82899199a2a49c948b81776d63584d42362b1f130800000815222e3b4855616e7b8894a1a6998c807366594c4033261a0d000000000000000000000000000000000000000000000916222f3c4855616e7879797979797979797971685f564d433a31281f160c030000000000000000000000000000000000000000000000000000000008131e29333c43494c4d4d4d4d4d4d535d656969696969696969655c5247414c576167696969696969696761574d4d4d4d4d4d4d4b4741382f241a0e030000030c151d242c333a424950585f666d757c838b9299968c837a71675e554a3e33261a0e00000000000000000000000a16222e3945505b66707a848d959c96918e8c8d8f93999991887e756a60554a3e33271c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c79838383837e7266594d414e5b67748183838383766a5e5246392d2115090000000000000006111c263038404548484848484848484848464140454848484848484848484845403931271d1207000000000000000000000000000000000000000000000000000013202c3946535f6c79868f8f8f8f8f8f8f8f949e99918f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f95a098918f8f8f8f8f8f8f8f8f8f8f85786b5e5145382b1e12050000000005121f2b3844515e6a76838f9092939495897d7165594e44403d3b3b3b3c3e424a54606b7784909ca9ac9f93877a6e6154483b2f221509000000000000000000000000000005111e2a36434f5b6874808d99a5a094887b6f63564a3e3125190c0000000000000000000013202c3946535f6c798686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868174675b4e4134281b0e0013202c3946535f6c798686868686868686796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8686868686868684776a5d5144372a1e110000000005101b26303b46515c67727d88939ea9a4998e83786d62574c41362b1f1415202b36414c57626d78838e99a4a99e93897d73685d52473c31261b10050000000000000000000916232f3c4855626e7b8794a0ada99d9084776b5e524539323c464f59636c768089939d9d93898076828f9ba8afa296897c7063574a3e3124180b000000000000000000000000000000000000000008131d27313b454f59636d77828c96a0aaa2988e847a70655b51473d33291f150a0000000000000000000000000000000000000013202c3946535f6c798693a0acaca093867971717171717171717171717171717172737475787a7e82878d939ba3a09a928a82796f655b51463b30251a0e0300000815222e3b4855616e7b8895a2a69a8d807366594d4033261a0d000000000000000000000000000000000000000000000714202d3945515c666c6c6c6c6c6c6c6c6c6c685f564d443b31281f160d040000000000000000000000000000000000000000000000000000000000020d17212a32383d4040404040404b58646f75757575757575756e63574b44515d69737575757575757573695d504440404040403f3b362f261d13080000000a151e272f363d454c535b6269717880878e959d968d847a71685f554c43382d22160a000000000000000000000005111d28333f49545e68727b838b92979b9a999a9b99948e877e766c63594e44392d22160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2b3844515e6a778490908e8275695d51454c5966727f8c9090867a6e6255493d3125180c000000000000000b17222d38424a5155555555555555555555524c4b5155555555555555555555514b43392e23180c000000000000000000000000000000000000000000000000000013202c3946535f6c7986939c9c9c9c9c9c9c9da0a29d9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9da1a29d9c9c9c9c9c9c9c9c9c9c9285786b5e5145382b1e12050000000003101c2935424e5b6773808c989ea0a1998d81756a5f56504c49484848484a4e545c66717c8894a0aca89c9084776b5e5246392d20130700000000000000000000000000000815212d3a46525f6b7784909ca99d9084786b5f53473a2e22150900000000000000000000131f2c3946525f6b767979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797972675a4d4134271b0e00131f2c3946525f6b767979797979797979766b5f5346392d201306000000000000000000000000000814212e3a4754606d77797979797979797975695d5044372a1d11000000000b16212c37424d58636e79848f99a4a99e93887d72675b50453a2f24190e0e19242f3a45505b67727d88939ea9a59a8f84796e63584d43382d22170c0100000000000000000714212d3a46535f6c7885919eaaac9f93877a6e6155493d31343d47515a646e77818b949e9b92887e85919daaaca093877a6e6155483b2f2216090000000000000000000000000000000000000000010b151f29333d47515c66707a848e98a2aaa0968c81776d63594f453b31261c120800000000000000000000000000000000000013202c3946535f6c798693a0acaca093867e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e80818284878a8e92989e9f9a958f88817870675d544a3f352a1f14090000000915222f3c4855626f7b8895a2a79a8d8173675a4d4034271a0d0100000000000000000000000000000000000000000005111d2935404b545b5f5f5f5f5f5f5f5f5f5f5d564e443b32291f160d0400000000000000000000000000000000000000000000000000000000000000050f1820272d313333333333404c596673808282828282827e7265584c45525f6b7882828282828282786b5e51453833333333322f2b241d140b01000006111c27303941484f565e656c747b828a9198a0968d847a71685f564d433a31271c11050000000000000000000000000c17222d38424c566069717980878b8f919292908d89837c756c645b51473c32271c1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d2a3643505c6975828f9c9285796d6155484b5764717d8a97968a7e7265594d4135281c10040000000000000f1b27333f4a545c616262626262626262625d56545d616262626262626262615d554b4034281c10040000000000000000000000000000000000000000000000000013202c3946535f6c7986909090909090909090959f9a929090909090909090909090909090909196a099929090909090909090909085786b5e5145382b1e120500000000000d1a26333f4b5764707c88949faba99e92877c7168615c585655545455575a5f656e78828d99a4afa3988c8074675b4f43362a1d110500000000000000000000000000000c1824313d4956626e7a8793a0a6998d8174685c5043372b1e120600000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6961564a3e3226190d00111e2a37434f5a646b6c6c6c6c6c6c6c6c6b645a4f43372b1e12050000000000000000000000000006131f2c3844505b656c6c6c6c6c6c6c6c6c6a63584d4135281c0f00000007121d28333e49535e69747f8a95a0aba3988d82766b60554a3f34291e130808131e29343f4a55606b76818c97a2aba1968b80756a5f54493e33281d1308000000000000000005121e2b3744505c6975828e9aa6afa2968a7d7165594d41362b353f48525c656f79828c969f9a90878894a0ada99d9084776b5f5246392d201407000000000000000000000000000000000000000000030d17212b35404a545e68727c86909aa5a89d93897f756b61574d42382e241a1006000000000000000000000000000000000013202c3946535f6c798693a0acaea2968d8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8c8c8d8f9193969a9d9a97938f8a847d766e665e554b42382d23180d020000000916222f3c4955626f7c8995a2a79a8d8174675a4d4134271a0e01000000000000000000000000000000000000000000010d18242e39424a5053535353535353535353514c443c322920170d04000000000000000000000000000000000000000000000000000000000000000000060e151c21242626262633404c596673808c8f8f8f8f8c7e7265584c45525f6b78858f8f8f8f8f85786b5e5145382b26262626231f19130b020000000b17232e38424b525a616870777e868d949ca0978e847b72685f564d443a31281f150b0000000000000000000000000006111b26303b444e575f676f757b808385868584817d78726b635b52493f352b20160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b2835414e5b6774818d9a95897d7165584c4956636f7c89959a8e8275695d5145382c201408000000000000121e2b3743505b666d6f6f6f6f6f6f6f6f6e685d5c666e6f6f6f6f6f6f6f6f6e675c5145382c1f13060000000000000000000000000000000000000000000000000013202c3946535f6c79848484848484848484848e9a9589848484848484848484848484848484848f9c93878484848484848484848484786b5e5145382b1e120500000000000a17232f3b47545f6b77838e99a4aea3988d837a726c6865636161616263666a7077808a949faaa99e92877b6f63574b3f33271a0e0200000000000000000000000000030f1b2834404d5965727e8a97a3a2968a7d7165594c4034271b0f02000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5d574f44392e22160a000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5a52493e33271b0f020000000000000000000000000004101c28343f4a535b5f5f5f5f5f5f5f5f5f5e5951473c3025190c0000030e18232e39444f5a65707b86919ca7a79c91867b70655a4f44392e23170c01010d18232e39444f5a65707b86919ca7a79c91867b70665b50453a2f24190e0300000000000000030f1b2834414d5966727e8a96a3afa69a8d82756a5e52473c322d36404a535d67707a848d97a19992929aa4b0a5998d8174685c4f43362a1e110500000000000000000000000000000000000000000000050f19242e38424c56606a747e89939da7a59b91877d73695e544a40362c22180e040000000000000000000000000000000013202c3946535f6c798693a0acb3a89f999898989898989898989898989898989898999a9b9d9c9592908e8b87837e78726c645d544c433930261c110700000000091623303c4956626f7c8996a2a79a8e8174675a4e4134281b0e010000000000000000000000000000000000000000000007121d2730383f444646464646464646464644403a322a20170e050000000000000000000000000000000000000000000000000000000000000000000000040b101518191a1a2633404c596673808c999c9c988c7e7265584c45525f6b7885929c9c9c9285786b5e5145382b1e1a1a1917130e0801000000000f1b28333f4a545d646b737a818990979fa0978e857b726960574d443b32281f160d0300000000000000000000000000000a141f29323c454d555d646a6f73767879797775716c676059514940362d23190f04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404c5966727f8c98998d8174685c504854616e7a87949e9285796d6154483c3024170b00000000000013202c3946525f6c787b7b7b7b7b7b7b7b7a6e62606d787b7b7b7b7b7b7b7b796d6054473a2e21140700000000000000000000000000000000000000000000000000131f2c3945525e6a747777777777777777777e8b9795897c7777777777777777777777777777808d9994877b7777777777777777777774695d5144372b1e1105000000000007131f2b37434f5b66727d88939da7aa9f958c847d7874716f6e6e6e6e7072767b8289929ba6aba1978c81766a5f53473b2f23170b000000000000000000000000000006121f2b3744505c6975818e9aa69f93867a6e6155493d3024180b00000000000000000000000a16212c3740484f5253535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353514d453d33281d1106000a16212c3740484f525353535353535353524f4940372c21160a0000000000000000000000000000000c17232d3841494f525353535353535353524e473f352a1f1408000009141f2a35404b56616c76828c97a2aca1968b80756a5f54483d32271c1106000006111c27323d48535e6974808b96a1aca3988d82776c61564b40352b20150a00000000000000000c1825313d4a56626e7a86929eaaaa9e92867a6f64594e443c363238414b555e68727b858f98a29e9ea3acada195897d7164584c4033271b0e02000000000000000000000000000000000000000000000008121c26303a444e58626c76818b959fa9a3998f857a70665c52483e342a20150b0100000000000000000000000000000013202c3946535f6c798693a0acb9b1a9a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a6a6a8a1958a8684817e7b77726d67615a524b423a31271e140a00000000000a1623303c4956636f7c8996a3a89b8e8174675b4e4134281b0e0200000000000000000000000000000000000000000000000b151e262e33373939393939393939393938352f2920170e05000000000000000000000000000000000000000000000000000000000000000000000000000004090b0d0d192633404c596673808c99a6a5988c7e7265584c45525f6b7885929fa99e9285786b5e5145382b1e120d0c0a0703000000000000121e2b3744505c666e767d858c939aa0a0978e857c736960574e453b322920160d04000000000000000000000000000000030d17202a333b434b52595e63676a6b6c6c6b6865615b554e473f362e241b110700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323e4b5764717d8a979d9184786c605447535f6c7986929f95897d7164584c4034271b0f03000000000013202c3946535f6c7986888888888888887b6f62606d7a87888888888888877a6d6154473a2e21140700000000000000000000000000000000000000000000000000111d2a36424e5962696a6a6a6a6a6a6a6a6f7c8895988c7f736a6a6a6a6a6a6a6a6a6a6a6a717d8a96968a7d716a6a6a6a6a6a6a6a6a6862584d4135281c10030000000000030f1b27323e4a55606c76818b959ea7a89e968f8984817e7c7b7a7b7b7d7f82878c939ba4aba2998f857b7065594e42372b1f130700000000000000000000000000000916222e3b4753606c7885919da89c8f83776a5e5245392d211408000000000000000000000005101a252e373e43464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464645413b342b21160c000005101a252e373e4346464646464646464646433e372e251b100500000000000000000000000000000006111c262f383e4346464646464646464645423d352d23190e030005101b26313b46515c67727d88939ea9a69b9085796e63584d42372c21160b000000000b16212c37424d58636e79848f9aa5a99e94897e73685d52473c31261b1005000000000000000915212d3a46525e6a76828d99a5aea3978c80756a60564e47423e3c3c434c566069737d87909aa3abafb3a89c9185796d6154483c3024170b000000000000000000000000000000000000000000000000000a141e28323c46505b656f79838d97a1aba1968c82786e645a50463b31271d130900000000000000000000000000000013202c3946535f6c798693a0acb5aba39e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9fa1a3a5a1958984817c78726c66615c564f48413930281f150c0200000000000a1723303d4a5663707d8a96a3a89b8e8275685b4e4235281b0f020000000000000000000000000000000000000000000000030c141c22272b2c2c2c2c2c2c2c2c2c2c2b29241e170e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192633404c596673808c99a6a5988c7e7265584c45525f6b7885929fab9e9285786b5e5145382b1e12050000000000000000000013202c3946535f6c7880888f93939393938f857c736a61574e453c332920170e040000000000000000000000000000000000050e182129323941474d53575b5d5f5f5f5e5c5955504a443d352d241b12090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4956636f7c8995a194887c7063574b515e6b7784919d998d8174685c5043372b1f1306000000000013202c3946535f6c7986939595959595887b6f62606d7a87949595959594877a6d6154473a2e211407000000000000000000000000000000000000000000000000000e1a26313c4750585c5d5d5d5d5d5d5d606d7986929b8e8275695d5d5d5d5d5d5d5d5d5d626e7b8794998d8073675d5d5d5d5d5d5d5d5c5750463b3024190c000000000000000a16222d39444f5a656f79838c959ca3a8a09a94908d8b8988878788898b8e93989ea5a8a19990877d73695e53483d31261a0e0200000000000000000000000000000d1925323e4a57636f7b8894a1a5988c8073675b4e42362a1d110500000000000000000000000009131c252c323739393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393835302922190f0500000009131c252c32373939393939393939393937322c251c130900000000000000000000000000000000000a141d262d33373939393939393939393936312b231b110700000a16212c37424d58636e79848f9aa4aa9f94897e73685d52473c31261b100400000000040f1a25313c47525d68737e89949faaa59a8f84796e63584e43382d22160b0000000000000005111d2a36424e5965717c88949faaa89d91877c72686058524e4b4948494a4e57616b747e88929ca8b5ada2978b8074685c5044382c20140800000000000000000000000000000000000000000000000000020c16202a353f49535d67717b858f99a4a89e948a80766c62574d43392f251b1107000000000000000000000000000013202c3946535f6c798693a0acb0a4999291919191919191919191919191919192939496999c9b94908d88837e77706961584f463c32281e160d030000000000000a1724303d4a5763707d8a96a3a89b8e8275685b4f4235281c0f02000000000000000000000000000000000000000000000000020a11171b1e202020202020202020201f1c18130c0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192633404c596673808c99a0a0988c7e7265584c45525f6b7885929fa09e9285786b5e5145382b1e12050000000000000000000013202c3946535f6c798686868686868686867c736a61574e453c332a20170e0500000000000000000000000000000000000000060f1720272f363c42474b4e51525352514f4c49443f39322b231b1209000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4854616e7a8794a0988c8073675b4f505c6976828f9c9d9084786c5f53473b2f23160a000000000013202c3946535f6c798693a0a2a2a295887b6f62606d7a8794a0a2a2a194877a6d6154473a2e211407000000000000000000000000000000000000000000000000000915202b353e464c50505050505050515d6a76838f9c9185786c5f5350505050505050535f6c7885919c8f83766a5d51505050505050504c463e342a1f14080000000000000005111c27333e48535d67717a838b92989ea3a5a09c9997969494949596989b9ea3a7a29d968f877e756b62574d42372c201509000000000000000000000000000004101c2935414e5a66737f8b98a4a195897c7064574b3f32261a0e01000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c29251f18100700000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2a27211b130a010000000000000000000000000000000000020b141b22272b2c2c2c2c2c2c2c2c2c2c2a26201911090000000e1a26323e49545e6974808a95a0a0a0998e83786d62574c40352a1f140900000000000009141f2a35404b56616c77828d99a0a0a0968b80756a5f54493e33271b0f02000000000000010d1925313d4954606b77828d98a3ada3988e847a726a635e5a5756555557595c61676f77818d9aa7b4a79c91867a6f63574c4034291f160c0200000000000000000000000000000000000000000000000000040e19232d37414b555f69737d88929ca6a69c92887e73695f554b41372d23190e040000000000000000000000000013202c3946535f6c798693a0acada093888484848484848484848484848484848586888a8d90959a9d99948f89827b736a61584e44392f24190e030000000000000b1724313e4a5764707d8a97a4a89c8f8275685c4f4236291c0f030000000000000000000000000000000000000000000000000000060b0f121313131313131313131312100c07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192633404c596673808c939393938c7e7265584c45525f6b7885929393939285786b5e5145382b1e120500000000000000000000131f2c3946525f6b76797979797979797979746a61584f463c332a21180e05000000000000000000000000000000000000000000050e161d242b31363b3f42444546464543403d38332e272019110900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a46535f6c7986929f9c9083776b5f534e5b6774818d9aa094887c6f63574b3f33261a0e020000000013202c3946535f6c798693a0acafa295887b6f62606d7a8794a0adaea194877a6d6154473a2e21140700000000000000000000000000000000000000000000000000030e19232c353b40434444444444444e5b6774818d9994877b6e625549444444444444505c6975828f9b9285796c605347444444444443403b342c22180d0200000000000000000b16212c37414b555f68717980878d93979b9fa1a4a4a2a1a1a1a1a2a4a4a19e9b96918b857d756c635a50453b30251a0f0400000000000000000000000000000713202c3845515d6a76828f9ba79e9285796d6054483b2f23160a0000000000000000000000000000010910161a1e1f202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201f1d19140d06000000000000010910161a1e1f20202020202020201f1e1b1610090100000000000000000000000000000000000000020a11161b1e2020202020202020201f1d1a150f0700000000111e2a36434f5a65707b86919393939393887c71665b50453a2f24190e03000000000000030e19242f3a45505b66717c87929393939391877b71665b4f43372b1e1205000000000000000915212c38444f5a66717c87919ba5aaa0968c847c756f6a66646362626365686d7279818a939da9b2a5988c80756b62584e453b31281e140b010000000000000000000000000000000000000000000000000007111b252f39434d57616c76808a949ea8a49a8f857b71675d53493f352a20160c0200000000000000000000000013202c3946535f6c798693a0acaca0938679777777777777777777777777777778797b7d8184898f959ca09a948d857c736a60564b40362b1f14080000000000000b1724313e4a5764717d8a97a4a99c8f8275695c4f4236291c0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192633404c596673808686868686867e7265584c45525f6b7885868686868685786b5e5145382b1e120500000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6a62584f463d342a21180f060000000000000000000000000000000000000000000000040b131920252a2f323537393939383634302c28221c160f0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3845515e6b7784919d9f93877b6f62564d5966727f8c98a4988c8073675b4f42362a1e12050000000013202c3946535f6c798693a0acaca295887b6f62606d7a8794a0adaca194877a6d6154473a2e211407000000000000000000000000000000000000000000000000000007111a232a30343637373737373f4c5865717d8a97968a7d7165584c3f37373737414d5a6673808c9894887b6f6256493d3737373736343029221a100600000000000000000005101a252f39434d565f676e757c82878b8f929597989a9a9b9b9b9a999795928f8b86807a736b635a51483e34291f14090000000000000000000000000000000a17232f3c4854616d7986929ea79b8e8275695d5144382c1f130700000000000000000000000000000000050a0e11131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131312100d0802000000000000000000050a0e1113131313131313131313110e0a050000000000000000000000000000000000000000000000050b0f1113131313131313131313110e09040000000000121f2c3945525f6b76828686868686868681766b60554a3f34291e1308000000000000000007121d28333e4954606b76818686868686868682776c5f5346392d2013060000000000000004101b27323e49545f6a758089939da6a89e968e86807a7673716f6f6f707274787d848b939ca5aba7a79b91877d746a60574d433a30261d1309000000000000000000000000000000000000000000000000000009131d27313b45505a646e78828c96a0aaa1978d83796f655b51463c32281e140a00000000000000000000000013202c3946535f6c798693a0acaca09386796c6a6a6a6a6a6a6a6a6a6a6a6a6b6b6d6e7174787d848b939ba59e978e857c72675d52473c3025190e0200000000000b1824313e4b5764717e8b98a4a99c908376695c4f4336291c1003000000000000000000000000000000000000000000000000000000000000000002040608090a0b0b0c0c0c0b0b0a08070503010000000000000000000000000000000000000000000000000000000000000000000000000000000c1926333f4c58657179797979797979797064584b45515e6a7679797979797979756a5e5144382b1e1205000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5e5850463d342b22180f060000000000000000000000000000000000000000000000000001080e141a1e2326292b2c2c2c2b2a2724201c17110b040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101d2a3643505c6976828f9ca3978b7e72665a4e5864717d8a97a49c8f83776b5e52463a2e2215090000000013202c3946535f6c798693a0a2a0a095887b6f62606d7a8794a0a2a0a094877a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000811181f24282a2a2a2a2a303d4956626e7b8794998d8174675b4e42352a2a323e4b5764707d8996978b7e7265594c40332a2a2a2a28241e181007000000000000000000000009131e28313b444c555d646b70767b7f8386888a8c8d8e8e8e8e8d8c8b8886837e7a756f68615951483f362c22180d020000000000000000000000000000010e1a26333f4b5864707d8995a2a3978b7e72665a4d4135281c100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2c3845525e6b7679797979797979797970655a4f44392d22170c010000000000000000010c17222d38434e59646f787979797979797979766b5f5346392d20130600000000000000000b16212d38434e59636d77818b949ca4a89f98918b8682807d7c7b7c7d7e8184898f959da5a79f9b9ba1998f867c72695f554c42382f251b120800000000000000000000000000000000000000000000000000010b151f29343e48525c66707a848e99a3a99f958b81776c62584e443a30261c1207000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5d5d5d5d5d5d5d5d5d5d5e5e5f606264686c72798189939da7a0978e84796e63584d41362a1e120600000000000b1825323e4b5865717e8b98a4a99c908376695d5043362a1d1003000000000000000000000000000000000000000000000000000000000306090c0e11131416171818191918181716151412100d0b08040100000000000000000000000000000000000000000000000000000000000000000000000b1724303d49545f686c6c6c6c6c6c6c6c685f5448424e59646b6c6c6c6c6c6c6c6b63594e4235291d1003000000000000000000000a16212c3740484f52535353535353535353524d463e342b221910060000000000000000000000000000000000000000000000000000000003090e12161a1c1e1f201f1f1d1b1814100b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424e5b6774818d9aa79b8e82766a5e5156636f7c8995a29f93877b6e62564a3e3125190d0100000013202c3946535f6c7986939f96939393887b6f62606d7a87949e96939393877a6d6154473a2e21140700000000000000000000000000000000000000000000000000000000070e14181b1d1d1d1d212d3a46535f6c7885919c8f83766a5e5145382c232f3c4855616e7a87939a8d8174685b4f4236291d1d1d1c1c1a17120c0600000000000000000000010c16212b343c434b52595f656a6f7376797c7d7f818182828181807e7c7976726e69635d564f473f362d241a100600000000000000000000000000000005111d2a36424f5b6774808c99a5a094877b6f63564a3e3125190c00000000000000000000000000000000000005090c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0c090500000000000000000000000000040708080808080808080808070400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111d2a36424e5a646b6c6c6c6c6c6c6c6c6c675e53483d32271c11060000000000000000000006111c27323d48535e676c6c6c6c6c6c6c6c6c6b645a4f43372b1e1205000000000000000005101b26313c47515c666f78828a929aa0a7a39c97928f8c8a898888898b8d91959aa0a7a39c958e9098a1988e847a71675e544a41372d241a100600000000000000000000000000000000000000000000000000030e18222c36404a545e68727c87919ba5a79d93897e746a60564c42382e23190f050000000000000000000013202c3946535f6c798693a0acaca09386796c5f535151515151515151515151525355585c61676f77818b96a1a9a0958b8075695e52463b2e22160a00000000000c1825323f4b5865727e8b98a5aa9d9083766a5d5043372a1d11040000000000000000000000000000000000000000000000000002070b0f1215181b1d1f212224242525252525242322201e1c1a1714110d09050000000000000000000000000000000000000000000000000000000000000000000814202c38434d565d5f5f5f5f5f5f5f5f5d564d423d48525a5f5f5f5f5f5f5f5f5e5951473d3125190d010000000000000000000005101a252e373e434646464646464646464645423c342c221910070000000000000000000000000000000000000000000000000000000000000002060a0d101112131312100e0b08040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2733404d5966737f8c99a59e92867a6d615555616e7a8794a1a3978b7e72665a4d4135291d110400000013202c3946535f6c798692998d868686867b6f62606d798693988d868686867a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000060e161d22262828282b3744505d6976828f9b9286796d6054473b2e282d3946525e6b7784909c9083776a5e5145382c282828282826231e17100700000000000000000005111c28333d464e535555555a5e63676a6d6f717273747575747473716f6d6a66625d585555524d453b31261a0f030000000000000000000000000000000814212d3946525e6b7783909ca89d9084786b5f53473a2e22150900000000000000000000000000000000040b1115181a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1816110b05000000000000000000060c10131515151515151515151513100c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a26323d48525a5f5f5f5f5f5f5f5f5f5f5c554c42372c21160b0000000000000000000000000a15202b36414c555c5f5f5f5f5f5f5f5f5f5f5a52493e33271b0f020000000000000000000a15202b353f4a545d666f7880888f959ba0a4a39e9b989796959596979a9da1a6a29d98928b83869099a0968d83796f665c53493f362c22180d020000000000000000000000000000000000000000000000000006101a242e38424c56616b757f89939da7a59a90867c72685e544a3f352b21170d0300000000000000000013202c3946535f6c798693a0acaca09386796c5f5346444444444444444444444547494c50565d656f7985909ca7a79c91867a6f63574b3f32261a0e01000000000c1925323f4c5865727e8c98a5aa9d9084776a5d5044372a1d1104000000000000000000000000000000000000000000000004090e13171b1f2225272a2c2e2f3031323232323231302e2d2b292623201d1915110c070200000000000000000000000000000000000000000000000000000000000004101b27313b444c515353535353535353514b443b3640484e5253535353535353524e483f362b20150900000000000000000000000009131c252c3237393939393939393939393836312a221a100700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323e4b5864717e8a97a4a2968a7d71655953606c7986929fa79a8e82766a5d5145392d201408000000121f2c3945525f6b788592988c7f797979786d615f6c798692988b7e797979776c6053473a2d21140700000000000000000000000000000000000000000000000000000000050f1820282e323535353535414e5a6773808c9995887c6f63564a3e35353536434f5c6875818e9a9286796d6154483b353535353535332f292219100700000000000000000915212d39444f585f6262626262615b5e60626466676768686767666563605d6162626262625e574d42372b1f13060000000000000000000000000000000b1824303d4955626e7a87939fa6998d8174685c4f43372b1e1206000000000000000000000000000000060e161c21252727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272725221d160f07000000000000020a11181c2021222222222222222221201c18110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15212c3640484f52535353535353535353504b433a30251a0f04000000000000000000000000040f1a25303a434b50535353535353535353524f4940372c21160a00000000000000000000030e19232e38424b545d666e767d848a8f94989c9fa1a2a3a2a2a2a3a3a19f9d9a96918c8780797e87919b9f958b82786e655b51483e34291e1307000000000000000000000000000000000000000000000000000008121c26303a454f59636d77818b959fa9a2988e847a70665b51473d33291f150b01000000000000000013202c3946535f6c798693a0acaca09386796c5f534639373737373737373838393a3c40444b535d68737f8b97a3aea3978b7f73675b4e4236291d1104000000000c1926323f4c5965727f8c99a6aa9e9184776a5d5144372a1e1104000000000000000000000000000000000000000000040a10151a1f23272b2e313436393a3c3d3e3e3f3f3f3e3e3d3b3a383533302d2925211d18130d070100000000000000000000000000000000000000000000000000000000000a152029323a4044464646464646464644403a322e363d43454646464646464645423d362d24190f04000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c29251f1810070000000000000000000000000000000000000000000000000000000000000000000001040608090b0c0c0d0d0d0d0d0c0b0a080604020000000000000000000000000000000000000000000000000000000000000000000000000000000003060809090909090909090907040000000000000000000000000000000000000000000000000000000000000000000a1723303d4956636f7c8995a2a69a8d8175695d515e6b7784919daa9e92867a6d6155493d3024180c000000121e2b3844515e6a778491998d80736c6c6c665c5e6b788591988c7f726c6c6b655b5044382b1f1206000000000000000000000000000000000000000000000000000000010c16212a32393e4142424242424b5764707d8996988b7e7266594d4242424242424d5966727e8b9895897c7063574a424242424242423f3a342b22180e03000000000000000b1824313d4a55616a6f6f6f6f6f6d665e575658595a5b5b5b5b5a59585860676e6f6f6f6f6e695f53473b2f2216090000000000000000000000000000020f1b2734404c5965717d8a96a3a2968a7d7165584c4033271b0f020000000000000000000000000000050f1820272d3133343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343433312e282119100600000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2c28231c140b020000000000000000000000000000000000000000000000000000000000000000000000000000000000040f1a242e363d434646464646464646464644403931281e1409000000000000000000000000000008131e2831393f4446464646464646464646433e372e251b1005000000000000000000000007121c263039424b545c646c73797e84888c8f9294969798989897969593908d8a86817b756e757f89929c9d948a80766d635a50463b2f23170b00000000000000000004080b0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d141e29333d47515b656f79838e98a2aaa0968c82776d63594f453b31271c1208000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2a2a2a2a2a2a2b2b2c2d303439414c57636f7b8794a0ada79b8f83776a5e5245392c1f1306000000000d192633404c596673808c99a6aa9e9184776b5e5144382b1e110500000000000000000000000000000000000000030910161b21262b2f33373b3e40434547484a4b4b4c4c4b4b4a49484644423f3c3935312d28231e18130d0600000000000000000000000000000000000000000000000000000000030e1720292f3538393939393939393938342f28242c323639393939393939393936322b241b12080000000000000000000000000000010910161a1e1f2020202020202020201f1d19140e06000000000000000000000000000000000000000000000000000000000000000004080b0e101214161718191a1a1a1a191918161513110e0b07040000000000000000000000000000000000000000000000000000000000000000000000040a0f131516161616161616161514100c06000000000000000000000000000000000000000000000000000000000000000915222f3b4855616e7b8794a1aa9d9185796c60545c6976828f9ca8a2968a7d7165594c4034281c0f030000101d2a3643505c6976828f9b8e8275685f5f5b545d6a7683909a8d8174685f5f5b53493f33281c0f0300000000000000000000000000000000000000000000000000000007121d28323c444a4e4f4f4f4f4f4f55616e7a87939a8e8175685c4f4f4f4f4f4f4f4f57636f7c8995988b7e7266594f4f4f4f4f4f4f4e4b453e342a1f1409000000000000000c1926333f4c5965727b7b7b7b7b787069615a524c4d4e4e4e4e4d525a626a72797b7b7b7b7b7063564a3d3024170a000000000000000000000000000006121e2b3743505c6875818d9aa69f93867a6e6155493c3024180b0000000000000000000000000000020d17212a32393d404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040403e39332b22180e030000000a141d262e34383b3b3b3b3b3b3b3b3b3b38342e261d140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000008121c242c32363939393939393939393938342f281f160d020000000000000000000000000000020c161f272e34383939393939393939393937322c251c1309000000000000000000000000000a141e273039424a525a61676d73787c80838688898a8b8b8b8a8a888684817d7975706a646d77818a93939392897f756b62574c3f33271a0e00000000000000030a101518191a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a212b353f49535d67717c86909aa4a89e93897f756b61574d43382e241a10060000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201e1e1e1e1e1e1e1f2123282f3a46535f6c7885919eabab9f93867a6d6054473b2e211508000000000d1a2633404d596673808c99a6ab9e9184776b5e5145382b1e1205000000000000000000000000000000000000070e141b21272c32373b3f43474a4d4f5254555657585858585857565453514e4c4945413d39342f2a241e18110a03000000000000000000000000000000000000000000000000000000050e171e24292b2c2c2c2c2c2c2c2c2b28241d1a21262a2c2c2c2c2c2c2c2c2c2a26211a12090000000000000000000000000000000000050a0e111313131313131313131312110d090300000000000000000000000000000000000000000000000000000000000002070c1014171a1d1f21232425262626262626252423211f1d1a1714100c070200000000000000000000000000000000000000000000000000000000000000070f151b1f22222222222222222222201c1711090100000000000000000000000000000000000000000000000000000000000714202d3a4653606c7986929faca195897c7064585b6874818e9aa7a6998d8175695c5044382c1f130700000f1c2835414e5b6774818d9a9184786b5f53504f5b6875818e9a9083776a5e524f4941372d22170b000000000000000000000000000000000000000000000000000000000b17232f3a444e565a5b5b5b5b5b5b5b5f6b7884919d9084786b5f5b5b5b5b5b5b5b5b5b606d7986929a8e8275685c5b5b5b5b5b5b5b5b5750463c3125190d010000000000000d192633404c5966738088888888827a736b645c554d4642454d555c646c747c84888888887d7063574a3d3024170a00000000000000000000000000000915222e3a47535f6c7884919da89c8f83776a5e5245392d211408000000000000000000000000000008131e29333c444a4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4a443d342a1f1409000006111c262f383f4548484848484848484848453f382f261c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000a121a21262a2c2c2c2c2c2c2c2c2c2c2b28231d160d0400000000000000000000000000000000040d151d23282b2c2c2c2c2c2c2c2c2c2c2a27211b130a0100000000000000000000000000020c151e27303941484f565c62676c707376797b7c7d7e7e7e7d7d7b7a7775716d69645f5b656e78828686868686867d74685b4f4235291c0f000000000000050e151b212426262626262626262626262626262626262626262d37414b56606a747e88929ca6a59b91877d73695f544a40362c22180e0400000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20131111111111121214171e2b3744505d6a7683909da9aea195887b6f6256493c2f231609000000000d1a2733404d596673808d9aa6ab9e9285786b5e5145382b1f120500000000000000000000000000000000020a11181f262c32383d42474b4f5356595c5e6062636465656565646463615f5d5b5855514d4945403b352f29231c150d06000000000000000000000000000000000000000000000000000000050c13181c1f20202020202020201f1c18120f151a1e1f202020202020201f1e1a150f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e13181c202427292c2e2f31323233333333333231302e2c2a2724201c17130d08010000000000000000000000000000000000000000000000000000000008111920272b2e2f2f2f2f2f2f2f2f2f2c28221b130a010000000000000000000000000000000000000000000000000000000006121f2c3845515e6b7784919daaa5998c8074685c596673808c99a5a99d9185786c6054483b2f23170b00000d1a26333f4c5865717e8a9794877b6f63574b4d5966727e8b9893877a6e62564a3e372f261b1106000000000000000000000000000000000000000000000000000000000f1b2734404b56606768686868686868686875828e9a93877a6e68686868686868686868686a7783909c9184786b68686868686868686761584d42362a1d11040000000000000c1925323f4b58646f78828c95948c857d766e675f5850494f575f676e767e868e95948a81766d6155493c3023160a00000000000000000000000000000c1925313e4a56636f7b8894a0a4988c8073675b4e4236291d110500000000000000000000000000000d1924303b454e55595a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59564f463c31251a0e02000b17222d38424a5154555555555555555554514a42382d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810161a1e1f2020202020202020201f1c18120b04000000000000000000000000000000000000030b12171c1e2020202020202020201f1e1b16100901000000000000000000000000000000030c151e272f363e454b51565b6064676a6c6e707171717171706f6d6b6865615d5853535c6670787979797979797973685b4f4235291c0f0000000000040e171f272c31333333333333333333333333333333333333333333333a444e58626c76808a949ea9a3998f857a70665c52483e342a20160b01000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130b0b0b0b0b0c0d0e111d2936434f5c697683909ca9b0a3968a7d7063574a3d3024170a000000000d1a2734404d5a6773818d9aa7ac9f9285786b5f5245382c1f1205000000000000000000000000000000040c141c232a31373d43494e53575c5f6366686b6d6e70717172727171706f6e6c6a6764615e5a55514c46403a342d261f18100800000000000000000000000000000000000000000000000000000001070c1012131313131313131312100c07040a0e11131313131313131313110e0a04000000000000000000000000000000000000000000000000000005090c0e0e0e0e0e0e0e0e0e0e0c09050000000000000000000000000000000000000000000000060d13191f24282c303336383a3c3d3e3f40404040403f3e3c3b393633302c28231e19130d06000000000000000000000000000000000000000000000000000005101a232b32373b3c3c3c3c3c3c3c3c3b39342d251c13080000000000000000000000000000000000000000000000000000000003111d2a3743505d6976838f9ca9a89c9084786b5f5864717e8a97a4aca195887c7064584b3f33271b0e02000b1724303d4956626f7b8794978b8073685c504a57636f7c8894978a7e72675b4f44382d22170c0200000000000000000000000000000000000000000000000000000000101d2a3643505c6872757575757575757575757f8b9896897d7575757575757575757575757575818d9a93877a757575757575757575736a5e5245392c1f13060000000000000a17232f3b47525d66707a838d97978f8880787169625a53596169717880889098968c82786e655b5045392d2114080000000000000000000000000004101c2835414d5a66727e8b97a4a195897c7064574b3f32261a0e010000000000000000000000000000101c2935414c57606667676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676661584d42362a1e1105000f1b27333f4a545c616161616161616161615c544a3f33271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0e111313131313131313131312100c0701000000000000000000000000000000000000000000060b0f1213131313131313131313110e0a05000000000000000000000000000000000000030c151d242c333a40454b4f54575b5d60626364646564646362605e5c5955514d484a545e676c6c6c6c6c6c6c6c6a62574b3f33271a0e00000000010c16202931383d40404040404040404040404040404040404040404040404046505a646e78838d97a1aba1978c82786e645a50463c32271d1309000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2018181818181819191b1d212a3743505d697683909ca9b0a4978a7d7063574a3d3024170a000000000e1a2734414d5a6774818e9aa7ac9f9286796c5f5246392c1f13060000000000000000000000000000050e161e262d353c42494f545a5f63686c6f727577797b7c7d7e7e7e7e7e7d7c7a797674716d6a66615c57514c453f38312a221a120a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b1116191a1a1a1a1a1a1a1a1a1a1916110b0400000000000000000000000000000000000000020a11181f252a2f34383c3f424547494a4b4c4c4d4d4d4c4b4a494745423f3c38342f2a241e171009010000000000000000000000000000000000000000000000010c17222c353d4347494949494949494948453f372e241a0f04000000000000000000000000000000000000000000000000000000000f1c2835424e5b6874818e9aa0a0a094887b6f635763707c8996a0a0a0988c8074675b4f43372b1e1206000815212e3a46535f6b7784909b9084786d61564b54606c7885919b8f83776c60554a3e34291e130800000000000000000000000000000000000000000000000000000000111e2a3744515d6a7782828282828282828282828a97998c828282828282828282828282828282828c98968982828282828282828282796d6053463a2d20130700000000000007131f2b36414b545e68717b858e9899928a837b746c655d636b737b838a929a978e847a70665c53493f34281d11050000000000000000000000000007131f2c3844515d6976828e9ba79e9285796d6054483b2f23160a000000000000000000000000000000121f2c3845515d69727373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373726a5e5246392d20130700121e2b37434f5b666d6e6e6e6e6e6e6e6e6d665b4f43372b1e1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b131a21282e343a3f44484b4e515355565758585857575554524f4c4945413c424c555c5f5f5f5f5f5f5f5f5e5850453a2f23170b0000000007121d28323b43494c4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d525c66717b858f99a3a89e948a80766c62584d43392f251b10050000000013202c3946535f6c798693a0acaca09386796c5f5346392c252525252525252526272a2d323a46525f6b7884919eaab0a3968a7d7063574a3d3024170a000000000e1b2834414e5b6774818e9aa7ac9f9286796c5f5346392c20130600000000000000000000000000060e17202830383f464d545a60656b6f74787b7e82848688898a8b8b8c8b8b8a89878583817d7a76726d68635d57504a433b342c241c130a01000000000000000000000000000000000004070808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080806020000000000000000000000070f161d22252727272727272727272725221d160f060000000000000000000000000000000000030c141b232930363b4044484c4f515355575859595959595958575654524f4c4844403b352f29221b130b030000000000000000000000000000000000000000000005111d28333e474e54555555555555555555504940362c201509000000000000000000000000000000000000000000000000000000000e1a2733404d596673808c93939393938b7f73675a616e7b8793939393939084776b5f53473a2e2115080005121e2a37434f5b67737f8b9795897e72675c51505c6874808c9894887d71665b50453a3025190e02000000000000000000000000000000000000000000000000000000111e2a3744515d6a77848f8f8f8f8f8f8f8f8f8f929b9d938f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f939c9b928f8f8f8f8f8f8f8f8f86796d6053463a2d201307000000000000020e19242f39424c565f69737c8690999c958d867e766f676d757d858d959c998f857c72685e544b41372d22170c00000000000000000000000000000a16232f3b4854606d7985929ea79a8e8275695d5144382c1f130700000000000000000000000000000013202c3946535f6c7981818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181817a6d6154473a2e2114070013202c3946525f6c777b7b7b7b7b7b7b7b776c5f5246392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407080808080808080808080704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010810171d23292e33373b3f424447484a4a4b4b4b4b4a49474543403d3935303a434b505353535353535353524d463e34291e1207000000000c18232f3a444d54595959595959595959595959595959595959595959595959595959595f69737d87919ba5a69c92887e74695f554b41372d22170b0000000013202c3946535f6c798693a0acaca09386796c5f534639323232323232323232333436393d434c57626e7a8793a0acafa295897c6f6356493d3023160a000000000e1b2835414e5b6774818e9ba8aca09386796c5f5346392d201306000000000000000000000000050e182029323a424951585f656b71767b8084888b8e91939496979898989898979594928f8d8a86827d79746e68625b544d463e362e251c130a010000000000000000000000000000060c101315151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151514120f0a04000000000000000006101921282e3234343434343434343434322d2821180f06000000000000000000000000000000040d151e262d343b41474c5055585b5e60626365656666666666656462605e5b5854504b46413a342d251d150d040000000000000000000000000000000000000000000916222e3a454f59606262626262626262615b52483d3125190d000000000000000000000000000000000000000000000000000000000c1925323f4b5864717e8686868686868683776a5e606c7986868686868686867b6f6356493d3023160a00020e1a27333f4b57636e7a86919a8f84786d63584d58646f7b8792998e83776c61574c41362a1e1206000000000000000000000000000000000000000000000000000000111e2a3744515d6a7784919c9c9c9c9c9c9c9c9c9da0a59e9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9ea0a39d9c9c9c9c9c9c9c9c9386796d6053463a2d2013070000000000000008131d27303a444d57616a747d87919a9f9790888179727880878f979f9b91877d736a60564c42392f251b110600000000000000000000000000010e1a26323f4b5764707c8995a1a3978b7e7266594d4135281c100300000000000000000000000000000013202c3946535f6c79868d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d877a6d6154473a2e2114070013202c3946535f6c798688888888888886796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c10131515151515151515151513100c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c12181d23272b2f3335383a3c3d3e3e3e3e3e3d3c3a393634302d292831393f44464646464646464645423c342c22170d01000000000f1c2834404b565f6566666666666666666666666666666666666666666666666666666666666b758089939ea8a49a90867b71675d53493e33281c100300000013202c3946535f6c798693a0acaca09386796c5f53463e3e3e3e3e3e3e3e3e3f3f414345494e555e68737e8b97a3afaca094877a6e6154483b2f221509000000000f1b2835424e5b6875828e9ba8ada09386796d6053463a2d2013070000000000000000000000040e17202a323b444c545b626970767c82878c9094979a9d9fa1a3a4a4a5a5a5a4a3a2a09e9c9996928e8a857f79736d665f58504840372e251c1309000000000000000000000000020a11181c20212222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211f1b150f07000000000000020d18222b33393e404141414141414141403e39322a21170d0200000000000000000000000000030c161f2730373f464c52585c6164686a6d6f707172737373737372706f6d6b6864615c57524c453e372f271f160d0300000000000000000000000000000000000000000c1825313e4a56616b6f6f6f6f6f6f6f6f6d64594d4135281c0f030000000000000000000000000000000000000000000000000000000a1724303d4a56636f787979797979797979756a5e5e6a767979797979797979786e6256493c3023160a00000a17232e3a46525e6975808b93938a7f74695f54535f6a76818d9393897e73685e52473b2e221509000000000000000000000000000000000000000000000000000000111e2a3744515d6a77849191919191919191919191949d9d9491919191919191919191919191919191959e9b93919191919191919186796d6053463a2d20130700000000000000010b151e28323b454f58626b757f89929ca29a938b847c828a9199a19c93897f756b61584e443a30271d1309000000000000000000000000000005111d2936424e5b6773808c98a5a094877b6f62564a3e3125190c0000000000000000000000000000000013202c3946535f6c7986939a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a94877a6d6154473a2e2114070013202c3946535f6c798693959595959386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000020a11181c2021222222222222222221201c18110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c12171b1f2326292b2d2f303131323231302f2e2c2a2724211d1f272e343839393939393939393836312a221910060000000000111e2b3744505c68717373737373737373737373737373737373737373737373737373737373737377828c96a1aca2978d83796f655b5044382c1f130600000013202c3946535f6c798693a0acaca09386796c5f534b4b4b4b4b4b4b4b4b4b4c4c4d4f52555a6067707a85909ba7b3a99d9184786b5f5246392d201407000000000f1c2835424f5b6875828f9ca8ada094877a6d6053473a2d20140700000000000000000000020c162029323c444d565e656d747b82888d93989ca0a4a7aaa8a5a3a2a1a1a0a1a1a2a4a6a8a8a5a29e9a95908b857e787169625a524940372e251b120800000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2b2620191108000000000008141f2a343d444a4d4d4d4d4d4d4d4d4d4d4a443c33291f1308000000000000000000000000010b151e283139414951575e63686d717477797b7d7e7f808080807f7e7d7b797774716c68635d575049413931281f150b01000000000000000000000000000000000000000d1a2633404d5966727c7c7c7c7c7c7c7c76695d5043372a1d10040000000000000000000000000000000000000000000000000000000915222e3a47525d676c6c6c6c6c6c6c6c6c6b635959646b6c6c6c6c6c6c6c6c6c675d52463a2e211508000006121e2a35414d58636e7a85868686867b7064574e5965707b86868686857a6f63564a3d3023170a000000000000000000000000000000000000000000000000000000111e2a3744515d6a778484848484848484848484848b98978b848484848484848484848484848484848c99968a848484848484848484796d6053463a2d2013070000000000000000030c162029333d46505a636d76808a939da59d968e878c949ba39e948a81776d635950463c32281e150b0100000000000000000000000000000814202d3945525e6a77838f9ca89d9084786b5f53463a2e2215090000000000000000000000000000000013202c3946535f6c7986939e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e94877a6d6154473a2e2114070013202c3946535f6c798693a0a2a2a09386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2c28231c140b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001060b0f13171a1c1f21222324252525242423211f1d1b181411151d23282b2c2c2c2c2c2c2c2c2c29251f181007000000000000121f2c3845525f6b7880808080808080808080808080808080808080808080808080808080808080808086929faca99f958b81776c6054473b2e21150800000013202c3946535f6c798693a0acaca09386796c5f585858585858585858585858595a5c5e61656b7179828c96a1acb0a4998d8174685c5043372a1e1105000000000f1c2936424f5c6975828f9ca8ada094877a6d6154473a2e211407000000000000000000000a141e28323b444e565f6770777f868d93999ea3a8aaa6a29e9b99979594949494949697999b9ea2a6aaa6a19c969089827b746c645b524940372d241a10060000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a37322b231a1006000000010d1925303b464f565a5a5a5a5a5a5a5a5a5a564e453b3024190d01000000000000000000000008131d27303a434b535b62696f74797d818386888a8b8c8c8d8d8d8c8b8a888684817d78746e68625b534b433a31271d1309000000000000000000000000000000000000000d192633404c5966738089898989898983776a5d5044372a1d110400000000000000000000000000000000000000000000000000000006121e2a36414c555c5f5f5f5f5f5f5f5f5f5e5951525a5f5f5f5f5f5f5f5f5f5f5c554b41352a1e12050000010d1925303c47525d68737979797979797064574b535f6a747979797979786f63564a3d3023170a000000000000000000000000000000000000000000000000000000111d2a3743505c697377777777777777777777777c8895988b7f77777777777777777777777777777d8a96968a7d7777777777777777756b5f5246392c201306000000000000000000040e17212b343e48515b646e78818b959ea7a09894969ea5a0968c82786f655b51473e342a20160d030000000000000000000000000000000b1724303c4955616e7a86939fa6998d8174685c4f43372b1e12060000000000000000000000000000000013202c3946535f6c7986929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292877a6d6154473a2e2114070013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b3b38342e261d140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003070a0d1012141617181818181817161513110e0b08050b12171c1e20202020202020201f1d19140e0600000000000000121f2c3845525f6b78858d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8e97a2aeb1a79d93887b6e6155483b2e22150800000013202c3946535f6c798693a0acaca09386796c656565656565656565656565656667686b6e71767c838b949ea8b2a99e93887c7064584c4034271b0f0200000000101c2936434f5c6975828f9ca9aea194877a6d6154473b2e21140800000000000000000007111c26303a444d5660687179828991979ea4aaa9a39e9a95928f8c8a898887878788898a8d8f92969a9ea4a9a7a19b948d867e756d645b52493f362c22170d020000000000000006111c262f383f4548484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484847433d352c22170c01000004111d2935414d57616667676767676767676660574c4135291d100400000000000000000000040f1a242f39424c555d656d747a8085898d909294969798999a9a999998979593908d8984807a736c655d554c43392f251a10050000000000000000000000000000000000000c1926323f4c5965727e8c96969696908376695c5043362a1d1003000000000000000000000000000000000000000000000000000000020e19252f3a434b50535353535353535353524e48484e52535353535353535353504a43392f24190d0200000008141f2a36414c5761696c6c6c6c6c6c685e53484d58626a6c6c6c6c6c6c675d52473a2e2215090000000000000000000000000000000000000000000000000000000f1b2834404c5761696a6a6a6a6a6a6a6a6a6a6d7986929b8e82756a6a6a6a6a6a6a6a6a6a6a6a6e7a8793998c80736a6a6a6a6a6a6a6963594e42362a1e110500000000000000000000050f19222c363f49525c666f79838c96a0a0a0a0a0a0a0988e847a70665d53493f352c22180e04000000000000000000000000000000000f1b2733404c5865717d8a96a0a0968a7d7165584c4033271b0f020000000000000000000000000000000013202c3946535f6c7985858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585857a6d6154473a2e2114070013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f383f4548484848484848484848453f382f261c1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030607090a0b0b0b0b0b0a090806040100000000060b0f12131313131313131312110d09030000000000000000121f2c3845525f6b7885929a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9aa0a9b3b9aea295887b6e6155483b2e22150800000013202c3946535f6c798693a0acaca09386797171717171717171717171717172727375777a7d82878e959da6afaba2988d82776b6054483c3024180b0000000000101d2936434f5c697683909ca9aea194887b6e6154483b2e2115080000000000000000030e19232e38424c565f68727a838b939ba2a9aba49e98928e898582807d7c7b7a7a7a7b7c7e8083868a8e93989ea4aba69f9790887f766d645b51483e33291f140a000000000000000b17222d38424a51545555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555534e473e34291d1206000006131f2c3945525e6972747474747474747472695d5145382c1f1206000000000000000000000b16212c36404b545e676f777e858b9195999c9fa1a3a1a0a09f9f9fa0a1a2a19f9c9995908b857e776f675e554b41372c21160b0000000000000000000000000000000000000c1825323f4b5865717e8b98a2a29c8f8275695c4f4236291c10030000000000000000000000000000000000000000000000000000000008131e2831393f4446464646464646464645423d3d4345464646464646464646443f3931271d130800000000030e19242f3a454f585e5f5f5f5f5f5f5c564d424650595e5f5f5f5f5f5f5c554c41362a1e12060000000000000000000000000000000000000000000000000000000c1824303b464f575c5d5d5d5d5d5d5d5d5d5e6a76838f9c9184786b5f5d5d5d5d5d5d5d5d5d5f6b7884919b8f83766a5d5d5d5d5d5d5d5951483d32261a0e02000000000000000000000007101a242d37404a545d67717a848e9393939393939390867c72685e554b41372d231a10060000000000000000000000000000000000111e2a37434f5c6874818d93939393867a6e6155493c3024170b0000000000000000000000000000000000131f2c3945525e6b757878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878766c6053473a2d2114070013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38424a5154555555555555555554514a42382d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2c3845525f6b7885929fa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a7abacacacaca295887b6e6155483b2e22150800000013202c3946535f6c798693a0acaca093867e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7f808284868a8e93999fa7afaaa29990867b70655a4f43372c2014080000000000101d2a3643505d697683909da9aea195887b6e6155483b2e22150800000000000000000a15202a353f4a545e68717a848d959da5ada8a19a938d87827d797673716f6e6d6d6d6e6f717376797d82878d939aa1a8a9a299918980766d63594f453b30261b10050000000000000f1b27333f4a545c6161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161615f5950453a2e22160a00000713202d3a4653606d798181818181818181796c5f5346392c20130600000000000000000005111c27323d48525c667079818990979ca1a49f9c9996959493929292939496989b9ea2a19c969089817970675d53483e33281d110600000000000000000000000000000000000b1824313e4b5764717e8b97a4a89b8e8275685b4f4235281c0f0200000000000000000000000000000000000000000000000000000000010c161f272e343839393939393939393939363232363939393939393939393937342e271f150c01000000000008131e29333d464d51535353535353504b443b3e474e52535353535353504b433a2f25190e0200000000000000000000000000000000000000000000000000000007131e29343d464c505151515151515151515b6774808d9993877a6e615551515151515151515c6975828e9a9285796c605351515151504d473f362b20150a0000000000000000000000000008121b252e38424b555f68727c8586868686868686867d746a60564c43392f251b120800000000000000000000000000000000000013202c3946525f6b7884868686868683766a5e5245392d2014080000000000000000000000000000000000111e2a36424e59636a6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6a645a4f44372b1f12060013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000f1b27333f4a545c616161616161616161615c544a3f33271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104070a0c0e10111112121111100f0d0b08050200000000000000000000000000000000000000000000000000000000121f2c3845525f6b7885929fa0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a095887b6e6155483b2e22150800000013202c3946535f6c798693a0acaea2968d8b8b8b8b8b8b8b8b8b8b8b8b8b8b8c8c8d8e9093969a9ea4aaaca69f9890877e74695f54493e32271b0f030000000000111d2a3744505d6a7783909daaaea295887b6f6255483c2f2215090000000000000005101b26313c47515b66707a838d969fa7afa79e968f88817b76716d6966646261616161626365676a6d71767b82888f969ea7aba39b92897f756b61574d42382d22170c010000000000121e2b37434f5b666d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6b61564b3e3226190c00000713202d3a4653606d79868e8e8e8e8e8e86796c5f5346392c2013060000000000000000000b16222d39444f5a646e78828b939ba2a49e98938f8c8a8887868686868687898b8e92969ca2a19a938b82786f655a4f44392e22160b00000000000000000000000202010000000b1724313d4a5764707d8a97a4a89b8e8174675b4e4135281b0e020000010202010000000000000000000000000000000000000000000000040d151d23282b2c2c2c2c2c2c2c2c2c2c2a26262a2c2c2c2c2c2c2c2c2c2c2b28231c150d03000000000000010c17212b343b414546464646464644403a32353c4245464646464646443f3931281e130800000000000000000000000000000000000000000000000000000000020d18222b343b404344444444444444444c5865717d8a96968a7d7164584b4444444444444d5966727f8b9894887b6f63564a44444444413c352d241a0f04000000000000000000000000000009131d263039434d56606a73797979797979797979756b62584e443a31271d130900000000000000000000000000000000000000131f2c3946525f6b767979797979797973675b4e4236291d11040000000000000000000000000000000000121f2b3844515d6871727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727271695e5246392d2013070013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000121e2b37434f5b666d6e6e6e6e6e6e6e6e6d665b4f43372b1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005090d111416191b1c1d1e1e1e1e1e1d1b191715110e0a060100000000000000000000000000000000000000000000000000121f2c3845525f6b788592939393939393939393939393939393939393939393939393939393939393939393939393939393887b6e6155483b2e22150800000013202c3946535f6c798693a0acb3a89f99989898989898989898989898989898999a9b9d9fa2a6aaa9a5a09b958e867e756b62584d43382c21160a000000000000111e2a3744515d6a7784909daaafa295887b6f6255493c2f221609000000000000000b16212d38434d58636d77828c959fa8afa69d958c857d76706a65615d5a5856555454545556585a5d61656a70767d858c959da6ada49b91877d73695e54493e33281d1207000000000013202c3946525f6c777b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b73675a4d4134271a0e00000713202d3a4653606d7986939a9a9a9a9386796c5f5346392c201306000000000000000004101b27333e4a55606b76808a949da5a29a938c8783807d7b7a79797979797b7c7e82868b90979fa59d948b81766c61564a3f33271b0f0300000000000001060a0d0e0e0e0d0c0b0a1723303d4a5663707d8a96a3a79a8d8174675a4d4134271b0e0a0b0c0d0e0f0d0b0702000000000000000000000000000000000000000000030b12171c1e2020202020202020201f1e1a1a1e1f2020202020202020201e1c17120b030000000000000000050f19222a30353839393939393938342f282b31363939393939393938342e271f160c0100000000000000000000000000000000000000000000000000000000000610192229303437373737373737373c4955626e7b8794998c8073675a4e42373737373e4a5763707c8995978b7e7265594c4037373735312b231b1208000000000000000000000000000000010b141e27313b444e5861696c6c6c6c6c6c6c6c6c6b635a50463c32281f150b0100000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6961564a3e32261a0d01000000000000000000000000000000000013202c3946535f6c797f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7a6d6154473a2e2114070013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946525f6c777b7b7b7b7b7b7b7b776c5f5246392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001060c1115191d20232527292a2b2b2b2b2a29282624211e1a16120d07020000000000000000000000000000000000000000000000121f2c3845525f6b788586868686868686868686868686868686868686868686868686868686868686868686868686868686867b6e6155483b2e22150800000013202c3946535f6c798693a0acacaca9a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a6a8a9a7a5a3a09d99948f8a837c746c635a50463b31261b1005000000000000111e2a3744515d6a7784919eaaaca296897c6f6255493c2f22160900000000000005111c27333e49545f6a747f89949ea7b1a79d948b837a736c655f5a55514e4b4948474747484a4b4e51555a5f656b737a838b949da7ada3998f857b70655b50453a2e23180c010000000013202c3946535f6c79868888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888174675a4d4134271a0e00000713202d3a4653606d798693a0a7a7a09386796c5f5346392c20130600000000000000000814202c38444f5b66727d88929ca6a2999088817b7773716f6d6c6c6c6c6d6e7072767a7f858d959ea69d93887d72675b4f44382b1f13070000000000050c1216191b1b1a191817161623303c4956636f7c8996a2a69a8d8073675a4d4034271a161718191a1b1b1a17130e0700000000000000000000000000000000000000000000060b0f1213131313131313131313110e0e1113131313131313131313120f0b0600000000000000000000000710181f25292c2c2c2c2c2c2c2b28231d20262a2c2c2c2c2c2c2c2b28231d150d04000000000000000000000000000000000000000000000000000000000000000710181e24282a2a2a2a2a2a2a2d3a46535f6c7885919c8f83766a5d5144382b2a2f3b4854606d7986929a8d8174685b4f42362a2a2825201911090000000000000000000000000000000000020c151f29323c464f585e5f5f5f5f5f5f5f5f5f5e5951483e342a20170d0300000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5d574f453a2e22160a00000000000000000000000000000000000013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c877a6d6154473a2e2114070013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798688888888888886796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c12171c2125292c2f323436373838383837363533302d2a26221d18130d0600000000000000000000000000000000000000000000121f2b3845515e6a76797979797979797979797979797979797979797979797979797979797979797979797979797979797979776d6154483b2e21150800000013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09f9e9e9c9b999794918d89847e78716a625a51483e342a1f150a00000000000000111e2b3844515e6b7784919ea0a0a096897c6f6356493c302316090000000000000a16222d38444f5a66717b86919ba5b0a99f958b82797169615a544e4945413e3d3b3a3a3b3b3d3f4245494e545a61687179828b959fa9aba1978c82776c61564b4034291d12060000000013202c3946535f6c798693959595959595959595959595959595959595959595959595959595959595959595959595959595959595958e8174675a4d4134271a0e00000713202d3a4653606d798693a0adaca09386796c5f5346392c20130600000000000000000c1824303c4854606c77838e99a4a59b90877e76706b67646261605f5f5f60616366696e747b838c96a0a49a8f83786c6054483c2f23170a00000000070f171d22262828272625242322222f3c4955626f7b8895a2a6998c807366594c403326222324252627282827241f1911090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d14191d1f2020202020201f1c1812151a1d1f2020202020201e1c17120b03000000000000000000000000000000000000000000000000000000000000000000060d13181b1d1e1e1e1e1e1e2b3743505c6975828e9b9285796c6053473a2e222c3845515e6a7783909c9084776b5e5245392c201c19140e0700000000000000000000000000000000000000030d17202a343d464d51535353535353535353524e483f362c22180e050000000000000000000000000000000000000000000a16212c3740484f5253535353535353514d453d33281d120600000000000000000000000000000000000013202c3946535f6c7986939999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999994877a6d6154473a2e2114070013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693959595959386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a10171d23282d3135393c3e414243444545444443413f3d3a36322e29241e18110a030000000000000000000000000000000000000000101d2936424e59646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c665c5145382c20130700000013202c3946535f6c798693939393939393939393939393939393939393939393929291908e8c8a8784817d78736d67605850483f362c22180e0300000000000000121e2b3845515e6b7885919393939393897d7063564a3d3023170a0000000000040f1b27323e4a55606c77828d98a3adaca1978d837970675f574f48423d393532302f2e2e2e2f303235393d42484f575f677079838d97a2aca99e94897e73675c51453a2e23170b0000000013202c3946535f6c798693a0a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a29a8e8174675a4d4134271a0e00000713202d3a4653606d798693a0adaca09386796c5f5346392c20130600000000000000000f1b2834404c5965717c88949fa89f94897e756c655f5b585554535252535355575a5d6269717a848f9aa6a094887c7064584b3f3226190d00000006101921282e32353534333231302f2e2f3b4855616e7b8895a1a5988c7f7265594c3f322d2e2f30313233353533302a231b1209000000000000000000000000000000000000030608090a0a0a0908060300000000000000000000000000000000000000000000000000000000000000000000000002080d101213131313131312100c07090e1113131313131313120f0b0600000000000000000000000000000000000000000000000000000000000000000000000002070c0f1111111111111b2834414d5a66737f8c9894887b6f63564a3d31242936424f5b6874818d9993867a6d6154483b2f22160c0803000000000000000000000000000000000000000000050e18222b343c414546464646464646464645423d362d241a10060000000000000000000000000000000000000000000005101a252e373e43464646464646464645413b342b21170c0100000000000000000000000000000000000013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a094877a6d6154473a2e2114070013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0a2a2a09386796c5f5346392c2013060202020202020202020201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d141b22282e34393d4245484b4d4f5051515151514f4e4c4946423e3a352f29231c150d05000000000000000000000000000000000000000e1a26313d48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5b544a3f34281c100400000013202c3946535f6c7986868686868686868686868686868686868686868686868685848382807d7b7874716c67625c554e463e362d241a10060000000000000000121f2c3845525e6b7885868686868686867d7063564a3d3024170a00000000000814202c38434f5b66727d88939fa9afa59a8f857b71675e554d453e37312d29252322212121222426292d32373e454d555e67717b85909ba5b0a59a8f84796d62564b3f33281c100400000013202c3946535f6c798693a0acaeaea9a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59a8e8174675a4d4134271a0e00000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000121e2b3744505c6975818d97999c998e82776c635a534e4b49474646464647484a4d52575f68727e8a96a2a5988c8073675a4e4135281c0f0200020d18222b333a3f4141403f3e3d3c3b3a393b4854616e7a8794a1a5988b7e7265584b3f393a3b3c3d3e3f404141403b352d241b1006000000000000000000000000000003080c0f121416171717161412100c080400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323e4a5763707c8995978b7e7265594c40332727333f4c5865717e8a9795897c7063574b3e3225190c000000000000000000000000000000000000000000000000061019222a3035383939393939393939393936322b241b120800000000000000000000000000000000000000000000000009131c252c323739393939393939393835302922190f050000000000000000000000000000000000000013202c3946535f6c7986939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393877a6d6154473a2e2114070013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130f0f0f0f0f0f0f0f0f0f0e0e0c0b090704010000000000000000000000000000000000000000000000000000000000000000000000000000070f171f262d333a3f45494e5155575a5c5d5e5e5e5e5d5c5a5856524f4a46403b342e271f170f070000000000000000000000000000000000000915202b3640484e52535353535353535353535353535353535353535353535353535353535353535353535353535353535353524f4a42382e23180c00000000131f2c3946525f6b767979797979797979797979797979797979797979797979797877767573716e6c6864605b56504a433c342c241b1208000000000000000000121f2b3845515e6a767979797979797979786f63564a3d3023170a00000000000d1925303c4854606b77838e9aa5b0a99e93887e73695f554c433b332c26211c1917151414141517191d21262c333b434c555f69747e89949faaaca1958a7e73675c5044382c21150900000013202c3946535f6c798693a0acb3a89f99989898989898989898989898989898989898989898989898989898989898989898989898988e8174675a4d4134271a0e00000713202d3a4653606d798693a0adaca09386796c5f5346392c201306000000000000000013202c3946535f6c7885888a8d8f92897d71665b5148433f3c3b3a3939393a3b3e41464d56616d7986929fa89b8f8276695c5043372a1d11040008141f2a343d454b4e4e4d4c4b4a49484746454754606d7a8794a0a4988b7e7164574b45464748494a4b4c4d4e4e4c473f362d22170c000000000000000000000000040a0f14181c1f212324242423211f1c1914100b050000000000000000000000000000000000000407080909090909080705010001050708090909090908070401000000000000000000000000000000000407080909090909080705010000000000000000000000000000000000000000000000000000000000000000000916222f3b4854616d7a86939a8d8174685b4f42362a24303d4956626f7b8894988c7f73665a4d4134281b0f020000000000000000000000000000000000000000000000000710181f25292c2c2c2c2c2c2c2c2c2c2c2a26211a120900000000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c29251f181007000000000000000000000000000000000000000013202c3946535f6c7986868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686867a6d6154473a2e2114070013202c3946535f6c798693a0acaca09386796c5f5346392c201307070707070707070707070605040200000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201c1c1c1c1c1c1c1c1c1c1c1b1a19181613110e0a070200000000000000000000000000000000000000000000000000000000000000000000071019212930383e454b50555a5e616466686a6b6b6b6b6a696765625f5b56514c463f383129211910070000000000000000000000000000000000040f1a242e363d434546464646464646464646464646464646464646464646464646464646464646464646464646464646464646433f382f261c110600000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6b6a686664625f5c5854504b453f39322a221a120900000000000000000000101d2936424e59646b6c6c6c6c6c6c6c6c6c675d52473a2e2215090000000004111d2935414d5965707c88949fabafa3988d82766c61574d433a3129211b15100d0a08080708090a0d10151b2129313a434d57626c77838e99a4b0a69b8f84786c6155493d3125190d00000013202c3946535f6c798693a0acaea2968d8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8174675a4d4134271a0e00000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000131f2c3945525e6b75797b7e81838585786c6054493f3732302e2d2c2c2c2d2f31353b45515e6a7784919daa9d9184776b5e5144382b1e1105000d1925303b464f565a5b5a59585756555453525153606d798693a0a4978a7d7164575051525354555757595a5b5b5851483e33281c100400000000000000000001080f151b2024282b2e2f3030302f2e2b2825201b161009020000000000000000000000000000070c11141515151515151514110d080d11141515151515151514110c0700000000000000000000000000070c11141515151515151514110d0801000000000000000000000000000000000000000000000000000000000000000713202c3945515e6a7783909c9084776b5e5245392c212e3a47535f6c7885919b8e8275695c5043372b1e120500000000000000000000000000000000000000000000000000060e14191d1f2020202020202020201f1e1a150f08000000000000000000000000000000000000000000000000000000010910161a1e1f202020202020201f1d19140d06000000000000000000000000000000000000000000131f2c3946525f6b767979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979776c6053473a2d2114070013202c3946535f6c798693a0acaca09386796c5f5346392c201414141414141414141414141312100f0c0a0704000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2828282828282828282828282827262422201d1a17130e0a0500000000000000000000000000000000000000000000000000000000000000071019222b333b424950565c61666a6d7073757677787877777574716e6b67625d57514a433b332b22191006000000000000000000000000000000000008121b242c3236393939393939393939393939393939393939393939393939393939393939393939393939393939393939393937332d261d140a00000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5e5d5b5a585653504c48443f3a342e272018100800000000000000000000000e1a26313d48525a5f5f5f5f5f5f5f5f5f5f5c554c41362a1e1206000000000814212d3945515d6975818d99a4b0a99e92877b70655a50453b31281f17100904000000000000000001040910171f28313b46505b66717c88949fabaca095897d7165594d4135291d1004000013202c3946535f6c798693a0acaca093867e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e74675a4d4134271a0e00000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000111e2a36424e59636a6d6f717476797b75695c5044382d26232120201f202123292f3844515d6a7784909daa9e9285786b5e5145382b1e120500101d2935414d58616768676665636261605f5e5d5c5f6c7986929fa3968a7d70635c5d5e5f606162636465666768635a5045392d2014070000000000000000040b131a20262b3034383a3c3d3d3d3c3a3835312c27211b140d050000000000000000000000020b12181d2022222222222222201d1913181d2022222222222222201d18120b03000000000000000000020b12181d2022222222222222201d19130c0400000000000000000000000000000000000000000000000000000000000004101d2936424f5b6874818d9a93867a6d6154483b2f232b3744505d6976828f9b9185786c5f53463a2d211408000000000000000000000000000000000000000000000000000003080d101213131313131313131313110e0a04000000000000000000000000000000000000000000000000000000000000050a0e11131313131313131312100d080200000000000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b655b5044382b1f12060013202c3946535f6c798693a0acaca09386796c5f5346392c21212121212121212121212120201f1d1b191613100c0804000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f53463935353535353535353535353535353432312f2c2a26231f1a15100b0500000000000000000000000000000000000000000000000000000000061019222b343d454c545b61676d72767a7d808283848585848482807e7b77736e68625c554d453d342b22180e04000000000000000000000000000000000009121a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b27221c140b0200000000000a16212c3740484f525353535353535353535353535353535353535353535353535251504f4d4b494643403c38332e29231c150e060000000000000000000000000915202b3640484e52535353535353535353504b433a2f25190e02000000000c1824303d4955616d7986929da9b0a4988d81756a5f54493e33291f160d0500000000000000000000000000050d161f29343f4a55606b77838e9aa6b1a5998e8275695d5145392d201408000013202c3946535f6c798693a0acaca093867971717171717171717171717171717171717171717171717171717171717171717171717171716d63584c3f33261a0d00000713202d3a4653606d798693a0adaca09386796c5f5346392c20130600000000000000000e1a26323d4851595e606265676a6c6e6c63584d4034281c17191c1f23262a2f343a414a54606c7985929eab9e9184786b5e5145382b1e120500121f2c3845515e697374737271706f6e6d6c6b6a69686b7885929fa296897c6f68696a6b6c6d6e6f7071727374746c6155483c2f23160900000000000000050e161d242b32373c404447494a4a4a494744413d38322c261f170f07000000000000000000020c141c23292d2f2f2f2f2f2f2f2d29241e24292d2f2f2f2f2f2f2f2d29231d150c0300000000000000020c141c23292d2f2f2f2f2f2f2f2d29241e160d040000000000000000000000000000000000000000000000000000000000010e1a2733404c5965717e8a9795897c7064574b3e32252835414e5a6773808c9994877b6e6255493c3023170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5b53493f33281c0f030013202c3946535f6c798693a0acaca09386796c5f5346392e2e2e2e2e2e2e2e2e2e2e2e2e2d2c2b2a282523201c18140f0a0500000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346424242424242424242424242424241403f3d3b3936332f2b26211c1610090200000000000000000000000000000000000000000000000000040e18222b343d464f575e656c73787d8286898c8e9091919291908f8d8a87837e79746d665f574f463d342a20160c010000000000000000000000000000000000080f151a1e1f202020202020202020202020202020202020202020202020202020202020202020202020202020202020201e1b17110a0200000000000005101a252e373e434646464646464646464646464646464646464646464646464645454342413f3c3a3734302c27231d17110b0400000000000000000000000000040f1a242e363d4345464646464646464646443f3931281e130800000000020f1b2734404c5965717d8a96a2aeaca094887c7065594e42372c22170d04000000000000000000000000000000040e18222d38434f5b66727e8a96a2aeaa9e9286796d6155493c3024170b000013202c3946535f6c798693a0acaca09386796c65656565656565656565656565656565656565656565656565656565656565656565656565625b52473b2f23170b00000713202d3a4653606d798693a0adaca09386796c5f5346392c20130600000000000000000a15212b363f474e515356585b5d6062605a51473c30241f2225282b2f33373b40454c535c66717c8895a1a99c9083766a5d5044372a1e11040013202c3946535f6c7981807f7e7d7c7b7a7978777675747885919ea295887c737475777779797b7c7d7e7e80817d7063564a3d3023170a000000000000050e171f272f363d43484c5053555657575553514d49443e3730292119100700000000000000000a141e262e34393b3c3c3c3c3c3b39352f282f35393b3c3c3c3c3c3b39352e271e140a000000000000000a141e262e34393b3c3c3c3c3c3b39352f281f160c0100000000000000000000000000000000000000000000000000000000000b1824303d4956626f7b8894988c7f73665a4d41342826323e4b5764707d8996968a7d7164584c3f33261a0d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000206090a0a0a0a0a0a0a0a0a0a080400000000000000000000000000000407090a0a0a0a0a0a0a0a0a0a090703000000000000000a16212c3740484f525353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353524f4941372d22170b000013202c3946535f6c798693a0acaca09386796c5f53463a3a3a3a3a3a3a3a3a3a3a3a3a3a3a39383634322f2c2824201b16100a040000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f534f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4e4d4c4a4845423f3b37322d27211b140d060000000000000000000000000000000000000000000000010b16202a343d464f58606970777e84898e9296999b9c9e9e9e9e9d9b9997938f8a857f78716961584f463c32281d1308000000000000000000000000000000000000040a0e111313131313131313131313131313131313131313131313131313131313131313131313131313131313131313120f0b0600000000000000000009131c252c323739393939393939393939393939393939393939393939393939393837363432302d2b2724201c17120c060000000000000000000000000000000008121b242c32363939393939393939393938342e271f160c010000000005121e2a3743505c6875818d9aa6b2a89c9083776b5f54483c31261b1005000000000000000000000000000000000006111c27323e4a56616d7986929eaaaea296897d7165584c3f33271a0e010013202c3946535f6c798693a0acaca09386796c5f58585858585858585858585858585858585858585858585858585858585858585858585856514940352a1f130700000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000040f1a242d363d424547494c4e515355544f483f352b282b2e3134383b3f43474b50575d656e78828d99a5a6998d8174685b4f4236291c10030013202c3946535f6c79868d8c8b8a8988878685848382818084919ea295887f8181828384858687888a8a8c8c8a7d7063564a3d3023170a0000000000050e172029313941484e54585c606263636362605d59544f49423b332b2219100700000000000006111c26303840454848484848484846413a313940454848484848484845403930261c1106000000000006111c26303840454848484848484846413a31281e130800000000000000000000000000000000000000000000000000000000000815212e3a4753606c788591938e8275695c5043372b232f3c4855616e7a8793938d8074675b4e4235291c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080e12151717171717171717171614100b0500000000000000000000050b1014161717171717171717171716130f0a04000000000005101a252e373e4346464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646433e372f261b1106000013202c3946535f6c798693a0acaca09386796c5f5347474747474747474747474747474747464543413e3c3835302c27211c150f0801000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a585754524f4b47423e38322c261f1710080000000000000000000000000000000000000000000008121d27323c454f58616a727a82898f959a9ea2a5a7a5a3a3a2a3a4a6a6a39f9b96908a837b736a61584e443a2f241a0f04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b2a29272623211e1b1814100b060100000000000000000000000000000000000009121a21262a2c2c2c2c2c2c2c2c2c2c2b28231d150d0400000000000814212d3a46535f6b7884919da9b0a4988c8073675b4f43372c201409000000000000000000000000000000000000000a16222d3945515d6976828e9ba7b2a5998d8174685b4f4236291d10040013202c3946535f6c798693a0acaca09386796c5f534b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4a463f372e24190e0200000713202d3a4653606d798693a0adaca09386796c5f5346392c20130600000000000000000008121b242b3135383a3d3f4244464847443e362d3134383b3e4144474b4f53575c62686f77808a949faaa195897d7165594c4033271a0e010013202c3946535f6c7986939897969594939291908f8e8d8c8c95a0a4988e8c8d8e8f909192939495969798968a7d7063564a3d3023170a00000000030d172029323b434b52595f64696c6e7070706f6c6965605a544d453d342b22190f0500000000000b17222d38424a5155555555555555524b433a424b5155555555555555514b42382e23180d01000000000b17222d38424a5155555555555555524b433a2f24190e030000000000000000000000000000000000000000000000000000000006121f2b3744505d69768286868685786c5f5246392c202d3946525f6b778486868683766a5d5144372b1e110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191e2223242424242424242423201c17100800000000000000000810171c20232424242424242424242422201b150e07000000000009131c252c32373939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393937332d251d140a00000013202c3946535f6c798693a0acaca09386796c5f54545454545454545454545454545454535351504d4b4845413c38322d27201a120b030000000000000000000013202c3946535f6c798693a0acaca09386796c686868686868686868686868686868686867676563615e5b57534e49443e373029221a12090000000000000000000000000000000000000000030e19242f39434e57616a737c858c949aa0a6a7a29e9b989796969697999ca0a5a7a19b948d857c736a60564b41362b20150a0000000000000000000000000000000000000205080a0b0c0d0d0d0d0c0a09070402000000000000000000000001040607070707070605030100000000000000000000000000000000000000000000010910161a1e1f2020202020202020202020202020202020202020202020201f1e1d1c1b191715120f0b080400000000000000000000000000000000000000000000080f151a1e1f2020202020202020201e1c17120b030000000000000a1623303c4955626e7b8794a0acada195887c6f63574b3f33271b0f030000000000000000000000000000000000000005111d2935414d5a66727e8b98a4b0a99c9084776a5e5145382c1f13060013202c3946535f6c798693a0acaca09386796c5f53463e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3d3a342d251c12070000000713202d3a4653606d798693a0adaca09386796c5f5346392c201306000000000000000000000912192025292b2e303335383a3c3b383335393d4144474a4d5054575b5f63686d737a8189929ba6a59a8f84786d6155493d3024180b000013202c3946535f6c798693a0a4a3a2a1a09f9e9d9c9b9a99999ea7aaa09a999a9b9c9d9e9fa0a1a2a3a4a3968a7d7063564a3d3023170a000000000a141f28323b444d555d646b7075787b7d7d7d7b7975716b655e574f463d342b21170c02000000000f1b27333f4a545c616262626262615d554b414a545d616262626262615c544a3f34291e1307000000000f1b27333f4a545c616262626262615d554b41362b20140900000000000000000000000000000000000000000000000000000000030f1c2835414e5a67727979797979766b5f5246392c1f2a36434f5c68747979797979756a5d5144372b1e1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d161e252a2e3030303030303030302f2d28221a120900000000000008121a22282c2f303030303030303030302f2c272019100700000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a27221b130b0200000013202c3946535f6c798693a0acaca09386796c6161616161616161616161616161616161605f5e5c5a5754514d48433e38322b241d150d0500000000000000000013202c3946535f6c798693a0acaca0938679757575757575757575757575757575757575747372706d6b67635f5a554f49423b342c241b1209000000000000000000000000000000000000000a15202b36404b555f69737c868e969ea5a8a29c96928f8c8a8989898b8d90959aa0a7a69f978e857c72685d52483d31261b0f04000000000000000000000000000002070b0f1214161819191a1a1918171513110e0b0702000000000002060a0e101214141414141311100d0b0804000000000000000000000000000000000000000000050a0e11131313131313131313131313131313131313131313131313131212110f0e0c0a0805020000000000000000000000000000000000000000000000000000040a0e1113131313131313131313120f0b0600000000000000000c1925323e4b5764717d8a96a3afab9e9285796c6054473b2f23160a0000000000000000000000000000000000000000010d1925313e4a56636f7c8895a1aeac9f9386796d6054473b2e2215080013202c3946535f6c798693a0acaca09386796c5f534639323232323232323232323232323232323232323232323232323232323232323232312e29231b130a000000000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000000000080f15191d1f212426292b2d2f33383d4146494d505356595d6064676b6f74787e858b939ba4a59c93897e73685c5045392d201408000013202c3946535f6c798693a09f9e9d9c9b9a999897969594959aa4a79d969495969798999a9b9c9d9e9fa0968a7d7063564a3d3023170a00000006111c26303a444d565f676f767c818588898a8a8885827c77706961584f463d33291e140900000000121e2b3743505b666d6f6f6f6f6f6e675d5247505c666e6f6f6f6f6f6d665c51463a2f24180d01000000121e2b3743505b666d6f6f6f6f6f6e675d52473c31251a0e03000000000000000000000000000000000000000000000000000000000d1926323e4a5661696c6c6c6c6c6b645a4f43372a1e2734404c57626a6c6c6c6c6c6b63594d4135291c10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151f282f363a3d3d3d3d3d3d3d3d3d3c39332c241b11060000000006111a242c33383c3d3d3d3d3d3d3d3d3d3d3b38322a22190f0400000000010910161a1e1f2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201e1b161009010000000013202c3946535f6c798693a0acaca09386796d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c6b696664615d59544f49433d362f271f170e05000000000000000013202c3946535f6c798693a0acaca093878282828282828282828282828282828282828281807e7c7a77736f6b66605a544d453e362d241b1209000000000000000000000000000000000004101b26313c47525d67717b858f98a0a8a69e97908b86827f7d7c7c7d7e8184898f969da6a9a0978e84796f64594e43372c20140900000000000000000000000003090e13171b1e2123242626262626252422201d1a17130e09040002080d12161a1d1f20212121201f1e1c1a1714100b0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a2734404d596673808c99a5b2a89c8f83766a5d5144382b1f13060000000000000000000000000000000000000000000916222e3b4754606d7986939facaea195887c6f6256493d3023170a0013202c3946535f6c798693a0acaca09386796c5f5346392c252525252525252525252525252525252525252525252525252525252525252524221d18110a01000000000713202d3a4653606d798693a0adaca09386796c5f5346392c20130600000000000000000000000004090d1012151920272e343a3f44494d5256595d606366696c7073777b80848a90969da5a39b938a81776c61564b4034281c1004000013202c3946535f6c798693939291908f8e8d8c8c8b8a898889929fa2968b8788898a8b8c8d8e8f90919293948a7d7063564a3d3023170a0000010d18232d38424c565f68717981878d919496979694928d88827b736a61584f453a30251b0f0400000013202c3946525f6c787b7b7b7b7b796f64594d53606d787b7b7b7b7b786d62574c4035291e120600000013202c3946525f6c787b7b7b7b7b796f64594d42362b1f1408000000000000000000000000000000000000000000000000000000000a16222e39444f575d5f5f5f5f5f5f5a52483e32261a232f3b4650585e5f5f5f5f5f5e5951473c3125190d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121d27313a41474a4a4a4a4a4a4a4a4a49443e362d23180d010000040e18222c363e44484a4a4a4a4a4a4a4a4a4a48433c342b20160a000000000000050a0e1113131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313110f0a0500000000000013202c3946535f6c798693a0acaca093867a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7979777573706d6965605a554e484039312920170e050000000000000013202c3946535f6c798693a0acafa398908f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8e8e8d8b898683807b76716b655e5750483f372e241b1107000000000000000000000000000000000a15212c37434e59646e79838d97a1aaa59c948c857f7a7673716f6f707174787d848b949da6a9a0968b81756a5f54483d3125190d0100000000000000000001080e141a1f23272a2d2f31323333333332302f2c2a27231f1a150f090c13191e2326292b2d2e2e2e2d2c2b292624201c160f060000000000000000000000000000000000000205080a0c0e0f1010100f0e0d0c0a070401000000000000000000010406080a0a0a0a0a090706040100000000000000000000000000000000000000000003080d10121313131313110e09030000000000000000000000000000000f1c2835424e5b6874818e9aa7b3a69a8d8174675b4e4235291c100300000000000000000000000000000000000000000006131f2c3845525e6b7784919daab0a3978a7d7164584b3e3225180c0013202c3946535f6c798693a0acaca09386796c5f5346392c20181818181818181818181818181818181818181818181818181818181818181715120d070000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000000000000000010a131b232b32393f454b5055595e6265696c6f7275797c8083878b90959ba1a59f99918a81786f655b50453a2f23170c00000013202c3946535f6c79868786868484838281807e7e7d7c7b84909da194887b7b7d7d7e808181828384858687887d7063564a3d3023170a000007131e29343f4a545e68717a838b92989da1a3a4a3a19e99938c857c736a60574c42372c21150a000000131f2c3945525e6a75808888888880756a5e53535f6b7681888888887e73685d51463a2e23170b000000131f2c3945525e6a75808888888880756a5e53473c3024180c0000000000000000000000000000000000000000000000000000000006111d28333d454d515353535353524f4840372c21161e29343e464d525353535353524e473f352b2014090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e39434c525657575757575757575550483f34291e120600010b15202a343e484f5557575757575757575757544e463c32271b1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada1948a8787878787878787878787878787878787878786858482807c7975706b666059524b433b322920170e0400000000000013202c3946535f6c798693a0acb4aaa29c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9b9a99989693908c87827d767069615a514940362d23190f050000000000000000000000000000030f1a26323d49545f6a75808b959fa9a69c938a827a746e6a666463626365686c7279828b949fa9a79d92877c7065594d4135291d11050000000000000000040c131a20262b2f33373a3c3e3f4040403f3f3d3b3936332f2b26201b14171e242a2f3336383a3a3a3a3a39373533302d2720181006000000000000000000000000000000050a0e111417191b1c1c1c1c1c1b1a181614110d0905000000000004090d1013151617171716151412100e0b07020000000000000000000000000000000000060e14191d1f202020201f1d1a150e070000000000000000000000000000101d2a3643505d6976838f9ca9b1a5988b7e7265594c4033261a0d0100000000000000000000000000000000000000000004111d2a3643505c6976828f9ca8b2a5988c7f7266594c4033261a0d0013202c3946535f6c798693a0acaca09386796c5f5346392c20130b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b090601000000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c20130600000000000000000000000000000a131c252d353c434a50565c61656a6e7275787b7e8285888c9093979ca1a59f9a948e8780776f665d53493e34291d120700000013202c3946535f6c787b7b79797877767574737271706f76838f9ca093867a6f70717273747575767778797a7b7b6f6356493d3023160a00000c18242f3a46515b66707a848d959da4a9adafb0b0adaaa59e978e867c72685e53483d32261b0f040000111d2a36424e59646e79848f9592867b6f64584f5a646f7a8590959085796e62574b3f33271b0f030000111d2a36424e59646e79848f9592867b6f64584c4135291d1105000000000000000000000000000000000000000000000000000000000c16212b343b4145464646464646433e372e251a1018222c353c4245464646464645423d362d23190e030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c28343f4b555d636363636363636363615a51463a2f23160a0009131d27323c46505a616363636363636363636360584e43382c201407000000000000000104060707070707070707070707070707070707070707070707070707070707070706060402000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acb1a69c95949494949494949494949494949494949494949392918f8c8985817c77716b645d554d443b322920160c02000000000013202c3946535f6c798693a0acb9afa8a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a4a5a6a4a29f9c98938e88827b736c635b52483f352b21160c010000000000000000000000000008141f2b37434e5a65707c87929ca7a89e948a81787069635d5a57565656585c61687079838d98a3aea3988d81756a5e52463a2d21150900000000000000050e161d242b31363b3f4346494a4c4c4d4d4c4b4a4845423f3b36312c261f21292f353b3f42454647474747454442403d38322a22180e03000000000000000000000000060c11161a1e21232627282929292928272523201d1915110c0601040a1015191d1f22232424242322211f1d1a17130d060000000000000000000000000000000710181f25292c2c2c2c2c2c2a262019110800000000000000000000000000111e2b3844515e6a7784919daab0a3978a7d7164574b3e3125180b00000000000000000000000000000000000000000000010f1c2835424e5b6874818e9ba7b3a69a8d8173675a4d4134271b0e0013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000000000000008121c252e373f474e555b61676c71767a7e8285888b8e9195989ca0a4a8a59b948f89837c756e665d544b41372d22170c01000000121e2b3744505b666e6f6e6d6c6b6a696867666564636875828e9b9f9286796c636465666768696a6b6c6d6d6f6f695f53473b2e2215090005111d2934404c57626d78828c969fa7afb5b9bcbdbcbab6b0a9a0988e857a70655a4e43372c20140800000e1a26313d47525d68737e8995988c8175695d51535d68737e8a95968a7f73675b5044372b1f130700000e1a26313d47525d68737e8995988c8175695d5145392d21140800000000000000000000000000000000000000000000000000000000050f19222930353839393939393937322c251c1309101a232a31363939393939393936322b241b110700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121e2b3844505c676f70707070707070706c62574b3f3226190c06101a252f39434e58626c707070707070707070706a6054483c2f23160a000000000002080d1113141414141414141414141414141414141414141414141414141414141414141312110f0c0906020000000000000000000000000000000000000000000013202c3946535f6c798693a0acb7aea6a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a0a09f9d9b9895918d88827c756e675f564d443b32281e1309000000000013202c3946535f6c798693a0acb2a79d9796969696969696969696969696969696969697989a9da1a5a8a49f99938c857d756d645a51473d33281d1308000000000000000000000000000c1824303c48535f6b76828d98a3aca1978c82786f665e57524d4b49494a4c50565e67717b86929da9a99e92867a6e62564a3d3125180c000000000000060f1720282f363c42474c4f5355575859595959585654524f4b47423d37312a2b333a41464b4f51535454545352504e4c49443c342a20150900000000000000000000030a11171c21262a2d30323435363636363533312f2c2925211d17120c0f151b2125292c2e30303030302f2d2b2927231e18110900000000000000000000000000051019222a303538393939393936312b231a1107000000000000000000000000121f2c3845525f6b7885929eabafa296897c6f6356493d3023170a00000000000000000000000000000000000000000000000e1a2734414d5a6773818d9aa6b3a79b8e8174685b4e4235281b0f0013202c3946535f6c798693a0acaca09386796c5f5346392c201306060606060606060606060606060606060606060606060606060503000000000000000000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c20130600000000000000000000000006101a242e374049515860666d73787d82868a8e9194979b9ea1a4a8aaacada09489837d77716a635c544b42392f251b1006000000000f1b27333f4a545c616261605f5e5d5c5b5a5959585a6774818d9a9e9184786b5e5758595a5b5c5d5e5f606162625e574d42372b1f1306000915212d3945515d68737e8a949ea8b1b9c0c5c9cac9c6c1bab2aaa0968c81766b6054483c3024180c00000915202b36404b56616d78848f9b9185796d61554c57626d7984909b9084786c6054483b2f23160a00000915202b36404b56616d78848f9b9185796d6155493d3124180c00000000000000000000000000000000000000000000000000000000000710181f25292c2c2c2c2c2c2c2a26211a130a010811192025292c2c2c2c2c2c2c2a26201a1209000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c787d7d7d7d7d7d7d7d73665a4d4034271a0d0e18222c36414b555f6a747d7d7d7d7d7d7d7d7d7c7064574a3e3124170b00000000060d14191d2020202020202020202020202020202020202020202020202020202020202020201f1d1b1916120e0904000000000000000000000000000000000000000013202c3946535f6c798693a0acb9afa8a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a4a5a6a9a8a5a19d99948e87807971685f564d433a2f251b10050000000013202c3946535f6c798693a0acada1958b8989898989898989898989898989898989898a8c8e9195999ea4aaa49e978f877f766c63594f443a2f24190e02000000000000000000000004101c2834404c5864707b87939ea9a69b90857a70665d544c46413e3d3c3d40444c555f6a75818d99a09f9e968a7e7266594d4134281b0f0000000000040e182129323941474e53585c5f626465666666666563615e5b57534e48423c35353d454c52575b5e60616161605f5d5b58554e463c31261a0e020000000000000000060e151c22282d3236393c3f41424243434241403e3c3935322d28231d171920272c3135383b3c3d3d3d3d3b3a3836332f2a231b12080000000000000000000000010c17212b343c41454646464645423c352c23180e020000000000000000000000131f2c3946525f6c7986929facafa295887b6f6255493c2f22160900000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3a89b8f8275685b4f4235281c0f0013202c3946535f6c798693a0acaca09386796c5f5346392c2013131313131313131313131313131313131313131313131313131312100c0701000000000000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000000000020d17222c364049525b636a71787e84898e92969a9ea1a4a19e9b9b9c9d9fa2a0948984807b756f6860574e453c32281d1308000000000b17222e38424b5155555453535151504f4e4d4c4d596673808c999d9084776a5d514b4d4d4e4f50515253545555534d453b31261a0e02000c1825313d4955616d7985909ba6b0bac3cbd1d5d7d5d2ccc4bcb2a89e93887c7065594d4034281c0f0300040f19242f3a45505c67737e8a96968a7d7165594d515c68737f8b9794887c7064574b3f3226190d0000040f19242f3a45505c67737e8a96968a7d7165594d4034271b0f020000000000000000000000000000000000000000000000000000000000060d14191d1f20202020201f1e1a161009010000070e14191d1f20202020201f1d1a150f0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c79868a8a8a8a8a8a8173675a4d4034271a0d151f2a343e48535d67717c868a8a8a8a8a8a8a82786d6256493d3023170a000000060f181f25292c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2a2825221e1a15100a0400000000000000000000000000000000000013202c3946535f6c798693a0acb2a79d9796969696969696969696969696969696969697989a9c9fa3a7a9a49f99928b837a71685f554c41372c21170b0000000013202c3946535f6c798693a0acaca093867c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7d7d7f8285888d9399a0a7a9a19991887e756b61564b40352a1f140800000000000000000002040814202c3845515d6975818c98a4ada1968a7e73695e544b423b3532303030333a434d5964707c8994949392918e8275695c5043372a1e1100000000020c16202a333b444b52595e64686b6e70727373737271706d6b67635f59544d463f3e474f575d63676a6c6d6d6d6d6b6a676560584d42372b1e12060000000000000007101820272d34393e4246494b4d4e4f4f4f4f4e4d4b4845423e39342e2822232b32383d414547494a4a4a49484745423f3b342d241a0f050000000000000000000006121e29333d464d5153535353524e473e352a1f1408000000000000000000000013202c3946535f6c7986929facaea295887b6e6155483b2f22150800000000000000000000000000000000000000000000000d1926333f4c5966727f8c99a6b2a99c8f8275695c4f4236291c0f0013202c3946535f6c798693a0acaca09386796c5f5346392c202020202020202020202020202020202020202020202020202020201f1c18120b040000000000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c201306000000000000000000000008131e29343e48525b646d747c83898f959a9ea2a4a09c9995928f8e8f909395999b93908c868079726961574e44392f24190e0300000006111c263039404548494847464544434241403f4c5865727e8b989c8f8276695c4f43404142434445454647484946423b33291f140900000f1b2834404d5965727e8a96a1adb7c2ccd5dce2e3e2ded6cec4baafa4998d8175695d5044372b1f1206000008121d28343f4a56626e7a86929a8d8175685c504b57636e7a8793988c8073675a4e4135281c0f03000008131d28343f4a56626e7a86929a8d8175685c5043372a1e110400000000000000000000000000000000000000000000000000000000000002080d1012131313131313110e0a05000000000003090d1112131313131313110e09040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693979797978d8173675a4d4034271a121d27313b46505a646f79838d97979797978f857a70665c51463a2e2115080000040f1821293036393a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a39383734322e2a26211b150e08000000000000000000000000000000000013202c3946535f6c798693a0acada1958b8989898989898989898989898989898989898a8b8d9093979ca1a7aaa49c958c847a71675d53493e33281d110600000013202c3946535f6c798693a0acaca09386796f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f70717275787c82878e959ea6aba39a91877d72685d52473b3025190d02000000000000040a0e11121724303c4855616d7985919da9a89c9085796d62574c4239302a2523232428313c4854606d798688878685848382786b5e5145382b1e120000000009141e28323c454d555d646a6f74787b7d7e8080807f7e7c7a77736f6a655f58514946505961686e7377797a7a7a79787674716a5f53473a2e211408000000000000071019222a31383f454a4e5255585a5b5c5c5c5c5b595755514e4a453f3a332c2d353d43494e515456575757565553514f4b463f362c21160a000000000000000000000a17232f3a454f585e5f5f5f5f5e5950463b3024180c000000000000000000000013202c3946535f6c798693a0acaea295887b6e6155483b2e22150800000000000000000000000000000000000000000000000c1926323f4c5965727f8c99a6b2a99c8f8275695c4f4236291c0f0013202c3946535f6c798693a0acaca09386796c5f5346392c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b28231d160d0400000000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c20130600000000000000000000020e1924303a45505a646d767e878e949ba0a5a19d9894908c89868282828486898d92979c97928b847b736960564b41362b201409000000000a141e272e35393c3c3b3a393837363534333e4b5764717d8a979b8e8275685b4f42353435363738393a3b3c3c3a36302921170d030000111d2a3643505c6975828e9aa6b2bec9d4dee7eef0eee8e0d6ccc1b5a99d9185786c6053473a2d21140800030e19242d363e46515d6976828e9b9184786b5f5246525e6a76838f9b8f8376695d5044372b1e110500030f1a242e373f45515d6976828e9b9184786b5f5245392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0a4a49a8d8173675a4d4034271a1a242e39434d58626c76818b959fa4a49c91877d73685e544a3f35291d110500000b16202a333b414547474747474747474747474747474747474747474747474747474747474747464543413e3a36322c262019120a0200000000000000000000000000000013202c3946535f6c798693a0acaca093867c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7d7e8183878b90969ca4aca79e968d83796f655a4f44392e23170c00000013202c3946535f6c798693a0acaca09386796c636363636363636363636363636363636466696c71767c848c949da7aca3998f84796e63584d41352a1e12060000000000080f151a1d1f1f2733404c5865717d8995a1ada4988c8074685c51463b30261f1f1f1f1f202c3845515e6a767c7b7a797877767572685c5044372b1e1100000005101b26303a444e575f676f757b8084878a8b8c8d8c8c8b898783807b76706a635b534d58626b737a808386878787868583817b6f6255483c2f2215090000000000061019232b343c434a50555a5e6264666869696968676664615e5a55504b453e37373f474e545a5e60626363636361605e5b5750483d32271b0f030000000000000000000d1a26333f4b5761696c6c6c6c6a62584c4034281b0f0200000000000000000000131f2c3946525f6c7986929facaea295887b6f6255483c2f22150900000000000000000000000000000000000000000000000d192633404c596673808c99a6b2a89c8f8275685c4f4236291c0f0013202c3946535f6c798693a0acaca09386796c5f534639393939393939393939393939393939393939393939393939393939393938342f281f160c02000000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000000007131f2a36414c57616c767f8891989fa6a29c96918c8884807d79767576777a7d81868c939b9d968e857b72675d52473c31251a0e02000000020c151d24292d2f2f2e2d2c2b2a292928303d4a5663707c89969a8d8174675a4d41342728292a2b2c2d2e2f2f2e2a251f170f05000000121f2b3845515e6b7784919daab6c2cedae5f0f9fefaf2e8ddd2c6b9ada194887b6e6255483c2f2216090008141f2b353f484f545a66727e8b9893867a6d615450545a6773808c999185786c5f5246392d201307000814202b36404950555a66727e8b9893867a6d6154473b2e21150800000000000000000000000000000000000000000000000000000000000000000000010305060708080808080706050301000000000000000000000000000000000000000000000000000000000000000000000000000001030506070808080807060402000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a222c36404b555f69747e88929da7a89e948a80756b61574c42382e23180d010005111c27323c454d52535353535353535353535353535353535353535353535353535353535353535352504d4a47423d38322b241c140c03000000000000000000000000000013202c3946535f6c798693a0acaca09386796f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f70717274777a7f858b929aa2aba89f958b81766c61564a3f34281c1005000013202c3946535f6c798693a0acaca09386796c5f56565656565656565656565656565657595c60656b7279828b959faaaba0968b8074695e52463a2f23170a000000000a121a21262a2c2c2c37434f5c6874818d99a5aca094877b6f63574b40342c2c2c2c2c2c2c2c2c36424e5a656d6f6e6d6c6b6a69696760574c4034281c0f0000000b17222d37424c566069717980878c90949698999a9999979593908c87827b746d655d545f69737d858b9092949494939190887b6f6255483c2f22150900000000040e18222b353d464d555b61666a6e717375757676757472706d6a66615c565049413f49515960656a6d6f7070706f6e6c6a68625a4f43382b1f13060000000000000000000f1b2835424e5b67737979797974695c5043362a1d100400000000000000000000121f2c3945525f6b7885929fabafa295897c6f6256493c2f23160900000000000000000000000000000000000000000000000d1a2734404d5a6673808d9aa6b3a89b8e8275685b4f4235281c0f0013202c3946535f6c798693a0acaca09386796c5f534646464646464646464646464646464646464646464646464646464646464644403931281e1409000000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c201306000000000000000000000b17232f3b47525d68737e88919aa3a79f97918a85807c7874706d6a68696b6d71757b8289929ba0978d84796f64594d42362a1f130700000000030b12181d2022222221201f1e1d1c222f3c4955626f7b8895998c807366594c4033261c1d1d1e1f20212222211e1a140d050000000013202c3946535f6c7986929facb8c5d2deebf7fffffffaeee2d5c9bcafa396897c7063564a3d3023170a000c1824303c47515a606263707c899695887b6f62565b606264707d8a9693877a6d6154473b2e211508000c1825313c47525b616363707c899695887b6f6256493c2f231609000000000000000000000206090a0a0a0a0a0a0a0a0a0a080400000000000307090c0e1011131414151515151413110f0d0a0703000000000000000000000000000000000000000000000000000000000000000003070a0d10121314151515141412110f0c0905010004080a0a0a0a0a0a0a0a0a0a08050000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271f29333e48525c67717b86909aa4aba1968c82786e63594f453a30261c110700000915212d39444e575e606060606060606060606060606060606060606060606060606060606060605f5e5c5a57534e49433c352e261e150c030000000000000000000000000013202c3946535f6c798693a0acaca09386796c636363636363636363636363636363636465686b6e737980889099a3ada79d93887d72675c5044392d211509000013202c3946535f6c798693a0acaca09386796c5f53494949494949494949494949494a4b4d50545960687079838d98a3aea79c91867a6e63574b3f33271a0e02000008121c242c32363839393946525f6b7884909da9a99c9084776b5f53473b39393939393939393939383d48535c61636261605f5e5d5c5a564e453a2f24180c000005111d28333e49545e68727b838b92989ca0a3a5a5a3a2a2a2a29f9c98938d867f776e665d65707b868f969c9fa0a1a0a09e95887b6f6255483c2f221509000000000b16202a343e474f585f666d72777a7d808182838382817f7d7a76726d67615a534b47515b636b7176797c7d7d7d7c7b7977746b6054473b2e2115080000000000000000000f1c2835424f5b687582868684776a5d5044372a1d110400000000000000000000121f2b3845515e6b7884919eabb0a3968a7d7063574a3d3024170a00000000000000000000000000000000000000000000000f1b2835414e5b6774818e9aa7b4a79a8e8174675b4e4134281b0e0013202c3946535f6c798693a0acaca09386796c5f5353535353535353535353535353535353535353535353535353535353535353504b433a30251a0e030000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c201306000000000000000000030f1b2834404c57636f7a858f9aa3a69d958d867f7974706c6864615d5b5c5e61656a70778089939e9f958b80756a5e53473b2f23170a000000000000070d1114161615141312111015212e3b4854616e7a8794988b7e7265584b3f322519101112131415161615120e0902000000000013202c3946535f6c798693a0acb9c6d3dfecf9fffffffdf0e3d6cabdb0a3978a7d7063574a3d3024170a000e1b2834404d58636c6f6f6f7b8894968a7d706359646c6f6f6f7b889595887b6f6255493c2f231609000f1b2834414d59646d6f6f6f7b8794968a7d7063574a3d3124170a000000000000000001080e12151717171717171717171614100b0504080c101316181b1d1e1f20212122222121201e1c1a17130f0b0601000000000000000000000000000000000000000000000000000000060b0f13171a1c1e202121222221201f1d1b1815120d0b10141617171717171717171614110c06000000000013202c3946535f6c798693a0aca79a8d8173675a4d40342727313b45505a646e78838d97a2aca3998f857a70665c51473d33291e140a0000000b1825313d495560696d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c6b6966635f5a544e47403830271e150b0100000000000000000000000013202c3946535f6c798693a0acaca09386796c5f56565656565656565656565656565657595b5e63686e767e87919ba6afa59a8f84786d6155493d3125190d010013202c3946535f6c798693a0acaca09386796c5f53463c3c3c3c3c3c3c3c3c3c3c3c3d3e4044484e565e67717b86919da8aea2978b7f73675b4f43372a1e12050004101a242e363d42454646464855616e7a8793a0aca6998d8174685b4f4646464646464646464646464541414a5155565554535251504f4e4a443c33291e130700000a16222e3944505b65707a848d959da3a8a7a19c999695959596989a9d9e98918981786f656b76828d97a1a7aba39c97939293887b6f6255483c2f22150900000007121d27323c465059616a71787d83878a8c8e8f908f8f8d8c8986827e78736c655d554f59636d757c8286888a8a8a898886837b6f6255483c2f2215090000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000111e2a3744515d6a7784909daab1a4978b7e7165584b3f3225190c0000000000000000000000000000000000000000000003101d2936434f5c6975828f9ba8b3a6998c8073665a4d4034271a0d0013202c3946535f6c798693a0acaca09386796c5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5c554c42372b1f13070000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c20130600000000000000000006121f2b3744505c6874808b96a1a99e958b837b746e68645f5c5854514e505155595e656e77818c97a39d92867b6f63574b3f33261a0e01000000000000010507090908070605030714202d3a4753606d798693978a7d7164574a3e3124180b020506070809090806020000000000000013202c3946535f6c7986929facb8c5d1deeaf6fffffff8ede1d5c8bcafa396897c706356493d3023170a00101c2936434f5c69757b7b7b7b8794978b7e71645d69767b7b7b7b889496897c706356493d3023160a00101c2936434f5c69757c7c7c7c8794978b7e7164574b3e3125180b00000000000000040c13191e2223242424242424242423201c17101014181c1f222527292b2c2d2e2e2e2e2e2d2c2b2926231f1b17120c07000000000000000000000000000000000000000000000000060c11161b1f2326292b2c2e2e2e2e2e2d2c2a2825211e19171c2023242424242424242423211d1711090100000013202c3946535f6c798693a0aca79a8d8173675a4d4034272e38434d57616c76808b959fa9a69c91877d73685e544a40352b21170d020000000d1a2633404c5966727a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a797875736f6a655f59524a423930271d130900000000000000000000000013202c3946535f6c798693a0acaca09386796c5f53494949494949494949494949494a4b4c4f52575d646c757f8a949fababa095897d72665a4e4135291d11040013202c3946535f6c798693a0acaca09386796c5f5346393030303030303030303030303234383d444c555f6a75808c98a3afa79c9084776b5f53463a2d211508000a16212c3640484e52525252525764707d8a96a3afa3978a7e71655852525252525252525252525252514d463f45484948474645444342413e39322a21170c0100030f1b27333e4a56616c77828c969fa7aca39c96908c8a888888898b8e91959a9b938a81776d6f7b87939ea9ada299918b878686887b6f6255483c2f2215090000010d18232e39444e58616b737b83898e9396999b9c9c9c9b9a9896928e8a847e776f675f56606b757f878d9295969796969492887b6f6255483c2f2215090000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000101d2936434f5c6975828f9ba8b2a5998c8073665a4d4034271b0e0200000000000000000000000000000000000000000006121f2b3845515e6a7784909da9b1a4988b7e7265584c3f3226190c0013202c3946535f6c798693a0acaca09386796c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c675e53473b2f2216090000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000000815212e3a4753606c7884909ca8a2978d83797169635d58534f4c4845424345484d545c65707b87929fa3978c8073675b4f4236291d10040000000000000000000000000000000006131f2c3946525f6c78859296897c6f6356493d3023170a0000000000000000000000000000000000121f2b3845515e6b7784909da9b6c2cedae4eef6f8f6f0e7dcd1c5b9ada094877b6e6255483c2f22160900101c2936434f5c6976838888888b96988b7e71655d6a77848888888c96978a7d7063574a3d3024170a00101c2936434f5c6976838989898c96988b7e7165584b3e3225180b000000000000030d161e252a2e3030303030303030302f2d28221a1c2024282c2f31343637393a3a3b3b3b3b3a393735322f2c27231e18120b040000000000000000000000000000000000000000030a11171d22272b2f323537393a3b3b3b3b3a383634312e2a2522282d2f3030303030303030302d28221b130a00000013202c3946535f6c798693a0aca79a8d8173675a4d40342b36404a555f69737d88929ca7a89e948a80756b61574c42382e24190f05000000000d1a2633404d596673808787878787878787878787878787878787878787878787878787878787878684827f7b76716a635c544b42392f251b1106000000000000000000000013202c3946535f6c798693a0acaca09386796c5f53463c3c3c3c3c3c3c3c3c3c3c3c3d3e4042464b525a636d78838e9aa5b1a69a8e82766a5e5145392c2014070013202c3946535f6c798693a0acaca09386796c5f5346392c232323232323232323232325282c323a434d58646f7b87939facaca093877b6e6256493d3024170a000e1a26323d48525a5e5f5f5f5f5f66737f8c98a5aea195887b6f625f5f5f5f5f5f5f5f5f5f5f5f5f5f5e5850463b3c3c3b3a393938373635322e2820180f05000007131f2b37434f5b67727d89939ea8ada39a928a85807d7b7b7b7c7e8185898f959b93898075727e8b97a3afa79b91877f7a79797b7a6e6255483c2f221509000007121e2935404b55606a737d858d949a9fa3a5a6a2a09f9f9fa0a19e9a958f89817971685f66727d8791999ea2a3a4a09d9c95887b6f6255483c2f2215090000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000f1b2835414e5a6774818d9aa6b3a79b8e8175685c4f43362a1d11050000000000000000000000000000000000000000000915212e3a4753606c7986929fabafa396897d7063574a3e3124180b0013202c3946535f6c798693a0acaca0938679797979797979797979797979797979797979797979797979797979797979797979797063574a3e3124170b0000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000000a1723303d4956626f7b8894a1a99d91867b70675f58514c47433f3c383536393c424a535e6a76838f9ba89c9083776a5e5145382c1f12060000000000000000000000000000000005121e2b3845515e6b77849195887b6f6255483c2f2216090000000000000000000000000000000000101d2a36434f5c6875818e9aa6b2bdc8d3dce4eaeceae5ded5cbc0b5a99d9185786c5f53463a2d21140700101c2936434f5c697683909595969d988c7e72655d6a7784909595979e978a7d7164574a3e3124170b00101c2936434f5c697683909696979e988c7e7265584c3f3225190c0000000000000b151f282f363a3d3d3d3d3d3d3d3d3d3c39332c24272c3034383b3e40424445474748484848474644423f3c38332e29231d160e07000000000000000000000000000000000000050d141c22282e33373b3f4244464748484847464543403d3a36312c33393c3d3d3d3d3d3d3d3d3c39342d251c1207000013202c3946535f6c798693a0aca79a8d8173675a4d4034333d48525c66717b858f9aa4aba1968c82786e63594f453b30261c120800000000000d1a2633404d596673808d949494949494949494949494949494949494949494949494949494949392918e8b87827c756e665d544b41372d22180d020000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346393030303030303030303030303133363a4048515c66727d8995a1adaa9e92867a6d6155483c2f23160a0013202c3946535f6c798693a0acaca09386796c5f5346392c2016161616161616161617181b2028313c47535f6b7783909ca9afa3978a7e7165584b3f3226190c00111e2a36434f5a646b6c6c6c6c6c6c75818e9ba7ac9f9386796d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a62574c4034302f2e2d2c2b2a292826221d160f060000000a16222f3b47535f6b77838f9aa5b0a59b9188807974706f6e6f707275797e838a919891877d75828e9aa7aea2968a7f756e6c6d6e6f685e52463a2d21140800000b17232f3a46515c67727c868f979fa6aba49e9a96939292929395979b9f9a938b837a71676c77838e99a3aaa9a09994919090887b6f6255483c2f2215090000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000d1a26333f4c5965727e8b98a4b1a99d9084776b5e5245392d2014080000000000000000000000000000000000000000000c1825313d4a56626f7b8894a1adada094877b6e6255483c2f2316090013202c3946535f6c798693a0acada09489868686868686868686868686868686868686868686868686868686868686868686867e7164574b3e3124180b0000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000000b1825313e4b5764717d8a97a3a6998d8175695f554d46403b3733302c292a2c3138424e5a6773808d99a69f9286796d6053473a2d2114070000000000000000000000000000000002111d2a3743505d6a76839094877a6d6154473b2e21150800000000000000000000000000000000000e1b2734404d5965717d8995a1acb6c1cad2d9dedfdedad4ccc3b9aea3988c8175685c5044372b1e120500101c2936434f5c697683909ca2a3a5988c7e72655d6a7784909da2a3a4978a7d7164574a3e3124170b00101c2936434f5c697683909ca3a4a5988c7e7265584c3f3225190c000000000006121d27313a41474a4a4a4a4a4a4a4a4a49443e362d33383c4144484a4d4f51525354545555545352504e4b48443f3a342e272019110800000000000000000000000000000000070f171f262d33393f43484b4e515254545555545352504d4a46423d373e44494a4a4a4a4a4a4a4a49453f372e24190e020013202c3946535f6c798693a0aca79a8d8173675a4d40343b454f59646e78838d97a1aba3998f857a70665c51473d33291e140a0000000000000d1a2633404d596673808d9aa0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09f9d9b97938d8780786f665d53493f34291e13080000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c232323232323232323232324272a2f363f4a55616d7985919daaaea296897d7064574b3e3225180c0013202c3946535f6c798693a0acaca09386796c5f5346392c201309090909090909090a0c0f16202b36424f5b6774818d9aa6b2a6998d8073675a4d4134271b0e00131f2c3946525f6b767979797979797983909ca9aa9e9184797979797979797979797979797979797974685c5044382c2221201f1e1d1c1b1916110b04000000000c1925323e4b57636f7c8894a0abaa9f94897f766e68646261626365696d72787f868e978f847984909da9aa9e9286796d635f6062635e564c41362a1e12050004101c2834404b57626d78838e98a1a9aaa19a938e8a8785858586888b8e93989d958c83796f707c8894a0ababa1978e88848383857b6f6255483c2f2215090000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000b1824313e4a5763707c8995a2aeac9f93877a6e6155493d3024180c010000000000000000000000000000000000000005111d2935414d5966727e8b97a3b0aa9e9185786c5f53463a2d2114070013202c3946535f6c798693a0acb0a59b949393939393939393939393939393939393939393939393939393939393939393938b7e7164574b3e3124180b0000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000000b1825323e4b5865717e8b98a5a4978a7e7165584d433b35302b2723201c1f242b333f4c5966727f8c99a6a194877b6e6154483b2e2215080000000000000000000000000000000003111e2a3744515d6a77849094877b6e6155483b2e22150800000000000000000000000000000000000c1824313d4955616d79848f9aa5afb8c0c8ced1d2d1cec9c2bab1a79d92877b7064584c4034281b0f0300101c2936434f5c697683909ca9afa5988c7e72655d6a7784909daaafa4978a7d7164574a3e3124170b00101c2936434f5c697683909ca9b0a5988c7e7265584c3f3225190c00000000000b17232e39434c525657575757575757575550483f373e44484d515457595c5d5f606161616161605f5d5b5854504b454039322b231a11080000000000000000000000000000071019212931383f454a4f54575b5d5f6061616161605e5c5956524d4842485055575757575757575755504940352a1f13070013202c3946535f6c798693a0aca79a8d8173675a4d4038424d57616b75808a949fa9a69c91877d73695e544a40352b21170d020000000000000d1a2633404d596673808d9aa6adadaba6a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a6a8aaa7a39e98918a81786f655b50463b3024190d0200000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2016161616161616161617181a1e242e3944505d6975828e9ba7b1a5988c7f7266594d4033271a0d0013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000040e1a26333f4c5965727e8b98a5b1a89b8e8275685b4f4235291c0f0013202c3946525f6c788486868686868687929eabaa9e92878686868686868686868686868686868685786c6054483c2f231713121110100f0d0a060000000000000f1b2834414d5a6673808c98a4b0a59a8e82776d645c5855555557595d61676d747c858e968b8085919eaba89b8f8276695d53535556534d443b3025190e02000714202c3844505c68737f8a95a0aaaba1988f88827d7a7978797a7c7e82878c9299958b817773808c98a4b0a59a8f857d78767678786e6155483b2f2215080000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000916222f3b4854616d7a86929fabafa2968a7d7165594d4135291d1206000000000000000000000000000000000000000a16212d3945515d6975828e9aa6b3a79b8f8276695d5044372b1e12050013202c3946535f6c798693a0acb7ada5a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0988b7e7164574b3e3124180b0000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000000b1825323e4b5865717e8b98a4a4978a7d7063574a3d312a241f1b1f23272b30363d454f5b6774818d9aa6a295887b6e6155483b2e2215080000000000000000000000000000000005121f2b3845525e6b78849195887c6f6255493c2f23160900000000000000000000000000000000000815212d3945505c68737e89939da6aeb6bdc2c5c5c5c2beb7b0a89e958b80756a5f53483c3024180c0000101c2936434f5c697683909ca9aca5988c7e72655d6a7784909daaaca4978a7d7164574a3e3124170b00101c2936434f5c697683909ca9aca5988c7e7265584c3f3225190c00000000000f1c28343f4b555d636363636363636363615a514640484f54595d606366686a6b6d6d6e6e6e6e6d6b6a6764605c57514b443c352c231a1108000000000000000000000000060f19222b333b424950565b6064676a6c6d6e6e6e6d6c6b6966625e59544e515a616363636363636363615b51473b3024170b0013202c3946535f6c798693a0aca79a8d8173675a4d40404a545e69737d87929ca6a89e948a80756b61574c42382e24190f05000000000000000d1a2633404d596673808d9aa6afaba19a98989898989898989898989898989898989898989898999b9ea3a8aaa39c938a81776d62574c41352a1e130700000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201309090909090909090a0b0e121c2834414d5a6673808c99a5b2a79a8e8174675b4e4135281b0f0013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000b1824313e4a5764717d8a97a4b0a99c8f8276695c4f4336291c1000111e2b37434f5c6874808c92929292929399a3aeaea3999392929292929292929292929292929292887c7064584b3f33271b0f0604010000000000000000000000111d2a3643505c6975828f9ba8aea295897d71665b524c4948484a4d51565c636a727b858e918788939faca69a8d8174675a4e47494947423b32291e140800000a1723303c4854606c7884909ba7afa4998f867d76716e6c6b6c6d6f72767b81878e9693897e75828f9ba8ada195897d736b696a6c6d665d5145392d2014070000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000713202c3945515e6a77838f9ca8b2a6998d8175695d51453a2e23180d02000000000000000000000000000000000006111c27323e4a55616d7985929eaab0a4988b7f73665a4e4135281c0f030013202c3946535f6c798693a0acb9b1aaa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a4988b7e7164574b3e3124180b0000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000000b1824313e4a5764707d8a96a3a4978b7e7165584c40352e2926282b2f33373c41474e57616c7783909ca8a194877b6e6154483b2e221508000000000000000000000000000000000613202c3946535f6c79869296897d7063574a3d3024170a000000000000000000000000000000000004101c2834404b56616c77818b949da4acb1b5b8b9b8b6b2aca69e958c83796f64594e42372b1f14080000101c2936434f5c697683909ca0a0a0988c7e72655d6a7784909da0a0a0978a7d7164574a3e3124170b00101c2936434f5c697683909ca0a0a0988c7e7265584c3f3225190c0000000000121e2b3844505c676f70707070707070706c62574b48525a6065696d7072757778797a7b7b7b7b7a787673706c67625c554e463e352c2319100500000000000000000000040e18212b343d454d545b61676c707376787a7b7b7b7a797775726e6a655f5957626c70707070707070706d63584c4033271a0e0013202c3946535f6c798693a0aca79a8d8173675a4d4047515c66707a858f99a3aba1968c82786e63594f453b30261c120800000000000000000d1a2633404d596673808d969da5a5998f8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8c8f92979da4aca59d93897e74695d52463b2f23170b00000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000020c1925323e4b5864717e8b97a4b1a89c8f8275695c4f4236291c100013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000a1724303d4a5763707d8a97a4b0a99c908376695c4f4336291c10000f1b27333f4c5864707c89959f9f9f9fa0a4abb5b4aba39f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f988c8074685b4f43372b1f120600000000000000000000000000121f2b3845515e6b7784919daaab9f9286796d615549403c3b3c3d40454a51586069737c879193949aa4b0a6998c807366594c403c3d3b36302920170d0200000d1a26333f4b5864707c8995a1aca99e92887d746c65615f5f5f6063666a70767c848c9590867b84909daaaa9d9185786c615d5d5f605c544b4035291d11050000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000004101d2936424e5b6773808c98a4b0a99d9185796e62564b3f34291e140a01000000000000000000000000000000040e18222d38434f5a66727d8a96a2aeaca094887c6f63574a3e3225190d000013202c3946535f6c798693a0acb3a89f9a9999999999999999999999999999999999999999999999999999999999999999988b7e7164574b3e3124180b0000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000000916232f3c4855616e7a87939fa6998d8174685c51473f39353334373b3f43474c52596069737d8994a0ab9f9286796c6053473a2d21140700000000000004080a0c0c0b0a0908070714212d3a4754606d7a8693978a7d7164574b3e3125180b0708090a0b0c0c0b080500000000000000000c17232f3a45505b656f78828b939aa0a5a9abacaba9a6a19b948c847a71675d52473d31261a0f030000101c2936434f5c6976839093939393938c7e72655d6a77849093939393938a7d7164574a3e3124170b00101c2936434f5c6976839093939393938c7e7265584c3f3225190c000000000013202c3946535f6c787d7d7d7d7d7d7d7d73665a4d4e59646c7175797c7f818385868788888887868583807c78736d67605850473e352b21170d020000000000000000010b16202a333d464f575f666c72787c80838587888888878684827e7a76706a635c67737d7d7d7d7d7d7d7d74685b4e4135281b0f0013202c3946535f6c798693a0aca79a8d8173675a4d454f59636e78828c97a1aba3998f857a70665c52473d33291f140a0000000000000000000d1a2633404d5966737e858c939ba4978a807e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e8082868c929aa2aba59b90857a6e63574b4034281c0f03000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000a1724313d4a5763707d8a97a4b0a99c908376695c4f4336291c100013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000b1824313e4a5764717d8a97a4b0a99c908376695c4f4336291c10000b1723303c4854606c798591989898989ba2abb6ada39b98989898989898989898989898989898989084786b5f53473b2e22160900000000000000000000000000131f2c3946525f6c7985929fabaa9d9084776a5e5145382f2e2f3134393f464e57616a75808a95a0a5acb2a6998c7f7265594c3f32302e2b251f170e050000000f1c2835424e5b6773808c99a5b1a5988d81766b625a5553525254565a5f646b727a838c958c8185929eaba89b8e8275695c50505353504a42392f24180d010000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000010d1a26323f4b57636f7c8894a0acaea2968a7e73675c51463b30261c130a0300000000000000000000000000050d16202a343f4a55606b77838e9aa6b2a89c9084786c5f53473b2f22160a000013202c3946535f6c798693a0acaea2978e8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b7e7164574b3e3124180b0000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000000714202d3946525e6a76838e9aa59c9085796e6359514a45413f4044474b4f53585d646a727b858f9aa5a79b8f83766a5e5145382b1f120600000000030a0f1417191918171615141315222e3b4855616e7b8894988b7e7265594c3f32261913141516161718181715110b0500000000000007121d28333e49535d66707881888f95999d9f9f9f9d9a959089827a71685f554b41362b201509000000101c2936434f5c697683868686868686867e72655d6a7784868686868686867d7164574a3e3124170b00101c2936434f5c697683868686868686867e7265584c3f3225190c000000000013202c3946535f6c79868a8a8a8a8a8a8173675a4d515d6a767d8185898c8e909293949495959493918f8c88847e78726a625950473d33291e1308000000000000000007121d27323c454f58616970777e83888c8f92939495949493918e8b86817b756e666875828a8a8a8a8a8a8174675a4e4134281b0e0013202c3946535f6c798693a0aca79a8d8173675a524c56616b75808a949ea8a69c91877d73695e544a40362b21170d020000000000000000000c1925323e4b57636d737a8189929b9b918b837b7371717171717171717171717171717171717173767a81889099a3aca2968b8074685c5044382c1f1307000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000a1724303d4a5763707d8a97a4b0a99c908376695c4f4336291c100013202c3946535f6c798693a0acaca09386796c5f5346392c201306010101010101010204070f1a26333f4c5865727e8b98a4b1a89c8f8275695c4f4236291c0f000713202c3844505c6975818c8c8c8c8c909aa6b2a79c918c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c887b6f63574a3e3125180b0000000000000000000000000013202c3946535f6c798693a0acaa9d908376695d5043362a222225282e353c454f59636e79848f9ba7b2b2a6998c7f7265594c3f3226221f1a140d0500000000111e2a3743505d6976838f9ca8ada195887c7065595049464546474a4e535960687079838d938a8b94a0ada69a8d8073675a4d444647443f3930271d1207000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000000a16232f3b47535f6b77848f9ba7b2a69b8f84786d62574c42382e251c150e0804000000000000000001050a10171f28323c46505b66717c88939fabafa3978c8074685b4f43372b1f1306000013202c3946535f6c798693a0acaca093867f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7164574b3e3124180b0000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c20130600000000000000000005111d2a36424e5a66727d89949ea1968a80756b635c56514e4c4d5053575b5f64696f757c858d97a1aba0968a7e72665a4e4235291c1003000000050d151b202425252424232221201f232f3c4956626f7c8895998c807366594d4033271e1f2021222324252524211c170f080000000000010c17222d37414b545e666f767d84898d90929392908e8a857e7870685f564d43392f241a0f04000000101c2936424f5c687479797979797979797970645c69747979797979797979796f63574a3d3124170a00101c2936424f5c68747979797979797979797064584b3e3225180c000000000013202c3946535f6c798693979797978d8173675a4d515e6b77848d9195989b9d9ea0a0a1a2a1a1a09e9c9894908a847c746b62594f453b30251a0e03000000000000030e19242f39434e57616a737b82898f94989c9ea0a1a2a1a09f9d9a97928d8780786f6976838f979797978d8073665a4d4033271a0d0013202c3946535f6c798693a0aca79a8d81746c645c545e68727d87919ca6a89e948a80756b61574c42382e24190f05000000000000000000000a16222f3a46515b62686f778089929b9c958d857b726864646464646464646464646464646465666a6f767e87919ca7a89c9084786c6054483b2f23160a000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000001040c1825323e4b5764717d8a97a4b1a99c8f8276695c4f4336291c100013202c3946535f6c798693a0acaca09386796c5f5346392c20130d0d0d0d0d0d0e0e0f101318202b37434f5b6774818d99a6b3a79a8d8174675b4e4135281b0f0003101c2834404c5965717d7e7e7e7e7e8a97a4b0a5988c7f7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7265584b3f3225180c0000000000000000000000000013202c3946535f6c798693a0acaa9d908376695d5043372a1d16181d232b333d47515c67737e8a96a2aeb2a6998c7f7265594c3f322619120e09020000000000121f2b3845525e6b7884919eaaab9e9285796c6054483e3938393b3e42484f565e67717b859096969ca6b1a6998c7f7266594c3f393a38342e271e150b01000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000007131f2b37434f5b67737f8b96a2adaca0958a7e73695e544a40372e261f1914100c0a09080708090b0d11151b2229313a444e58626d77838e99a4b0a99e92877b6f63574b3f33271b0f03000013202c3946535f6c798693a0acaca0938679727272727272727272727272727272727272727272727272727272727272727272726c6155493d3023170a0000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c201306000000000000000000010e1a26323e4a55616c77828c96a09c91877e756d67615d5a58595c6063676b70757a80878e969fa9a3998f84796d62564a3e3226190d010000040e171f262c30323231302f2e2d2c2b2b303d4a5763707d8a969a8d8174675b4e41342a2b2c2d2e2f30313232312d2821191107000000000006101b252f39424c545d656c72787d818485868584817d79736d665e564d443b31271d1308000000000e1b2733404c57626a6c6c6c6c6c6c6c6c6c685f58626a6c6c6c6c6c6c6c6c6c675e53473b2e221609000e1b2733404c57626a6c6c6c6c6c6c6c6c6c685f54483c3023170a000000000013202c3946535f6c798693a0a4a49a8d8173675a4d515e6b7885929da1a4a7a5a3a1a09f9e9e9fa1a3a7a5a09b958e867e756b61574c41362b20140800000000000009141f2a35404b555f69737c858d949aa0a4a8a6a29f9d9c9c9c9d9ea19e98918a81786f7784909da4a4998c807366594c403326190d0013202c3946535f6c798693a0aca89b90877e766e665e66707a848f99a3aba1978c82786e63594f453b30261c1208000000000000000000000006121e2a353f4951575e656d76808a949e9f978d84796f645957575757575757575757575757585a5e646c75808a96a1ada195887c7064574b3e3225190c000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130b0b0b0b0b0b0b0c0c0e10141c2834404d5966727f8c98a5b2a89b8e8275685b4f4235291c0f0013202c3946535f6c798693a0acaca09386796c5f5346392c201a1a1a1a1a1a1a1a1a1b1d1f232a323c47535f6b7783909ca8b1a5988c7f7266594d4033271a0d00000c1824303d4955616b72727272727d8a97a4b0a4988b7e727272727272727272727272727272727272726c62564a3d3124180b00000000000000000000000000131f2c3946525f6c7885929fabaa9d9184776b5e5245392c231f1c1b1a212b35404b56626e7986929eaab2a6998c7f7265594c3f3226190c020000000000000013202c3946525f6c7986929facaa9d9084776a5d5144382d2c2c2e32373d444c555f69737e89949fa7aeb2a6998c7f7265594c3f322d2b28231c150c0300000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000000030f1b27333f4b57626e7a85919ca7b1a69b90857a70665c52494038312a25201c19171515141516171a1d21262c333b434c565f6a747e89949faaafa4988d82766a5e53473b2f23170b00000013202c3946535f6c798693a0acaca09386796c656565656565656565656565656565656565656565656565656565656565656565625a5045392d2114080000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c201306000000000000000000000a16212d3944505b66707a858e979f9990877f78726d6a676566696c6f73777b81868b9299a0a8a29a91877d72685c51453a2e22160a0000010c16202931373c3f3f3e3d3c3b3a393837363e4b5864717e8a979b8e8275685b4f42363738393a3b3c3d3e3f3f3d39332b23190f04000000000009131d27303a424b535a61676d7175777879797775716d68625b544c443b32291f150b01000000000b17232f3b4650585e5f5f5f5f5f5f5f5f5f5d5650595e5f5f5f5f5f5f5f5f5f5c554c41362b1f1206000b17232f3b4650585e5f5f5f5f5f5f5f5f5f5d564d42372c201407000000000013202c3946535f6c798693a0aca79a8d8173675a4d515e6b7885929ea29f9b999694939292929294979ba0a6a6a09890877d73695e53473c3125190d0100000000030e1a25303c47525d67717b858e979ea5aba6a09b9693918f8f8f909294989c9c938a81777784919eaba6998c7f7265594c3f3226190c0013202c3946535f6c798693a0acaca2989088807870686d77828c96a0aba3998f857a70665c52473d33291f140a000000000000000000000000020d18232d373f464c535b646e78828d98a39f968b81766b5f544b4b4b4b4b4b4b4b4b4b4b4b4b4e535a636e7984909ca5a4988c8073665a4d4134281b0f000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20181818181818181819191a1d20262e3944505c6975828e9aa7b2a6998d8073675a4d4134271b0e0013202c3946535f6c798693a0acaca09386796c5f5346392c2727272727272727272728292c2f343c444e5964707b87939facaea295897c7063574a3e3125180c00030e18222d39444f596165656565717e8b98a4b0a4978a7d71656565656565656565656565656565656565625a50453a2e21150900000000000000000000000000121e2b3845515e6b7784919daaac9f93867a6d6155493e352f2b29272626252e3a45515d6975828e9aa7b2a6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0acaa9d908376695d5043362a1f2022262b323a434d57616c77838e9aa5b1b2a6998c7f7265594c3f32261f1c17120b030000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000000000b17222e3a46525d6974808b96a1acaca1978c82786e645b524a433c36302c28252322212121222426292d32383e454d565e68717b86909ba5b0a89d92877c7065594e42362a1f130700000013202c3946535f6c798693a0acaca09386796c5f59595959595959595959595959595959595959595959595959595959595959595650483e33281d11050000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000000005111c28333e49545e69737c858e959c99918a837e797673727275787c8083888c91979da3a7a09890887f756b61564b4034291d1106000007121d28323b43484b4c4b4a49484746454443424c5965727e8c989c8f8376695d504343444546474748494a4b4b49443d352b21160b0000000000010b151e283039414950565c6165686a6c6c6c6a6865615c57514a423a322920170d04000000000007131e29343e464d52535353535353535353514b474e52535353535353535353504b433a30251a0e020007131e29343e464d52535353535353535353514b443b31261b0f03000000000013202c3946535f6c798693a0aca79a8d8173675a4d525f6b7885929a96928f8c8a888685858586888b8f959ca3aaa2998f857a6f64594d41362a1e12050000000008131f2b36424d58636e79838d97a0a9aca39c958f8a86848282828385888c90969c93897e7885929eaba5988c7e7265584c3f3225190c0013202c3946535f6c798693a0acb3aaa29a928a827a71757f89949ea8a69c91877d73695e544a40362b21170d030000000000000000000000000007111b242d343a4149525c66707b86929da79d92877c7065594e423e3e3e3e3e3e3e3e3e3e3f4248525c6874808c989997968f8275695c5043362a1d11000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c252525252525252525252627292c3138404a55616d7985919daab0a3978a7e7165584c3f3226190d0013202c3946535f6c798693a0acaca09386796c5f53463934343434343434343434343536383b40464e56606a75818c98a4b0aa9e9286796d6154483b2f2216090008141f2a343d454b4f5658585865727e8b98a5b0a4978a7d706358585858585858585858585858585858585650483e34291d110500000000000000000000000000101d2a3643505c6975828e9ba7aea295897d71655a5047403b3836343332323235414d5966727e8b98a4b1a6998c7f7265594c3f3226190c000000000000000013202c3946535f6c7986939facaa9d9083766a5d5044372a1e15151a2128313b45505b66727d8995a1adb2a6998c7f7265594c3f322619100c0600000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000000006121e2935414c57636e79858f9aa5afa89e948a80766d645c544d47413c383532302f2e2e2e2f303336393e434950575f68707a838d98a2acaca2978c81766b5f54483d31251a0e0200000013202c3946535f6c798693a0acaca09386796c5f534c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a453e362c22170c000000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c20130600000000000000000000000b17222d38424d57606a737b848b91979b958f8a8682807e7e8185888c9094989da2a7a29c958e877e766d63594f443a2f23180c0100000c18232f3a444d5458585756555553535251504f4e5a6673808c999d9084776a5d514e4f50515253545556575858554f473d32271c10040000000000030c161e272f373e454b5055595c5e5f5f5f5e5c5955514b453f38302820170e05000000000000020d18222c353c424546464646464646464644403c424546464646464646464644403931281e13080000020d18222c353c424546464646464646464644403a32291f140a00000000000013202c3946535f6c798693a0aca79a8d8173675a4d525f6b7885928e8a8683807d7b79787878797b7e848a919aa3aba1978c8175695e52463a2e221509000000000c1824303c47535e6975808b959fa9aca39a918a847e7a7776757576787b80858b929a90867a86929faca5988c7e7265584c3f3225190c0013202c3946535f6c798693a0acb9b4aca49c948c847b7c87919ba5a89e948a80756b61574d42382e24190f0500000000000000000000000000000009121b23293037404a545f6a75818c98a4a4998d82766a5e52463a3131313131313131313236404b57636f7c888d8c8b898884776b5e5145382b1e12000000000000000013202c3946535f6c798693a0acaca09386796c5f5346393232323232323232323232333436393d4249525c67727d8995a1adaca094877b6f6256493d3024170b0013202c3946535f6c798693a0acaca09386796c5f5346404040404040404040404041414345484c51585f68727c87929da9b0a5998d8275695d5145382c201307000d1925303c464f575b5b5b5b5b65717e8b98a4b0a4978a7d70635b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a554d453e362c22170c01000000000000000000000000000f1b2834414d5a66727f8b97a3afa5998e82776c6259514b47444241403f3f3e3e3e4a5763707d8996a3afa6998c7f7265594c3f3226190c0000000000000000121f2c3945525f6b7885929eabaa9e9184786b5f5246392e26221f1e1c1f29343e4a55616d7885919da9b2a6998c7f7265594c3f3226190c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000010d1924303b46525d68737e89939ea8b0a69c928980766e665f58524d4844413f3d3b3b3a3b3c3d3f4245494e545a6169717a838c959fa9afa59a90857a6f64594e43372c2015090000000013202c3946535f6c798693a0acaca09386796c5f53463f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3a342c241a1005000000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c201306000000000000000000000005101b26303b454e58616a727980868b90949a96928f8d8b8b8e9194989ca0a4a4a09b96918a847c756c645b51473d33281d12070000000f1c2834404b565f646564636261605f5e5d5c5b5b5b6774818e9a9e9185786b5f5a5b5c5d5e5f6061626364656561594f44382c201407000000000000040c151d252c333a3f44494c4f51525352514f4d4945403a342d261e160e05000000000000000006101a232a313639393939393939393939383431363939393939393939393938342e271f160c0200000006101a232a31363939393939393939393938342f2820170d0300000000000013202c3946535f6c798693a0aca79a8d8173675a4d525f6b788586827d7a7673716e6d6c6b6b6c6f73788088919ca6a89d92867a6e62564a3e3125180c00000004101d2935404c58646f7b86919ca7afa49a91888078726e6b6968696a6c6f7479808891978c8186929faca5988b7e7165584b3f3225180c0013202c3946535f6c798693a0acb3aaa3a1a39e958d85848e98a3aba1978c82786e63594f453b30261c120800000000000000000000000000000000000911181e252e38424d5964707c8894a0aa9e92877b6f63564a3e322524242424242424252f3b4753606c798281807e7d7b7a756a5e5144382b1e12000000000000000013202c3946535f6c798693a0acaca09386796c5f53463e3e3e3e3e3e3e3e3e3e3e3f3f404245494e545b646e78838f9aa6b1a89c9084786b5f53463a2e2115080013202c3946535f6c798693a0acaca09386796c5f534d4d4d4d4d4d4d4d4d4d4d4d4d4e4f5154585c6269717a848e99a3aeaa9f94897d7165594d4135291c100400101d2935414d5861676868686868717e8a97a4b0a4978a7d7068686868686868686868686868686868665f564a3f33271b100600000000000000000000000000000c1925313e4a57636f7b87939faaaa9f93887e746b635c5754514f4e4d4c4c4b4b4b4a55626f7b8895a2afa6998c7f7265594c3f3226190c0000000000000000111e2b3844515e6a7784909da9aca093877a6e62564a4037322e2c2a2928282d3944505c6875818d9aa6b2a6998c7f7265594c3f3226190c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000000000008131e2a35404c57616c77818c96a0a9aea49b92898078716a635e5854504d4b4948484748484a4c4e51555a5f656c737b838c959ea7b0a69d93897e74695e53483d32261b0f040000000013202c3946535f6c798693a0acaca09386796c5f5346393232323232323232323232323232323232323232323232323232323232312e29221a120800000000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000000000000a141f29333d464f5760676e757a808488929e9e9b9998989a9da1a4a3a09c98948f8a857f79726a635a52493f352b21160c01000000121e2b3844505c68707271706f6e6d6c6b6a696867666875828e9b9f9286796c666768696a6b6c6d6e6f6f7071726b6054483c2f23160900000000000000030b131b22282e34383d4043444646464543403d39342f29231c140d04000000000000000000000811192025292c2c2c2c2c2c2c2c2c2c2b28262a2c2c2c2c2c2c2c2c2c2c2b28231d150d0400000000000811192025292c2c2c2c2c2c2c2c2c2c2b28241d160e050000000000000013202c3946535f6c798693a0aca79a8d8173675a4d525f6c79807a76716d6a676462605f5e5e6062676d76808a95a0aca3978b7e7266594d4134281b0f0200000814212d3945515d6974808c97a3aea89d93887e766e67625e5c5b5c5d6063686f767e889192888994a0aca5988b7e7165584b3e3225180b0013202c3946535f6c798693a0acaca19894979f9f978f8e96a0aaa3998f857a70665c52473d33291f140a00000000000000000000000000000000000000060d141c26313c4854606c7884919da9a3978b7f73665a4e4135291c1818181818181f2b3844515d697375747371706e6d6b63594e4235291d10000000000000000013202c3946535f6c798693a0acaca09386796c5f534b4b4b4b4b4b4b4b4b4b4b4b4c4c4d4f5155595f656d76808a95a0abaea2978b8073675b4f43372b1e12050013202c3946535f6c798693a0acaca09386796c5f5a5a5a5a5a5a5a5a5a5a5a5a5a5a5b5c5e6064686d747b848c96a0aaada3998e83776c6055493d3125190d0000121f2c3845515e69737575757575757d8a97a4b0a4978a7e757575757575757575757575757575757571675b4f43372b1e120600000000000000000000000000000916222e3a47535f6b76828e99a4aea59a90867d756e6863605d5c5a5959585858575757626f7b8895a2afa6998c7f7265594c3f3226190c0000000000000000101d2936424f5c6875818e9aa6afa3968a7e72675c5249423e3b38373635353534404c5965727e8b97a4b1a6998c7f7265594c3f3226190c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000000000020d19242f3a45505b65707a848e97a1aaada49b928a827b756e6964605d5a5856555454545556585b5e61666b70777e858d959ea7b0a79e948b81776c62574c42372b20150a000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2626262626262626262626262626262626262626262626262626262624221d1710080000000000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c201306000000000000000000000000030e18232d37414a535b636a71777d8287929eaba8a6a5a4a3a09d9a9793908c88837e79746e676059514840372d23190f0500000000131f2c3946525f6c797e7d7d7b7b7a79787776757473727683909ca093877a7273747575777778797a7b7c7d7e7d7063574a3d3024170a0000000000000000010910171d23282c30343638393939383634312d28231e18110a02000000000000000000000000070e14191d1f2020202020202020201f1c1a1d1f2020202020202020201f1c17120b0400000000000000070e14191d1f2020202020202020201f1c18120c04000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d515e6a74756f6a65615e5a58555352515253565c646e7884909ca8a79a8e8275695c5043362a1d110400000c1824313d4955616d7985919da8aea2978c81766d645c5652504f4f5153575d646c76808a9593949ba5b0a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca89b8f878d97a0a19b9a9fa8a69c92877d73695e544a40362b21170d030000000000000000000000000000000000000000020a14202b3743505c6875818e9aa7a79b8f82766a5d5144382b1f120b0b0b0b101c2935414d586168696766656362605e5951473d3125190d000000000000000013202c3946535f6c798693a0acaca09386796c5f5858585858585858585858585858595a5b5e61656a70778089929ca6b1a79c91867a6f63574b3f33271b0f020013202c3946535f6c798693a0acaca09386796c67676767676767676767676767676767696a6d7074797f868d969ea8aea59b91877c71665b4f44382c201509000013202c3946535f6c79828282828282828a97a4b0a5988c828282828282828282828282828282828282776b5f53473a2e22160a000000000000000000000000000006121e2a36424e5a66717c87929ca6aca2988f878079746f6c6a68676665656565646464636f7b8895a2afa6998c7f7265594c3f3226190c00000000000000000e1b2734404d5965727e8a96a2aea69a8f83786e645b544e4a4745444342424141414a5663707c8996a2afa6998c7f7265594c3f3226190c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000007131e29343e49535e68727c858f98a0a9ada49c948d86807a75706c6966646362616161626365676a6e72767c82888f979fa7afa69e958c83796f655a50463b30251a0f04000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201919191919191919191919191919191919191919191919191919191815110c06000000000000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c20130600000000000000000000000009141f2a353f49535c656d757c83898e9299a3a9a5a19d9a9794918e8a8784807c77736e68635c564e473f362e241b12080000000000131f2c3946525f6c79868a89888786868584838281807e7e84909da194887d7e80818282838485868788898a8a7d7063574a3d3024170a00000000000000000000050c12171c202427292b2c2c2c2b2a2724211d18120d0600000000000000000000000000000003090d111213131313131313131312100e1113131313131313131313120f0c070000000000000000000003090d111213131313131313131312100c070100000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4d58626869635e5955514e4b4947454545474a525c6773808c98a5aa9d9184776b5e5145382b1f120500030f1b2834404d5965717d8a96a2ada99d91867a6f655b524a4543424244474c525a646e78838e9aa0a5adb2a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d81858e98a1a8a7aba89e948a80756b61574d42382e241a0f0500000000000000000000000000000000000000000000030f1b2734404d5966727f8c98a5ab9e9285796c6053463a2d2114070404040d1925303b464f575b5c5b5958565554524e483f362b201509000000000000000013202c3946535f6c798693a0acaca09386796c6565656565656565656565656565656566686a6d71767b8289929ba4aeaaa0958b8075695e52473b2f23170b000013202c3946535f6c798693a0acaca093867973737373737373737373737373737374747577797c80858a90979fa8ada59c938980756b60554a3e33271c10040000121f2b3844515d6975818d8f8f8f8f8f929ba7b3a89d938f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f877b6f63574a3e32261a0e0200000000000000000000000000020e1a26323d4954606b76808a949da6aaa199918a84807c79777574737272717171717170707b8895a2afa6998c7f7265594c3f3226190c00000000000000000c1824313d4a56626e7a86929ea9aba0958a80766d655f5a565452504f4f4e4e4e4d4d55626f7b8895a2afa6998c7f7265594c3f3226190c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000000000000010c17222d37424c56606a737c868e979fa7aea69f98918b86817c797673716f6e6e6d6e6f707174767a7e82878d939aa1a9aca59d948c837a70675d53493e34291e140900000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b09050100000000000000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000000000040f1b26313c46515b656e777f878e94999ea3a29d9995918e8a8784817e7b7774706b67625d57514b443d352d241b1209000000000000131f2c3946525f6c798692969594939291908f8e8e8c8c8b8b949fa3978d8a8b8c8d8e8f90919293949596978a7d7063574a3d3024170a000000000000000000000001060b1014181b1d1e1f201f1e1d1b1815110c0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4650575c5c58524d4945423f3c3a3938383a404b5764707d8996a3ac9f9286796c5f5346392c2013060005121e2b3743505c6975818d9aa6b1a5998d8175695e53494039363536373b4148525c67727d8994a0acb6b2a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d817c868f99a2abaea2978c82786e64594f453b30261c120800000000000000000000000000000000000000000002080c0f1825313e4b5764717d8a97a3ada194877b6e6155483c2f22161111111111141f2a343d454b4f4f4e4d4b4a484745423d362d24190f04000000000000000013202c3946535f6c798693a0acaca09386797171717171717171717171717171717272737577797d81878d949ba4adaaa1988e84796e63584d41362a1e1207000013202c3946535f6c798693a0acaca09386818181818181818181818181818181818181828486898c90969ba2a9aaa39b938a81776d63594e43382d22160b000000101c2834414d5965717d8a969c9c9c9c9ea4adb8aea59e9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c978b7f73675a4e42362a1e120500000000000000000000000000000a15212d38434e59646e78828b949ba2a9a39c96908c8885838281807f7e7e7e7e7d7d7d7d7d8895a2afa6998c7f7265594c3f3226190c00000000000000000915212d3a46525e6a75818c97a2aca69c91887f77706a6663605e5d5c5b5b5b5b5a5a5a626f7b8895a2afa6998c7f7265594c3f3226190c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000000000000006101b25303a444e58616a737c858d959da4aba9a39c97918d898582807d7c7b7a7a7b7b7c7e8083868a8e93999ea5aca8a29a938b837a71685e554b41372d22180d0200000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b08040000000000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c20130600000000000000000000000914202c37424d58636d76808991989fa5a29c96918d8985827e7b7875726e6b67645f5b56514c464039322b231b120900000000000000131f2c3946525f6c7986929fa2a1a09f9e9d9c9b9a999897979da6a99f989798999a9b9c9d9e9fa0a1a2a2978a7d7063574a3d3024170a000000000000000000000000000004080b0e101213131312100e0c0805000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d40464c4f504d47423d393532302e2c2b2c2f3c4955626f7b8895a2ada09386796d6053463a2d201307000814212d3a46535f6c7885919da9ada195897c7064584d41372e2a28292b2f36404a55606c7884909ca8b4b2a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d81737d879099a3ac9f92867a70675e544b42392f261d140a0100000000000000000000000000000000000000070e14181b1d23303d4956636f7c8996a2afa296897c706356493d30231d1d1d1d1d1d1d1d222b343a3f424341403e3d3c3a3936322b241b120800000000000000000013202c3946535f6c798693a0acaca093867e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7f80818386898d92989ea5ada8a0988f867c72675d52473c3025190e02000013202c3946535f6c798693a0acaea2978f8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8e8e8f909295989ca1a7aaa49f98918981786f655c51473d32271c11050000000c1824313d4955616d7a86929b9b9b9b9ca1a9b3b1a79f9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b8f83776a5e52463a2e211509040302010000000000000000000004101b27323d48525c667079828a91979da2a6a19c989592908e8d8c8c8c8b8b8b8a8a8a8a8a8d97a3b0a6998c7f7265594c3f3226190c000000000000000005111d2935414d5964707b86909ba4ada39a9189827b76726f6d6b6a6968686767676767666f7b8895a2afa6998c7f7265594c3f3226190c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000000000000000009141e28323c464f58616a737b838b9299a0a6aba8a29d9995918f8c8a898887878888898b8d8f92969a9fa4aaa9a49d979089817970685f564c43392f251b10060000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a191814100a03000000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c20130600000000000000000000010d1925313d48545f6a747f89929ba3a69e97908a85817c7975726f6b6865625f5b57534f4b46403b352e28201d1a161009010000000000131f2c3946525f6c7986929fa1a09f9e9d9c9b9a99989796969ca5a89e97969798999a9b9c9d9e9fa0a1a2978a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d403b404343403c36312d292623211f1f28313d4956636f7c8995a2ada09386796d6053463a2d201307000a1723303c4955626e7b8794a0adaa9e9185796c6054483c30251d1c1c1f242e3944505b6773808c98a4b0b2a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173747e87919aa4a1968c827970665d544b41382f261c130a0000000000000000000000000000000000000811181f24282a2a2f3c4955626f7b8895a2afa4978a7d7164574a3e312a2a2a2a2a2a2a2a2a2a2a292f333636353332302f2e2c2a26211a12090000000000000000000013202c3946535f6c798693a0acaea2968d8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8c8d8e909295999ea3a9aba59e968e867d746a60564b40352a1f140800000013202c3946535f6c798693a0acb4a9a09b9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9b9b9d9fa1a4a8a6a29e99938d867f776f665d534a40352b20150a000000000814212d3945515d6a76828e8e8e8e8e8f97a2aeaba0958f8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e877a6e62564a3d31241811100f0e0d0c090400000000000000000a15212b36404b545e6770787f868c91969a9ea1a3a19f9d9b9a9998989898989797979696989fa9b2a6998c7f7265594c3f3226190c0000000000000000010d1925313c48535e69747e89929ba3aba39b938d87827e7c797876757575747474737373737b8895a2afa6998c7f7265594c3f3226190c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000000000000000020c16202a343d464f586169717981888e949aa0a5a9a9a5a19e9b99979695949494959697999c9fa2a6aba7a39e98928c857e776f675e564d443a31271d1309000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2626262626262626262626262626262626262626262626262626262626262624201b150d050000000000000713202d3a4653606d798693a0adaca09386796c5f5346392c2013060000000000000000000005111d2935414d5965707b86919ba4a59c948c857f7975706c6965625f5c5956524f4b47433f3a3532302f2d2c2a26211b130b0200000000131f2c3946525f6c7986929695949292908f8e8d8c8b8a898a939fa3978c898a8b8c8d8e8f909192939495968a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d403434363634302a25211d1a171a2129313a434e5965727e8a97a4ac9f9286796c5f5346392c201306000c1925323e4b5864717d8a96a3afa89b8f8276695d5044382c20140f10131c27333f4b57636f7c8894a1adb2a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d81736c757f88929ba59e948b82786f665d534a41382e251c12090000000000000000000000000000000007111a232a30343637373c4855626f7b8895a2afa4978b7e7164574b3e37373737373737373737373736322d2929282725242221201e1a150f08000000000000000000000013202c3946535f6c798693a0acb3a89f99989898989898989898989898989898989898999b9c9fa2a5aaa9a49f9a938c857c746b62584e44392f24190e0300000013202c3946535f6c798693a0acb9b1aaa6a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4a4a3a19f9d9a96928d88827b746d655d544b41382e24190f040000000004111d2935414d5a66727e828282828285929eaba99c8f838282828282828282828282828282828282827e7265584b3f32251f1e1d1c1b1a1815100a03000000000000040f1a242f39424c555e666d747b81868a8e919496989a9b9c9d9e9e9e9e9e9f9f9f9fa0a0a1a7afb2a6998c7f7265594c3f3226190c0000000000000000000814202b37424d58626d7680899199a0a6a59e98938e8b8886848382828281818181818080808895a2afa6998c7f7265594c3f3226190c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000000000000000000040e18222b343d464f575f676f767d83898f94999da1a4a8aaa8a5a4a2a1a1a1a1a2a2a4a6a8a9a6a3a09c97928d87817a746c655d554c443b32281f150b01000000000000000013202c3946535f6c798693a0acaca09386796c5f5346393333333333333333333333333333333333333333333333333333333333333333302c261f170e0400000000000713202d3a4653606d798693a0adaca09386796c5f5346392c201306000000000000000000000814202d3945525e6a76818d98a2a79d938a827a746e6964605d595653504d4a46433f3e424342403f3d3b3a3836322c251d140a00000000131f2c3946525f6c79868a898887868584838281807e7d7d84919ea295887c7d7e808181828484868688888a8a7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d403427292928241f191511171e252c333b434c555f6a76828e9aa6a99d9084776b5e5145382b1f1205000e1a2734404d596673808c99a5b2a5998c8073665a4d4135281c1003030b17232f3b4753606c7985929eabb2a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173676d768089939ca69d948b81786f655c534a40372e241b12090000000000000000000000000000030e19232c353b40434444444855626f7b8895a2afa4988b7e7164574b44444444444444444444444444423e3831281e1a1817161413110e0a0400000000000000000000000013202c3946535f6c798693a0acacaca9a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a6a7a9a8a6a4a19d99948e88827a736a625950463c32281d12080000000013202c3946535f6c798693a0acb3a89f999898989898989898989898989898989898989897969492908d8a86827c77716a635b534b42392f261c12070000000000010d1925313d4a56626d74757575757783909da9aa9d9084777575757575757575757575757575757575746e63574a3e312d2c2b2a29282725211b150d0400000000000008121d27303a434c545c63696f757a7e8285888a8c8d8f90909191919292929292939393959da7b2a6998c7f7265594c3f3226190c000000000000000000030f1a25313b46515b656e7780878e959a9fa4a39f9b97959391908f8f8e8e8e8e8d8d8d8c8c8f99a4b0a6998c7f7265594c3f3226190c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000061019222b343d454d555d646b72787e83888d9195989b9ea0a1a3a4a5a5a5a5a5a4a2a19f9d9a9793908b86817b766f69625a534b433a322920160d0300000000000000000013202c3946535f6c798693a0acaca09386796c5f534640404040404040404040404040404040404040404040404040404040404040403f3d38312920160b00000000000713202d3a4653606d798693a0adaca09386796c5f5346392c201306000000000000000000000a1723303c4955616e7a86929ea9a1968b81787069635d5854504d4a4643403d3a3a42494e4f4e4d4b4a484745423e372f261c1106000000131f2c3946525f6c787e7d7c7b7a7978777675747372717885929ea295897c7171737375767778797a7b7c7d7e7d7063574a3d3024170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271d1d1b18140e141b22292f363d454d555e67717c87929eaaa69a8e8175685c4f43362a1d1004000f1c2835424e5b6874818e9aa7b0a4978a7d7164584b3f3226190c000006131f2b3844505d6976838f9ca8b2a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d817367646e77818a949da69d938a81776e655c524940372d241b1108000000000000000000000000000915202b353e464c505050505055626f7b8895a2afa4988b7e71645750505050505050505050505050504f4a433a30251a0f0a0908060402000000000000000000000000000013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09f9e9d9c9a9794918d88837d777068615850473e342a20160b010000000013202c3946535f6c798693a0acaea2968d8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b8b8a89888684817d7a75716b655f585149413930271d140a000000000000000915212d3a45515b63686868686875828e9ba7ab9f9285796c6868686868686868686868686868686868645c52463b3a39383736353433312c261f160d030000000000010b151e28313a424a51585e64696e7275787b7d7f8182838484848485858586868686868b96a3afa6998c7f7265594c3f3226190c0000000000000000000009141f2a343f49535c656d757d848a8f93979b9ea0a2a19f9e9d9c9b9b9b9a9a9a9a9a99999aa1aab2a6998c7f7265594c3f3226190c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000000000000000000000071019222b333c434b525a60676d72777c8185898c8f9193959697989898989897969492908e8b87837f7a76706a645e5750494139312820170e040000000000000000000013202c3946535f6c798693a0acaca09386796c5f534d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4c49433b32271d1206000000000713202d3a4653606d798693a0adaca09386796c5f5346392c201306000000000000000000000c1825323e4b5764717d8a96a2a79b8f84796f665e57514c4844413d3a37343137424c545a5c5b5958565553524f4941382d23170c000000121e2b3744505c677071706f6e6d6c6b6a69686766656c7885929fa396897c6f65666768696a6b6c6d6e6f7071726b6054483c2f2316090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a100f0c0f171e262d343a41484f575f677079838d98a4ada2968a7e7165594d4034271b0e0200101d2a3643505d6976838f9ca9afa295897c6f6356493d3023170a0000030f1c2835424e5b6774818d9aa6b2a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675c656f78828b949ea59c938a80776d645b52493f362d231a11080000000000000000000000000e1a26313c4750585c5d5d5d5d5d626f7b8895a2afa4988b7e71645d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5b554c42372b2014070000000000000000000000000000000000000013202c3946535f6c7986939393939393939393939393939393939393939393939393939292918f8d8b8885817c77726c655e574f463e352c22180e04000000000013202c3946535f6c798693a0acaca093867e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7d7c7b797774716e6a65605a544e473f372f271e150b020000000000000005111d29343f4952585b5b5b5b66737f8c98a5ada194887b6e625b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b59524a474847464544434241403d3831281f150b000000000006101921292f33383f464d53585d6266696c6e717274757677777778787878797979797b8895a2afa6998c7f7265594c3f3226190c00000000000000000000030d18232d37414a535b646b72787e83878b8f91949697999a9a9b9b9b9c9c9c9c9c9d9d9d9fa4adb2a6998c7f7265594c3f3226190c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000000000000000000000000071019212a323941484f555b61676c7075797c80828586888a8b8b8c8c8c8b8a89888684817e7b77736f6a655f59534c463e372f271f160e05000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5959595959595959595959595959595959595959595959595959595959595959595959544d43392e23170b000000000713202d3a4653606d798693a0adaca09386796c5f5346392c201306000000000000000000000d1a2633404c5966727f8c99a5a4988b7f73685d544c46413c3834312e2a27313d48545e66696866656361605e5a534a3f34281c100400000f1c2834404b565e646564636261605f5e5d5b5a595f6c7986929fa3968a7d7063595a5b5c5d5e5f60616263646561594f44382c2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d071018212830373e454c535a61697179828b959faaa79c9185796d6155493d3124180c0000111e2b3744515e6a7784909daaaea194887b6e6155483b2f2215090000000d1a2633404c5965727e8c98a5b1a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a5d666f79838c959fa59c928980766d645b51483f352c231a10070000000000000000000000111d2a36424e5962696a6a6a6a6a6a6f7b8895a2afa4988b7e716a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a665e53483c3023170b0000000000000000000000000000000000000013202c3946535f6c79868686868686868686868686868686868686868686868686868686858482817e7b7875706b66605a534c453d342c231a100600000000000013202c3946535f6c798693a0acaca093867972727272727272727272727272727272727171706e6d6a6865625d59544f49433c352d251d150c030000000000000000010c18232d3740474c4e4e4e5764707d8996a2afa3968a7d7165584e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4c4a50545554535251504f4e4d49433a31271c1105000000030e18222b333a3f42434445474d5156595d5f6264666769696a6b6b6b6b6b6b6c6c6c6f7b8895a2afa6998c7f7265594c3f3226190c000000000000000000000006111b252f384149525960676d72777b7f828587898b8c8d8e8e8e8e8f8f8f8f90909090939ba6b2a6998c7f7265594c3f3226190c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000070f1820272f363d444a50565b6065696c707376787a7b7d7e7e7e7f7e7e7d7c7b797775726f6b67635e59544e48423b342d251d150d0400000000000000000000000013202c3946535f6c798693a0acaca09386796c6666666666666666666666666666666666666666666666666666666666666666666666655f554b3f33271b0e020000000713202d3a4653606d798693a0adaca09386796c5f5346392c201306000000000000000000000d1a2633404d596673808d9aa6a295897c6f63574b423b35302c282627282c34404c59657076747371706e6c6b655b5045392c20130700000c18232f39444d54585857565554535251504f4e53606d798693a0a4978a7d7164574d4e4f515153545556575858554f473d32271c10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d1019222a323a424950575d646b737a838b949da7aba1968b8074695d5145392d2115080000121f2c3845525e6b7885929eabada093867a6d6053473a2d2114070000000b1825313e4b5764717d8a97a4b0a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a545d67707a838d96a0a49b92897f766d635a51473e352c2219100700000000000000000000131f2c3945525e6a74777777777777777b8895a2afa4988b7e77777777777777777777777777777777777064584c3f3226190c00000000000000000000000000000000000000131f2c3946525f6b7679797979797979797979797979797979797979797979797979797978777674726f6c6864605b554f49423a332b221a11070000000000000013202c3946535f6c798693a0acaca09386796c6565656565656565656565656565656565646362605e5c5955514d48433e38312a231b130b030000000000000000000006111b252e363c4042424855616e7a86939faca6998d8174685c4f434242424242424242424242424249535c6161605f5e5d5d5b5b59544c43392d22160a00000008141f2a343d454b4e4f5152535455565757535557595b5c5d5d5e5e5e5e5f5f5f5f626f7b8895a2afa6998c7f7265594c3f3226190c00000000000000000000000009131d262f3840484f565c61666b6f7376787a7c7e7f808181828282828283838383848996a2afa6998c7f7265594c3f3226190c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000000000000000000000000000060e161d242c32393f454a4f54585c606466696b6d6f7071727272727171706e6d6b6865625f5b57524d48423d373029221b130b030000000000000000000000000013202c3946535f6c798693a0acaca093867973737373737373737373737373737373737373737373737373737373737373737373737371675c4f43362a1d11040000000713202d3a4653606d798693a0adaca09386796c5f5346392c201306000000000000000000000d1a2633404d596673808c99a6a295887b6f6255493e3936343332323335383d45505c68758181807e7c7b79776d6154483b2e221508000007121d28323b42484b4b4a49484746454443424754616d7a8794a0a4988b7e7164584b42434445464748494a4b4b49443d352b21160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0f19222b343c444c545b62686f767d858c959da6ada3998f84796e63584c4035291d11050000131f2c3946525f6c7986929facac9f9286796c5f5346392d2013060000000a1723303d4a5663707c8996a3afa5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d555e68717b848e97a1a49b91887e756c635950473e342b22190f0600000000000000000013202c3946535f6c7984848484848484848996a2afa5988c8484848484848484848484848484848484807366594c403326190d00000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6a69676563605c58544f4a443e37302921191008000000000000000013202c3946535f6c798693a0acaca09386796c5f5858585858585858585858585858585857565553514f4c4945413d38322d262019110a0200000000000000000000000009131c242b3033353945525e6a7783909ca8a99c9084786b5f53473c3535353535353535353537434f5b656d6e6d6c6b6a696867655e554a3e32261a0d0000010d1925303c464f575b5c5d5e6061626364635d544b4d4e4f50515151515152525255626f7c8995a2afa5988c7e7265594c3f3226190c000000000000000000000008121b242b3135383d444a50565b5f6366696c6e7071727374747575757575767676767b8895a2afa6998c7f7265594c3f3226190c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000000000000000000000000000000040b131a21272e34393f44484c5054575e6364646464646565656565646362605e5c5956534f4b46423d37312b251e18100901000000000000000000000000000013202c3946535f6c798693a0acaca0938680808080808080808080808080808080808080808080808080808080808080808080808080776b5e5144382b1e11050000000713202d3a4653606d798693a0adaca09386796c5f5346392c201306000000000000000000000c1926323f4c5865727e8b98a4a3968a7d716559504a454241403f3f404244484e57616d78848e8c8b8987867a6e6155483b2f2215080000010c16202931373c3e3f3e3d3c3a393837363b4854616e7b8894a1a5988b7e7265584c3f363738393a3b3c3d3e3f3d39332b23190f04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a17212b343d464e565e656c737a81888f969ea7aca49b91877d73685d52473b3024180c00000013202c3946535f6c7986939facac9f9285786c5f5246392c1f13060000000916232f3c4955626f7c8895a2afa5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4c565f69727c858f98a2a39a91877e756b625950463d342b21180f06000000000000000013202c3946535f6c798690909090909090939ba6b2a89d94909090909090909090909090909090908c807366594c403326190d000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5e5c5b595653504c48433e39332c251e170f0700000000000000000013202c3946535f6c798693a0acaca09386796c5f534c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4b4a48474543403d3935312c27211b150e070000000000000000000000000000010a12191f24272a36424f5b6773808c98a4aca094887c7064584c41362b282828282828282d3946525f6b777b7a79787776757470665b4e4235291c10000004101d2935414d586167696a6b6c6d6f70716f665b4f43414243444444454545454a5763707d8996a3b0a5988b7e7265584c3f3225190c00000000000000000000040f1a242d363d4244464748494a4f53575a5d5f6163656667676868686869696969696f7b8895a2afa6998c7f7265594c3f3226190c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000000000000000000000000000000001080f161c22282e33383c4044505c676f71717171716e6760585857565553514f4d4a46433f3b36312c26201a140d060000000000000000000000000000000013202c3946535f6c798693a0acaea2978e8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d84776b5e5144382b1e11050000000713202d3a4653606d798693a0a7a7a09386796c5f5346392c201306000000000000000000000b1824313e4a5763707c8995a1a5998d81766b625b55524f4d4c4c4c4d4e5054596069737e89959997968f83776b5f5246392d201407000000040e171f262b30323231302f2e2d2c2b2f3b4855626e7b8895a2a5998c7f7265594c3f332a2b2c2d2e2f313232312d282119110700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a1f29333d464f58606870777e858b9299a1a8aba39a92897f756b61564b40352a1f130700000013202c3946535f6c798693a0acac9f9285786b5f5245382c1f12050000000915222f3c4855626f7b8895a2aea5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d444d57606a737c869099a2a39990877e746b62584f463d332a21180e050000000000000013202c3946535f6c7986939d9d9d9d9d9d9fa4adb7afa69f9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d998c807366594c403326190d000000000000000000000000000000000000000a16212c3740484f525353535353535353535353535353535353535353535353535353535251504e4c4a4744403c37332d27211b140d050000000000000000000013202c3946535f6c798693a0acaca09386796c5f53463f3f3f3f3f3f3f3f3f3f3f3f3f3e3e3d3c3a383633302d2925201b16100a030000000000000000000000000000000000080e13181a26333f4b5764707c8894a0aca4988c8074695d52473d332b262322222428323d4955626e7a878786858483828176695d5043362a1d10000006121f2c3845515e6973757778797a7b7c7d786b5e52453936363738383838383f4c5865727e8b97a4b0a4978a7d7164574b3e3125180b000000000000000000000a15212b363f474e51525355565758595a595553555658595a5b5b5b5b5b5c5c5c5c626f7b8895a2afa6998c7f7265594c3f3226190c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000000000000000000000000000000000000040b11171d22272c303945525f6c787d7d7d7d7d79726a635c544d48474543403d3a37332f2a25201b150f0902000000000000000000000000000000000013202c3946535f6c798693a0acb3a9a09a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9184776b5e5144382b1e11050000000713202d3a4653606d7986939a9a9a9a9386796c5f5346392c201306000000000000000000000916222f3b4854616d7985919da99e92887d746c66615e5c5a595959595b5d60656b727b858f9aa5a2968b7f73675b4f43362a1e110500000000050d141b2023252524232221201f222f3c4955626f7c8895a2a6998c807366594d4033261f2021222324252524211c170f080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271c26313b454f58616a727a828990969da4aba8a199918980766d63594f453a2f24190e0200000013202c3946535f6c798693a0acac9f9285786b5f5245382c1f12050000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d40454e58616a747d87909aa3a29990877d746a61584f453c332a20170e0500000000000013202c3946535f6c7986939a9a9a9a9a9a9ca2abb6ada49d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a998c807366594c403326190d0000000000000000000000000000000000000005101a252e373e434646464646464646464646464646464646464646464646464646464645444342403d3a3734302c27221c16100902000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346393232323232323232323232323231302f2e2c2a2724211d1914100a05000000000000000000000000000000000000000003080b17232f3b47535f6c78848f9ba7a99d91857a6f64594f453d3632302e2f30333a444e5a65717e8a93929190908d8174675b4f4235291c1000000613202c3946535f6c7982848586878889867a6d6155483d34312f2f2f303238434f5b6874818d9aa6aea295897c6f63564a3d3023170a000000000000000000020e1a26323d4851595e5f606162636566676660564b4a4b4c4d4e4e4e4f4f4f4f4f56626f7c8996a2afa5988c7e7265584c3f3226190c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000000000000000000000000000000000000000060c11161b202c3946525f6c79848a8a8a8a837c756d665f575049413a34312e2a27231e19140f09040000000000000000000000000000000000000013202c3946535f6c798693a0acacacaba7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69e9184776b5e5144382b1e11050000000713202d3a4653606d79868d8d8d8d8d8d86796c5f5346392c201306000000000000000000000713202c3845515d6975818c97a2a4998f867e77726e6a68676665656667696c70767c848d97a1a59b90857a6e62574b3f33271a0e02000000000003090f1417181817161514131623303c4956636f7c8996a2a69a8d8173675a4d4034271a131415161718181715110b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d403427222d38434d57616a737c848c939aa1a8aca49d968f877f766d645b51473d33281e13080000000013202c3946535f6c798693a0acac9f9285786b5f5245382c1f12050000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d403c464f58626b757e88919ba4a2998f867c736a61574e453c322920170d04000000000013202c3946535f6c79868e8e8e8e8e8e8e9099a5b1a79b928e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8c807366594c403326190d000000000000000000000000000000000000000009131c252c3237393939393939393939393939393939393939393939393939393939393938363533312e2b2824201b16110b050000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c252525252525252525252525242422211f1d1b1814110d090400000000000000000000000000000000000000000000000007131f2b37434f5b67737e8a96a1ada2978b80756b61574f48423e3c3b3b3d3f444c55606b76828e9a9f9e9d95897d7164584c3f33261a0d000005121f2b3844515d6a76838f9192949596897d7165594e45403e3c3c3c3c3f434a55606c7884909ca9ac9f93867a6d6154483b2f22150900000000000000000004111e2a36424e59636a6c6d6e6f7071737471685c50443e4040414242424242424a5764707d8a96a3b0a5988b7e7265584b3f3225180c000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000000000000000060b121e2b3844515d68727b848e97958e877f787069625b534c453d362f272019120e090400000000000000000000000000000000000000000013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09e9184776b5e5144382b1e11050000000b15202d3a4653606d798181818181818181796c5f5346392c2013060000000000000000000004101c2835414d5864707b86919ba4a1989089837e7a777573737272737476797c81878e969fa69d93897e74685d52463a2e22160a000000000000000003070a0c0c0b0a09080a1724303d4a5763707d8a96a3a79a8e8174675a4e4134281b0e0708090a0b0c0b08050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d40342728333f4a545f69737c858e969ea5aca8a19a938c847d756d645b52493f362b21170c010000000013202c3946525f6c7986929facac9f9285796c5f5246392c1f13060000000915222f3c4855626f7b8895a2aea5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d40343d475059636c768089929ca5a1988f857c736960574e443b32291f160d030000000013202c3946535f6c7981818181818181818995a2afa4988b8181818181818181818181818181818181807366594c403326190d0000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b2a282624221f1b18140f0a0500000000000000000000000000000013202c3946535f6c798693a0a0a0a09386796c5f5346392c2019191919191919191919181817161413100e0b0805010000000000000000000000000000000000000000000000000000030f1b27333f4b56626e7985909ca7a89d92877d73696159534e4b494848494c50565e67717c87939eaaa89d9185796d6155483c3024170b000003101c2935424e5b6773808c989fa0a1998d81766b6057514d4a494848494b4f545c66717c8894a0aca89c9083776b5e5245392c20130700000000000000000006131f2c3945525e6b7578797b7c7d7e7f81786b5f5246393334343535353536404d5965727e8b98a4b0a3978a7d7164574b3e3124180b000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000000000000000000000000000000000000000000000000101c2834404c566069727b858e9798918a827b746c655e564f484039322a231c140b0100000000000000000000000000000000000000000013202c3946535f6c79869393939393939393939393939393939393939393939393939393939393939393939393939393939393939184776b5e5144382b1e1105000007121d27313a45515e6972737373737373737372695d5145382c1f120600000000000000000000000c1824303c48535e69747e89929ba3a29a948e8a86848280807f7f80818385898d9299a0a49c948b81776d62574c41352a1e120600000000000000000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174685b4e4235281b0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034272e3945505b66707b858e97a0a8ada59e968f88817a736b635b524940372d241a0f050000000000121f2c3845525f6b7885929eabac9f9386796c5f5346392d2013060000000916232f3c4956626f7c8995a2afa5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4034343e47515a646d77808a939da6a1978e857b726960564d443b31281f150c01000000121f2c3845515d6972747474747474747b8895a2afa4988b7e74747474747474747474747474747474746e63574b3e3225190c000000000000000000000000000000000000000000010910161a1e1f2020202020202020202020202020202020202020202020202020201f1e1d1c1a1815120f0c0803000000000000000000000000000000000013202c3946535f6c798693939393939386796c5f5346392c20130c0c0c0c0c0c0c0c0c0b0b0a0908060401000000000000000000000000000000000000000000000000000000000000000b17222e3a46515d68747f8a95a0aba3998f857b736b645f5a5756555556585c61687079838e99a4aea3978c8175695d5145392c2014080000000d1a26323f4b57636f7b88939faaaa9e92877c7269625c595756555556585b5f666e78838e99a5afa3978c8073675b4f42362a1d11040000000000000000000613202c3946525f6c78858687898a8b8c877a6e6255493e373432323233353a45505c6875818e9aa7aea195887c6f6256493d3023170a000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000000000000000000000000000000000000000000000000c18242f3a444e576069737c858e979b948d857e776f686159524b443c352e261d130900000000000000000000000000000000000000000013202c3946535f6c79868686868686868686868686868686868686868686868686868686868686868686868686868686868686868684776b5e5144382b1e110500000c17232e39434c5357606667676767676767676660574c4135291c1004000000000000000000000008141f2b37424d58626d76808991989fa59f9a9693908e8d8c8c8c8c8d8f9295999ea4a099928a82796f655b50463b2f24190d0100000000000000000000000000000000000b1825313e4b5764717e8b98a4a89b8f8275685b4f4235291c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d403427323e4a56616c77828d97a0a9aba39b938c857d766f686159514940372e251b1208000000000000121e2b3845515e6b7784919eaaada093877a6d6054473a2e2114070000000a1724303d4a5763707d8a96a3b0a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d40342c353f48525b656e78818b949da7a0978e847b72685f564d433a31271e1308000000101d2935414c5760666767676767676f7b8895a2afa4988b7e7167676767676767676767676767676767645c52473b2f23160a0000000000000000000000000000000000000000000000050a0e11131313131313131313131313131313131313131313131313131313131212100f0d0b090603000000000000000000000000000000000000000013202c3946535f6c798686868686868686796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2935404c57636e79848e99a3aba0978e857d756f6a67646261616365686c727a828b959faaa79c91867b6f64584c4034281c10040000000a16232f3b47535f6b77838e99a4aea4998e847b736d6966646262626264676b7178818a949faaa89d92877b6f63574b3f33261a0e0200000000000000000005111e2b3744505d6976828f94959698968a7e72665b504843403f3e3e3f41454c56616d7985919da9ab9f9286796d6054473b2e221508000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000000000000000000007131e28323c454e57616a737c858f989e979089817a736b645d554e473f382f251a0f040000000000000000000000000000000000000000131f2c3946525f6b76797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979756a5d5144372b1e110400000f1c2834404b555e636464646464625c5a5a5a59554e453b3024190d000000000000000000000000030f1a25313c46515b656e777f878d94999da1a29f9d9b9a999999999a9c9ea1a29e9a948e88817870675d53493f34291e13070000000000000000000000000000000000000c1825323f4b5865727e8b98a0a09c8f8275695c4f4336291c100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d40342a36434f5b66727e89949ea9aba2999189817a736c655e564f473f372e251c130900000000000000111d2a3744505d6a7683909ca9aea194887b6e6155483b2f2215090000000c1825323e4b5864717e8b97a4b1a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4034272d364049535c666f78828b959ea8a0968d847a71685f554c43392f25190e0200000d1924303b454e565a5a5a5a5a5a626f7b8895a2afa4988b7e71645a5a5a5a5a5a5a5a5a5a5a5a5a5a5a58524a40352a1f1307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6b767979797979797979766b5f5246392c1f13060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f3b46515c67727c87919ba4a9a0978f87817b7673706f6e6e6f7174787d848c949da7a99f958b80756a5e53473c3024180c0000000007131f2b37434f5a66717d88929da6aaa0968d857e797572706f6f6f6f7173777c828a939ca6aba1978c81756a5e53473b2f23170a00000000000000000000020f1c2835414d5a66737f8b97a2a3a49a8e82776c6259534f4d4c4b4b4c4e51575e68727e8995a1ada79b8f83766a5e5145382c1f1306000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000000000000000000000000000000000000000000000000010c17202a333c454e57616a737c868f98a19a938c847d766e676058514a41372c2115090000000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b63594d4135291c10030000121f2b3844505c676f71717171716e676058514d4a443c33291e160f0800000000000000000000000009141f2a353f49535c656d757c82888d9195989a9c9e9f9fa0a09f9e9d9b9996928e89837d766e665e554b42382d23180d020000000000000000000000000000000000000c1926323f4c5965727f8c93939393908376695d5043362a1d100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d40342d3a46525f6b77838f9aa5aca29990877f777068615a534c453d352d251c130a0100000000000000101c2936424f5c6875828e9ba8afa296897c6f63564a3d3024170a0000010e1a2734404d5966737f8c99a5b2a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d403427242e37414a545d667079838c969fa19f968d837a71675e554b41362a1f1306000008131f29333c444a4d4d4d4d4d55626f7b8895a2afa4988b7e7164574d4d4d4d4d4d4d4d4d4d4d4d4d4d4c4740382e24190e020000000000000000000000000000000000000000000104060708090a0a0a090806040100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6b645a4f43372a1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131e2a35404b56606b757f89929ba4a9a099928c8783807d7c7b7b7c7d8184898f969ea6a8a0978d83796e63584d42362b1f130800000000030f1b26323e4955606b76818b949da6a89f978f8a85817e7d7c7b7b7c7d8083888d949ca5aaa2998f857a6f64594e42362a1f130700000000000000000000000d1925323e4a56636f7b87929ea9ab9f94897e746b645f5c5a585858595a5d6268707a848f9aa6ada2968b7e73665a4e4235291d1004000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000000000000000000000050e18212a333c464f58616a747d868f99a29d968f888079726a635c53483d3126190d01000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5e5951473c3125190d00000013202c3946535f6c797d7d7d7d7d79716a635b544d453e372f28211a120b0400000000000000000000030e18232d37414a535b636a71777c8185898b8e9091929293939291908e8c8986827d78726b645d544c433930261b1106000000000000000000000000000000000000000d1a2633404c5966738086868686868684776a5d5044372a1d110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034303c4955626e7b87939faba59a90877d756d655e574f48413a332b231b130a0100000000000000000e1b2834414e5a6773808d99a6b0a4978b7e7165584b3f3226190d000004111d2a36424f5b6874818e9aa7b2a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4034271c252f38424b545e67717a848d94949494948c837970675d53473b2f2216090000020d17212a32393e404141414855626f7b8895a2afa4988b7e7164574b414141414141414141414141413f3c362f261c12080000000000000000000000000000000000000000050a0e1012141516161717161513110e0a0602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5a52483e32261a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d18232e39444f59636d778089929aa1a8a49d98938f8c8a888888898a8d90959aa0a8a69f978e857b71675d52473c31251a0e0300000000000a16212d38444f5a646f79828c949ca3a9a19b95918e8b8a898888898a8c8f93999fa6a7a09890877d73695e53483c31251a0e0200000000000000000000000916222e3a46525e6a76818d98a2ada59a90867d75706b686665656565676a6e737a838c96a0aba79c91857a6e62564a3e3226190d01000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000000000000000000000000000000000000000000000000000060f18212a343d464f58626b747d879099a0a099928b837c756d655a4e4235291c1003000000000000000000000000000000000000000a16212c3740484f525353535353535d666b6b6b6b6b6a655e575353535353535353535353565d646a6b6b6b6b6b675f545353535353524e473f352b20140900000013202c3946535f6c79848a8a8a8a837c746d665e575049413a332b241d150e070000000000000000000007111b252f384149515960666b7175797c7f8183848586868686858482807d7a76716c67605a524b423a31271e140a00000000000000000000000000000000000000000d192633404c596571797979797979797974695c5043362a1d100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034323e4b5864717d8a96a3ab9f94887e746b635b534c453e37302821191109010000000000000000000d1926333f4c5865727e8b97a4b0a6998d8073675a4e4135291c1004020915212d3945525e6a7784909ca9b2a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a1d263039424c555f68727b858888888888888882796f63574a3d3124170b000000060f1821282d323434343c4855626f7b8895a2afa4988b7e7164574b3e34343434343434343434343433302b241d140a00000000000000000000000000000000000000020a10161a1d1f2122232323232321201d1a17120e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16212c3740484f525353535353535353524f4840372c21160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d28323d47515b656e77808890979da3a8a39f9b98969595959597999ca0a5a7a29b948d857c73695f554b40352a1f140900000000000005101c27323d48525d677079828a91989ea2a6a19d9a98969595959597999b9fa4a6a19c968e867e756b61574c41362b20140900000000000000000000000006121e2a36424e5965707b86919ba4aca2988f87817b787573727171727376797e858c959ea8a99f958a8074695d52463a2e22160a00000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000000000000000000000000000000000000000000000000000000060f18222b343d465059626b747e879093939393938e877f766a5d5144372a1e11040000000000000000000000000000000000000005101a252e373e4346464646464956626e7778787878767069625c554f48464646464c535a61676e7578787878787065584c4646464645423d362d23190e03000000121f2b3845515d68727b858e97958e867f777069625a534c443d362e272018110a0100000000000000000009131d262f373f474e545a6065696d7072747677787979797978777573706d6a65615b554f48413930281f150c0200000000000000000000000000000000000000000b1824313d495560686c6c6c6c6c6c6c6c6a62584c4034281b0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034333f4c5966727f8c98a5a89c8f83776c62595149423a332c251e170f0700000000000000000000000b1724313d4a56636f7c8895a1aea89b8f82766a5d5145382c20140e0f111a25313d4955616e7a86939facb2a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a141e27303a434d566069737b7b7b7b7b7b7b7b7b7a7064574a3e3124180b00000000060f161d222527272f3c4855626f7b8895a2afa4988b7e7164574b3e31272727272727272727272726241f19130b02000000000000000000000000000000000000030c141b2126292c2d2f2f3030302f2e2c2a26231e19140e080100000000000000000000000000000000000000000000000000000000000000000000000000000000000005101a252e373e4346464646464646464646433e372e251a10050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212b353f49535c656e767e858c92989ca1a4a7a5a3a2a2a2a2a3a6a7a4a09b96908a837b726a61574d43392f24190e03000000000000000b16212c36414b555e67707880868c92979a9ea1a3a4a3a2a2a2a2a3a5a3a19e9a96918b847c746b62594f453b30251a0f03000000000000000000000000020e1a25313d48545f6a747f89929ba4aaa199928c888482807e7e7e7e8082868a90969ea7a8a0978d83796e63584c4135291e120600000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000000000000000000000000000061019222b343e475059626b757e868686868686868684776a5d5144372a1e1104000000000000000000000000000000000000000009131c252c3237393939393d4a5763707d85858585817a746d67605a534d464950575e656b72798085858585807366594c403939393936322b241b110700000000101c2935414c576069727c858e97989189827b736c655d564f484039322a231c130a010000000000000000010b141d252d353c43494f54595d60636668696b6b6c6c6c6c6b6a686664615d5955504a443d362f271e160d030000000000000000000000000000000000000000000915212d38434e575d5f5f5f5f5f5f5f5f5e5950463b3024180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d403433404c596673808c99a6a69a8d8174675b50473f373029221a130c050000000000000000000000000915222e3b4754606d7986929eabab9e9285796d6154483d31251d1b1b1d222c36424d5965717d8a96a2afb2a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d151e28313b444e57616a6e6e6e6e6e6e6e6e6e6e695f54483c2f23160a0000000000040b1116191a222f3c4855626f7b8895a2afa4988b7e7164574b3e31241a1a1a1a1a1a1a1a1a1a1a17130e0905010000000000000000000000000000000000010b151e262d3236383a3b3c3d3d3d3c3b3936332f2a251f19120b0400000000000000000000000000000000000000000000000000000000000000000000000000000000000009131c252c32373939393939393939393937322c251c130900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f19232d37414a535c646c737a81878c9094989a9c9e9f9f9f9f9e9c9a9794908b857f78716960574e453b31271d12070000000000000000040f1a252f39434c555e666e757b81868a8e91949698999a9a9a9a99989694918e8a858079726a625950473d33291e140900000000000000000000000000000915202c37424d58636d7781899299a0a6a39d9894908e8c8b8b8b8c8d8f92969ba1a8a59e968e857b71675c52463b3024190d0100000000000000000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000000000000000000000000000000000000000000000000000000000071019222c353e475059636c7579797979797979797975695d5044372a1d11040000000000000000000000000000000000000000010a131a21262a2c2c2c303d4956626e79828b92928c857f78726b655e5851545b62696f767d848b92928d847a7165584c3f322c2c2c2a26201a120900000000000c1824303a454e57606a737c858e989b948c857e766f686159524b433c352d251c1308000000000000000000020b131b232b32383e43484d515457595b5d5e5f5f5f5f5f5e5d5c5a5755514d49443f39332c241d150c040000000000000000000000000000000000000000000004101c27323c454c515353535353535353524e473e352a1f14080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d403433404c5966737f8c99a5a79a8d8174685c524940372e261d140b020000000000000000000000000006131f2c3845515d6a76838f9ba7aea195897d7165594d42372e2928282a2e343e48535e6a76828e9aa6b2b2a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0c161f29323c454f585e616161616161616161615e574d43372b1f13070000000000000005090c15222f3c4855626f7b8895a2afa4988b7e7164574b3e3124180e0e0e0e0e141a1d20201f1d1915110d090501000000000000000000000000000008131d2730383e4245474849494a4a494745423f3b36302b241d160e060000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2a26211a130a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121b252f38414a525a62696f757b8084888b8e90919292929291908d8b88847f7a746d665f574e453c332a20150b0100000000000000000008131d27313a434c545c636a70757a7e8285878a8b8c8d8d8e8d8c8b8a8885827e79746e67605950473e352b21170d020000000000000000000000000000040f1b26313c46515b656e7780888f959ba0a4a4a09d9b9998989898999b9ea2a7a39f99938c847c73695f554b40352a1f130800000000000000000000000000000004080b0f1c2835424f5b6875828f9084776a5d5044372a1d110b0905000000000000000000000000000000000000000000000000000000000000000000000000071019232c353e47515a636b6c6c6c6c6c6c6c6c6c6a63584d4135281c0f03000000000000000000000000000000000000000000010910161a1e1f20212e3a46525d677079828b9497908a837d767069625c5f666c737a81888f96978e857b72685f54483c3024201f1d1a150f0800000000000008131e29333c454e57616a737c868f989e979088817a726b645c554e463f372e241a0f040000000000000000000109111920272d32383c4044474a4d4f5051525353535252514f4d4b4845413d38332e28211a130b030000000000000000000000000000000000000000000000000b15202a333a4145464646464646464645423c352c23180e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034323e4b5864717d8a97a3a99c9084786e645b524940382f261d140b0100000000000000000000000004101c2935424e5a66737f8b97a3afa5998d81756a5e53494039363435363a3f464f5a646f7b87929eaab6b2a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d040d17202a333d464d5254545454545454545454524c453b31261b0f030000000000000000000915222f3c4855626f7b8895a2afa4988b7e7164574b3e3124180b000710181f252a2c2d2c2925211d1915110d09050000000000000000000000020e19242f3942494e515355565656565554524f4b47423c362f28201810070000000000000000000000000000000000000000000000000000000000000000000000000000000000010910161a1e1f20202020202020201f1e1a16100901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131d262f38404850575e646a6f74787c7e818384858686858483817e7b77736e69625c554d453c332a21180e0400000000000000000000010b15202a333c424a51585f646a6e7276787b7d7e8081818181807e7d7b7875726d68635d564e473e352c23190f050000000000000000000000000000000009141f2a353f49535c656e767d848a8f94989b9ea0a2a3a4a4a4a4a3a2a09e9b97938e88827a726a61574d43392e24190d0200000000000000000000000000030a101417191c2835424f5b6875828f9084776a5d5044372a1d191815110b04000000000000000000000000000000000000000000000000000000000000000000000007111a232c353f4851595e5f5f5f5f5f5f5f5f5f5e5951473c3025190c000000000000000000000000000000000000000000000000050a0e1113131e2a35414b555e677079828c959b958e88817a746d676a70777e858c9399988e857c726960564d43382c201413110e090400000000000000020d17212a333c454f58616a737d868f98a19a938b847d756e676058514940362c2015090000000000000000000000070e151c21272c3034383b3e404243454546464646454443413e3c3935312d28221c160f080100000000000000000000000000000000000000000000000000040e18212930353839393939393939393936312b231a1107000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034303d4956626e7b87939faaa1958a80766d645b524a41382f261d1309000000000000000000000000000d1926323e4a57636f7b87939faba99e92867b70655b524a4542414243464a5058616b76818c97a1a6aeb2a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01050e18212b343c42464848484848484848484746413b33291f150a000000000000000000000915222f3c4855626f7b8895a2afa4988b7e7164574b3e3124180b050f19222a3136393a3935312d2925211d1915100a0300000000000000000006131f2a36414b545a5e60616263636362615e5b57524d474039322a22191007000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0e1113131313131313131313110e0a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b141d262e363e454c53595f64686c6f7274767878797978787674726f6b67625d57514a433b332a21180f060000000000000000000000030f1b26323c454d53565656595e6266696c6e707273737474737372706e6c6966615d57524b443d352c231a11070000000000000000000000000000000000030e18232d37414a535c646b72797e84888c8f9193959697979897969594918f8b87827d77706860574e453c32271d120700000000000000000000000000050e151b202426262835424f5b6875828f9084776a5d5044372a262624211c160f07000000000000000000000000000000000000000000000000000000000000000000000008111a232d363f474e52535353535353535353524e473f352a1f140800000000000000000000000000000000000000000000000000000205060d19242f39434c555e677079838c959e99938c867f7872747b828990979d988f867c736a60574e443b31261b1006040200000000000000000000050f18212a333d464f58616b747d879099a29d968f878079716a635b52483d3125190d000000000000000000000000040a10161b2024282c2f3133353738393939393938373634322f2c2925211c17110b0500000000000000000000000000000000000000000000000000000000060f171e24292b2c2c2c2c2c2c2c2c2c2a262019110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d40342d3a46525e6a76828e99a4a69c92887f766d645c534a41382f251b11060000000000000000000000000a16222e3a47535f6b76828e9aa5aea3978c81776d645c56514f4e4e5052565b626a737d889294959ca6b1a5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0100060f19222a31363a3b3b3b3b3b3b3b3b3b3b3936302921170d03000000000000000000000915222f3c4855626f7b8895a2afa4988b7e7164574b3e3124180b0c17212b343c42464745413d3935312d2926211c150d0400000000000000000916222f3b47525d666a6c6e6f7070706f6d6b67635e58524b443c342b22191006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c242c343b42484e53585c606366686a6b6c6c6c6c6b6a6865635f5b57524c463f38312921180f060000000000000000000000000713202c38434e575f6363636363605a5d5f626365666767676766656462626362605d59534d463e352c22180e0400000000000000000000000000000000000007111b252f38414a525a61676d73777c7f82858788898a8b8b8a8a898785827f7b77716c655e564e453c332a20150b00000000000000000000000000050e1720272c3033333335424f5b6875828f9084776a5d504437333333312d2721191006000000000000000000000000000000000000000000000000000000000000000000000008111b242d363d424546464646464646464645423d352d23190e03000000000000000000000000000000000000000000000000000000000008131d27313a434c555e67707a838c959e9e97908a837d7f868d949ba19990867d736a61574e453c32291f150a0000000000000000000000000000060f18212b343d464f59626b747d879099a0a099928a837c746d64594d4135281c0f0000000000000000000000000000050a0f14181c1f222527292a2b2c2c2c2c2c2c2b29282523201d1915100b0600000000000000000000000000000000000000000000000000000000000000050d13181c1f20202020202020201f1d1a150e070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d40342a36424e5a66717c87929ca6a49a91887f766e655c534a41372d22180d02000000000000000000000006121e2a36424e5a66727d89949faaa99e93897f766e67615e5c5b5b5c5e62676d747c868f92888a95a1aea5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0100000710181f252a2d2e2e2e2e2e2e2e2e2e2e2d2a251e170f0500000000000000000000000915222f3c4855626f7b8895a2aea4988b7e7164584b3e3225180b121d28333d464d5253514d4946423e3a36322d271f160d03000000000000000b1824313e4a57636f77797b7c7c7d7d7b7a77736f69635d564e463d342b22180f05000000000000000000000000000000000000000000000000000000000000000004070808080808080808080807040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a131a222930373c42474c505357595b5d5e5f5f5f5f5e5d5b5956534f4b46413b352e271f170f06000000000000000000000000000916232f3c48545f6a6f6f6f6f6f6b615653555758595a5a5a5c61666a6d6f6f6f6d69645e5750473e342a20150a0000000000000000000000000000000000000009131d262f3840484f565c62676b6f7376787a7b7d7d7e7e7d7d7c7a7876736f6b66605a534c443c332a21180e04000000000000000000000000010c17202931383d3f404040424f5b6875828f9084776a5d50444040403f3d39322b22180e03000000000000000000000000000000000000000000000000000000000000000000000009121b242b3236393939393939393939393936312b231b1107000000000000000000000000000000000000000000000000000000000000010b151f28313a434c555e68717a838c959ea29b958e888a91989ea39a90877e746b62584f463c332a20170d03000000000000000000000000000000060f19222b343d475059626b757e879093939393938e867f76695d5043372a1d100000000000000000000000000000000004080c101316181a1c1d1e1f2020201f1f1e1d1b191614100d09040000000000000000000000000000000000000000000000000000000000000000000002080c1012131313131313131313110e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d403427323e4954606b75808a949da6a39a918980776e655c53493f342a1f14090000000000000000000000020e1a26323e4955616c77838e99a3ada59b91888078726d6a686768696b6e72787e868e978c818794a0ada5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000000060e141a1e2021212121212121212121201d19130d050000000000000000000000000815222e3b4854616e7b8794a1ada5988c7e7265594c3f33261a1618222e3a454f585e605d5a56524e4a46423e3831281f150a000000000000000b1825323e4b5865717e868889898a89888683807a756e6760584f463d342a21170d020000000000000000000000000000000000000000000000000000000000060c10131515151515151515151513100c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010910171f252b31363b4044474a4d4f50515252525251504f4c4a47433f3a353029231c150d0500000000000000000000000000000b1724313d4a5764707b7c7c7c7c7266594c494a4b4f555c62686d72777a7c7c7b79757069615950463c32271c1105000000000000000000000000000000000000010b141d262e363d454b51565b5f6366696c6d6f7071717171706f6e6c6966635f5a554f49423a332a21180f060000000000000000000000000007131e29323b43494c4c4c4c4c4f5b6875828f9084776a5d504c4c4c4c4c49443c342a1f140900000000000000000000000000000000000000000000000000000000000000000000000009121a20262a2c2c2c2c2c2c2c2c2c2c2c2a26201911090000000000000000000000000000000000000000000000000000000000000000030d161f28313a434c565f68717a838c969fa6a09994959ca2a49a91887e756b625950463d342a21180e050000000000000000000000000000000000071019222b353e475059626c757e868686868686868684776a5d5044372a1d11000000000000000000000000000000000000000307090c0e0f111212131313131211100e0c0a070401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034272d38434e59646e78828b949ca4a39b928981776e645b50463b30251a0f0300000000000000000000000a15212d39444f5b66717c87919ba5ada39a928a837e7a7775747575777a7e8389909890857a8794a1aea5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d010000000003090e11141515151515151515151514110d0802000000000000000000000000000714212d3a4753606d7986939faca69a8d8174675b4e42352924232429333f4b56616a6d6a66625e5a56524e49433a31271c10050000000000000b1825323e4b5865717e8b94959696969593908b868079726a61584f463c33291e140a000000000000000000000000000000000000000000000000000000020a11181c2021222222222222222221201c18110a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d141a20262b2f34373b3e4042444545464646454442403d3a37332e2a241e18110a030000000000000000000000000000000a1724303d4a5663707c8989898175685c50494e545a60676d73787e838689898885817b736b62584e43382d22160b00000000000000000000000000000000000000020c1824303b454f565b5c5c5c5c5c5d5f616263646464646362615f5d5c5c5c5c5c5a544b41362b1f130700000000000000000000000000000c18242f3a444d545859595959595b6875828f9084776a5d595959595959554e463c31251a0e02000000000000000000000000000000000000000000000000000000000000000000000000080f151a1d1f2020202020202020201f1d1a150f0700000000000000000000000000000000000000000000000000000000000000000000040d161f28313a434d565f68717a848d969fa0a0a0a0a0a09b92887f756c635950473e342b22180f0600000000000000000000000000000000000000071019232c353e47505a636c7579797979797979797974695c5043362a1d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002050707070707070707070705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d40342727323d48525c667079828a929ba4a49b938a80766c62584d42372b201409000000000000000000000005101c28333e4a55606a758089939ca5aca39c958f8a86838281818284878a8f949b92887e7a8794a1aea5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d010000000000000205070808080808080808080807050100000000000000000000000000000006131f2c3945525e6b7884919daaa89c8f83766a5e52463b34313030343b45505b67737a76726e6a66625e5a554d43382d2115090000000000000b1825323e4b5865717e8b98a2a3a3a3a29f9c97918b847c736a61584e453a30261b110600000000000000000000000000000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2c28231c140b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090f141a1f23282b2e31333537383939393938373533312e2b27231e19130d0700000000000000000000000000000000000916222f3c4855616e7b87949185786d6158565a5f656c72787e848a8f93959695928c857d746a60554a3e33271c1004000000000000000000000000000000000000000f1c2834404c57616769696969696969686258575757575c646869696969696969655d53473c2f23170a0000000000000000000000000000101c2935404c565f656666666666666875828f9084776a6666666666666560584d42362a1e11050000000000000000000000000000000000000000000000000000000000000000000000000004090e111313131313131313131313110e0904000000000000000000000000000000000000000000000000000000000000000000000000040d161f28313a444d565f68717a848d93939393939393928980766d635a51473e352c2219100600000000000000000000000000000000000000000007101a232c353e48515a636b6c6c6c6c6c6c6c6c6c6a62584c4034281b0f0000000000000000000000000000000000000000000000000000000000000000000000000000000406070707070707070502000000000000000000000000000000000000000000000000000000040a0e1113141414141414141413120e0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d403427202b36404a545e6770788189929ba4a59c92897e74695e53483c3125190e0200000000000000000000000b16222d38434e59636d77818a939aa2a8a6a09a9692908e8e8e8f9193969b9a928980767b8894a1aea5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d010000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3743505c6975828e9ba7ab9f92867a6e62574d45403d3c3d40454d57616c7883827e7a76726e6a665f55493e3225190d0000000000000b1825323e4b5865717e8b989a9a9b9da1a5a8a39c958e857c736a60564c42382d22180d020000000000000000000000000000000000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b3b38342e261d140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e13171b1f222527292a2b2c2c2c2c2b2a292724221e1b17120d08020000000000000000000000000000000000000714202d3a46535f6c79859295897e73696463656b71777d838a8f959a9fa2a3a19d978f867c71665b4f44382c20140800000000000000000000000000000000000000111e2b3744505d697375757575757575746a5e524b4b56626d75757575757575756f64584b3f3225190c0000000000000000000000000000121f2b3844515d68717373737373737375828f90847773737373737373726a5e52463a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161f28323b444d565f68717b84868686868686868680766d645b51483f352c23191007000000000000000000000000000000000000000000000008111a232c363f4851595e5f5f5f5f5f5f5f5f5f5e5950463b3024180c00000000000000000000000000000000000000000000000000000000000000000000000001070c101314141414141413110e0903000000000000000000000000000000000000000000000000070f151a1e202020202020202020201e1a150f080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a242e38424c555e666e778089929ba5a49a90867b7064594d42362a1e1206000000000000000000000005111c27323c47515c656f78818990979ca1a5a6a29f9d9b9b9b9c9d9f9c968f8880776e7b8894a1aea5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0100000000000000000000000000000000000000000000000000000000000000000000000000010f1b2834414d5a66727e8b97a3aea2968a7f73695f56504c4a49494c51575f68737d898e8a86827e7a7671665a4e4134281b0e0200000000000b1825323e4b5865717e8b8e8e8e8f9195999fa5a7a0978f867c72685e54493f34291e1308000000000000000000000000000000000000000000000006111c262f383f4548484848484848484848453f382f261c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070b0f1316181a1c1e1f1f20201f1f1e1c1a1815120f0b0601000000000000000000000000000000000000000005121e2b3844515d6a76838f9a8f857b74717072767c82888e959ba1a5a1a0a0a1a4a1988e83776c6054493d3024180c00000000000000000000000000000000000000121e2b3845515e6b7882828282828282796d6053464a5764717d828282828282807366594c403326190d000000000000000000000000000013202c3946535f6c798080808080808080828f908480808080808080807b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000010406090b0d0f10111213131313121211100e0c0a080502000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d162029323b444d565f6972797979797979797979776e655b52493f362d231a11070000000000000000000000000000000000000000000000000008111a242d363f484e52535353535353535353524e473e352a1f14080000000000000000000000000000000000000000000000000000000000000000000000040c13181d20212121212121201e1a140e060000000000000000000000000000000000000000000008111920262a2d2d2d2d2d2d2d2d2d2d2a26211a120900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4134271a1c26303a434c545d656d768089939ea9a2978c81756a5e52463a2e2216090000000000000000000000000a15202b35404a535d666f777e858b9195999b9d9e9f9f9e9d9b9895908b857e766e6e7b8895a2aea5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0100000000000000000000000000000000000000000000000000000000000000000000000000000c1925313e4a56636f7b87939faba79b90857a7168615c59575656585c6269717a858f9a96928e8a868175685b4f4235281c0f0200000000000b1825323e4b5865717e828181818285898e949ba2a9a1988e847a70665b50453b3024190e03000000000000000000000000000000000000000000000b17222d38424a5154555555555555555554514a42382d22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306090c0e0f11121313131312110f0e0b090602000000000000000000000000000000000000000000000003101c2935424e5a6773808c98978e86807d7c7e82878d9399a0a49e9995939395989d9f94897d7165594d4134281c0f03000000000000000000000000000000000000121e2b3845515e6b78858f8f8f8f8f86796d6053464a5764717d8a8f8f8f8f8c807366594c403326190d0000000000000000000000000000121f2c3845515d69747f8a8c8c8c8c8c8c8d94958d8c8c8c8c8c8c8c81756a5f53463a2d201407000000000000000000000000000000000000000000000000000206090d101315181a1b1d1e1f1f2020201f1e1e1c1b191714120f0b080400000000000000000000000000000000000000000000000000000000000000000000000000000000040e172029323b444e5760686c6c6c6c6c6c6c6c6c6b655c534940372d241b110800000000000000000000000000000000000000000000000000000008121b242d363d424546464646464646464645423c352c23180e0200000000000000000000000000000000000000000000000000000000000000000000040d161d24292c2e2e2e2e2e2e2d2a251f181007000000000000000000000000000000000000000007111a232b3236393a3a3a3a3a3a3a3a3937322b241b1107000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946525f6c7986929faca79a8e8174675b4e4135281b141e28313a424b535b646e77828c97a2a99e92867a6f63564a3e3225190c000000000000000000000000040f19232e38414b545d656c747a8085898c8f9192929291908e8c8884807a736c646e7b8895a2aea5988b7e7165584b3e3225180b0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0100000000000000000000000000000000000000000000000000000000000000000000000000000916222e3a47535f6b77828e9aa5ada1978c837a736d686563636365686d737b838c96a1a29e9a94897d7165594d4034271b0e0100000000000b1824313e4a57636f777675747475787d82899099a1aaa0968c82776d62574c41362a1f1408000000000000000000000000000000000000000000000f1b27333f4a545c616161616161616161615c544a3f33271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1926323f4b57636f7b88939f97918c8a898b8e93989ea59f99938d898686888c929a998d8175695d5044382b1f1306000000000000000000000000000000000000121e2b3845515e6b7885929c9c9c9386796d6053464a5764717d8a979c9c998c807366594c403326190d0000000000000000000000000000101c2935414c57636e79848f9999999999999d9e9a999999999991867a6f64594e42362a1e1205000000000000000000000000000000000000000000000004090e1216191c1f222426282a2b2c2c2c2c2c2c2b2a29272623211e1b1814100b07020000000000000000000000000000000000000000000000000000000000000000000000000000050e172029323c454e565d5f5f5f5f5f5f5f5f5f5f5b534a41372e251b1209000000000000000000000000000000000000000000000000000000000009121b242b3236393939393939393939393936312b231a110700000000000000000000000000000000000000000000000000000000000000000000020c161f282f35393a3a3a3a3a3a3936312a22190f05000000000000000000000000000000000000020d18232c353d4246474747474747474746433d362d23190e03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0d0f0f0f0f0f0f0d0a05000000000000000000000000000000000000000000000000000000050a0d0f0f0f0f0f0f0d0a050000000000000000000000000000000000000004080b0c0d0d0d0d0c0a0602000000000000121f2c3845525e6b7885919eaba89c8f8275695c4f43362a1d11161f2830394149525c66707b86919da9a3978b7e73665a4d4135281c0f0200000000000000000000000007121c262f39424b535b62696f74797d8082848586858584827f7c78746e6861616e7b8895a2aea5988b7e7165584b3e3225180b0013202c3946535f6c798693a0a0a09a8d8173675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000000000000000000000006121e2a36424e5a66727d88939ea8a89e958c847d787472706f6f7174787e858d959ea8ada3998e83776c6054483c3024180c0000000000000916222f3b47525d666a69686767696c71777e878f98a2a89e94897e73685d52473c3025190e03000000000000000000000000000000000000000000121e2b37434f5b666d6e6e6e6e6e6e6e6e6d665b4f43372b1e1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205080b0d0f101112121211100f0d0b0805020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16232f3b47535f6b77828e99a29d999796979a9ea4a09a948e87827c79797c8188919b9185796c6053473b2e221509000000000000000000000000000000000000121e2b3845515e6b7885929ea9a09386796d6053464a5764717d8a97a4a6998c807366594c403326190d00000000000000000000000000000d1924303b46515c68737e8995a0a6a6a6a6a9aaa6a6a6a6a1968b8074695e53483c31261a0e02000000000000000000000000000000000000000000050b10151a1e2225292c2e31333536373839393939393837363432302d2a2724201c17130d080200000000000000000000000000000000000000000000000000000000000000000000000000050e17202a333c444c51535353535353535353524f4941382f251c13090000000000000000000000000000000000000000000000000000000000000009121a21262a2c2c2c2c2c2c2c2c2c2c2c2a2620191108000000000000000000000000000000000000000000000000000000000000000000000008131e28313a404547474747474746423c342b21160b00000000000000000000000000000000000007131f2a343e474e525353535353535353534e483f352a1f140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b11161a1c1c1c1c1c1c1a16110b040000000000000000000000000000000000000000000000040b11161a1c1c1c1c1c1c1a16110b04000000000000000000000000000000030a10141719191919191816120d070000000000111e2b3744515d6a7783909da9aa9d9084776b5e5245392c20140d161e272f37404a545e6975818d99a6a79b8f8276695d5043372a1e1104000000000000000000000000000a141d273038414950575e63686d7073767778797878777573706c68635d57616e7b8895a2aea5988b7e7165584b3e3225180b0013202c3946535f6c798693939393938d8173675a4d4034271a0d010000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26323e4955606c77828c96a0a9a79e968f8984817e7d7c7c7e81848a90979fa8ada49b91877c71665b4f44382c20140800000000000006131f2a36414b545b5d5c5b5a5b5c60666d757d86909aa4a59b90857a6f63584d41362b1f140800000000000000000000000000000000000000000013202c3946525f6c777b7b7b7b7b7b7b7b776c5f5246392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001060a0e1215181a1c1d1e1e1e1e1e1d1b1a1714110e0a050000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131f2b37434f5a66717c87919ba3a5a3a3a4a6a19b958f89827c76716d6d70767f899495887c6f63564a3d3124180b000000000000000000000000000000000000121e2b3845515e6b7885929eaba09386796d6053464a5764717d8a97a4a6998c807366594c403326190d000000000000000000000000000008131e2a35404b56626d78838f9aa5b0b3b3b5b5b3b3b1a69b9085796e63584d41362b2015090000000000000000000000000000000000000000050b11161c21252a2e3235383b3d40414344454646464645454442413f3c3a3734302c28231e19130e0801000000000000000000000000000000000000000000000000000000000000000000000000050e17212a323a404446464646464646464646433e372f261d130a010000000000000000000000000000000000000000000000000000000000000000080f151a1e1f2020202020202020201f1d1a150e070000000000000000000000000000000000000000000000000000000000000000000000020e1925303a434b51545454545454524d463d33281d110500000000000000000000000000000000000b1824303b4650595f60606060606060605f5951473c3024180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e161c222628292929292826221c160e05000000000000000000000000000000000000000000050e161c222628292929292826221c160e0500000000000000000000000000050e151b2024262626262625221e18120a01000000101d2936424f5c6875828e9ba7ac9f93867a6d6155483c30251a1513151d252e38424d5865717d8a97a3aa9e9184786b5e5245382c1f120600000000000000000000000000020b151e262f373f464c52585c616467696b6b6c6c6b6a686663605c575255616e7b8895a2aea5988b7e7165584b3e3225180b0013202c3946535f6c79868686868686868173675a4d4034271a0d010000000000000000000000000000000000000000000000000000000000000000000000000000000a16212d38444f5a65707a858e97a0a7a8a19a95908d8b8a89898a8d90959ba1a9aaa39b928980756b60554a3e33271c1004000000000000020e19252f39424a4f51504e4e4e50545b636b747e88929da7a1968b8075695e53473c3025190d02000000000000000000000000000000000000000013202c3946535f6c798688888888888886796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d12161a1e212426282a2b2b2b2b2b29282624211e1a16110c060100000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26323e4955606a757f8991989d9f9f9e9a95908a847d77716b656060646d78838f978b7e7265584c3f33261a0d000000000000000000000000000000000000121e2b3845515e6b7885929ea0a09386796d6053464a5764717d8a97a0a0998c807366594c403326190d0000000000000000000000000000020d18242f3a45505c67727d89949faab5c0c1c2c0b7aba0958a7e73685d52473b30251a0f03000000000000000000000000000000000000020910161c22272c31363a3e4145474a4c4e505152525353535251504f4d4b494643403c38342f2a251f19130c05000000000000000000000000000000000000000000000000000000000000000000000000050f1820292f35383939393939393939393937332d251d140b0100000000000000000000000000000000000000000000000000000000000000000000040a0e111313131313131313131313110e090300000000000000000000000000000000000000000000000000000000000000000000000006121e2a36414c555d6061616161615e584f44392e22160900000000000000000000000000000000000e1b2734404c58626b6d6d6d6d6d6d6d6d6b63584d4134281c0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000040e1720272e32353636363635322e2720170e0400000000000000000000000000000000000000040e1720272e32353636363635322e2720170e040000000000000000000000050e1720272c303333333333322f2a231c130a0000000e1b2734414d5a6673808c98a5aea295897d7164584d41362c25211f1f1f2126303c4956626f7c8895a2ac9f9386796c5f5346392d2013060000000000000000000000000000030c141d252d343b41474c5154585a5c5e5f5f5f5e5d5c5a5754504b4855616e7b8895a2aea5988b7e7165584b3e3225180b00131f2c3946525f6b7679797979797979797266594d4033271a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000005101c27333e49545e69727c858e969da3a9a6a19d9a9896969697999ca1a6aaa59f98918980776d63594e44382d22160b000000000000000008131d2730383e42444342414144495159626c76808b96a0a89d91867a6f64584d41352a1e1207000000000000000000000000000000000000000013202c3946535f6c798693959595959386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d13181d22272a2e313335363738383837363533302d2a26221d18120c05000000000000000000000000000000000000000000000000000000000000000000000000000000000a16212d38434e59636d767f878d909293918e89847e79726c66605a54535b67727e8b938d8174675a4e4135281b0f020000000000000000000000000000000000121e2b3845515e6b7885929393939386796d6053464a5764717d8a939393938c807366594c403326190d00000000000000000000000000000007121d29343f4a55616c77828e99a4afbac5c7bcb1a59a8f84786d62574c40352a1f1408000000000000000000000000000000000000050d141a21272d33383d42464a4e515456595b5c5d5e5f5f5f5f5f5e5d5c5a585553504c4844403b36302a241e171009010000000000000000000000000000000000000000000000000000000000000000000000060e171e24292b2c2c2c2c2c2c2c2c2c2c2a27221b130b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3a47525e676d6d6d6d6d6d6a61564a3e3125180c0000000000000000000000000000000000101c2936424f5c68747a7a7a7a7a7a7a7a75695d5043372a1d1004000000000000000000000000000000000000000000000000000000000000000000000000000000000b16202932393e4242424242423e39322920160b000000000000000000000000000000000000000b16202932393e4242424242423e39322920160b00000000000000000000010c17202931383d3f404040403e3b352e251c120700000c1925323e4b5764707d8995a2aea5998d8175695e52483e36312e2c2c2c2d30363e4956626f7c8995a2ada09386796d6053463a2d201307000000000000000000000000000000020b131b222930363b4044484b4e505152525252514f4d4b47443f4855616e7b8895a2aea5988b7e7165584b3e3225180b00111e2a37434f5a646b6c6c6c6c6c6c6c6c6960554a3d3125180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212c37424c57606a737c848b92989da1a5a7a6a4a3a2a3a4a6a8a5a29e99948e877f776e655b51473d32271c11050000000000000000010c151e262d32363736353434383f47505a646e79848f9aa5a3978c8075695d52463b2f23170c000000000000000000000000000000000000000013202c3946535f6c798693a0a2a2a09386796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a11181e24292e33373a3d404243444545454443413f3d3a36322d29231d17100902000000000000000000000000000000000000000000000000000000000000000000000000000005101c27323c47515b646d757b8184868685827e78736d67615b544e484a56636f7b8686868275695c4f4336291d10030000000000000000000000000000000000121e2b3845515e6b7885868686868686796d6053464a5764717d868686868686807366594c403326190d000000000000000000000000000000010c17232e39444f5b66717c87939ea9b4bfc1b6aa9f94897d72675c51463a2f24190e020000000000000000000000000000000000080f171e252c32383e44494e52565a5d60636567696a6b6c6c6c6c6b6b6a686664625f5c5854504b46413b352f29221b130c040000000000000000000000000000000000000000000000000000000000000000000000050c13181c1f202020202020202020201e1b16100901000000000000000000000000000000000000000000000000000000000000000000000000000000000406080808080808080808070501000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d4956636f797a7a7a7a7a7266594d4033271a0d0000000000000000000000000000000000101c2936434f5c69768387878787878784776a5d5044372a1d110400000000000000000000000000000000000000000000000000000000000000000000000000000006111d27323b444a4e4f4f4f4f4e4a443b32271d1106000000000000000000000000000000000006111d27323b444a4e4f4f4f4f4e4a443b32271d110600000000000000000007131e29323b43494c4c4c4c4c4b463f372e23180d02000a16232f3c4854616d7986929eaaa99d91867a6f64595048413d3a3938393a3d4147505a66727e8a97a4ac9f9386796c5f5346392d20130600000000000000000000000000000000010911181e252a3034383c3f414344454646454443413e3b383b4855616e7b8895a2aea5988b7e7165584b3e3225180b000e1a26323e48525a5f5f5f5f5f5f5f5f5f5d574e44392d211509000000000000000000000000000000000000000000000000000000000000000000000000000000000005101b26303b454f58616a727981878c9195989b9d9e9f9f9f9e9d9b9996928e89837c756d655c534940352b20160b00000000000000000000030c141c2226292a2a2828282d353e48525d67727d89949fa89d91867a6e63574b4034281c10050000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d141c23292f353a3f4346494c4e505151515151504e4c4946423e39342e28221b140c0400000000000000000000000000000000000000000000000000000000000000000000000000000a15202b353f49525b636a70747779797875726d68625c565049433d4754606c777979797974685c4f4336291d10030000000000000000000000000000000000121e2b3844515e6a7579797979797979766b5f53464a57636f79797979797979797165584c3f3326190c0000000000000000000000000000000006111c28333e4954606b76818d98a3aeb9bbb0a4998e83776c61564b3f34291e1307000000000000000000000000000000000109121a212930373d444a4f555a5e62666a6d6f7274757778797979797877767573716e6b6864605c57524c47413a332c251e160e05000000000000000000000000000000000000000000000000000000000000000000000001070c101213131313131313131313110f0a0500000000000000000000000000000000000000000000000000000000000000000000000000000000060c101314151515151515151413110d080200000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d878787878173675a4d4034271a0d0100000000000000000000000000000000101c2936434f5c69768390949494949084776a5d5044372a1d11040000000000000000000000000000000000000000000000000000000000000000000000000000000a16222e39444d555b5c5c5c5c5b554d44392e22160a00000000000000000000000000000000000a16222e39444d555b5c5c5c5c5b554d44392e22160a0000000000000000000c18242f3a444d5458595959595751493f352a1e1206000713202c3845515d6975818d99a5aea2978b80766b6259524d494745454547494d5259626c76828e9aa6aa9d9184786b5e5245382c1f1206000000000000000000000000000000000000060d13191f24282c303235363838393938373634322f2e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000a16212c3740484f525353535353535353514c453c32271c110500000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f29333d464f5860686f757b8185898c8e909192929292918f8d8a86827d77716a635b534a41372e24190f040000000000000000000000020a11161a1d1e1d1c1b1c232c36404b56616c77838f9aa6a2978b7f73685c5044392d2115090000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f171f262d343a40464b4f5356595b5c5d5e5e5e5d5c5a5855524e4a453f3a332d251e160e0500000000000000000000000000000000000000000000000000000000000000000000000000040f19232d37404951595f64686b6c6c6b6966615c57514b453e383844505b656b6c6c6c6c6a62584c4034271b0e020000000000000000000000000000000000101d2935424e59636b6c6c6c6c6c6c6c6b645a4f4347535e676c6c6c6c6c6c6c6c685f54493d3024170b00000000000000000000000000000000000b16222d38434e5a65707b87929da8b3b5a99e93887d71665b5045392e23180d01000000000000000000000000000000020a131b242b333a42484f555b60656a6e7276797c7e818284858686868685848382807d7b7874716c68635e58524c453e372f2820170f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f212121212121212121201d19130c04000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a94948d8174675a4d4134271a0e0100000000000000000000000000000000101c2936434f5c697683909ca0a09d9084776a5d5044372a1d11040000000000000000000000000000000000000000000000000000000000000000000000000000000d1a26333f4a555f6769696969675f554a3f33261a0d01000000000000000000000000000000000d1a26333f4a555f6769696969675f554a3f33261a0d010000000000000000101c2935404c565f6566666666635b51463b2f22160a0004101c2935414d5965717d88949faaa89d92877d746b645e5956535252525355595d646b747d88939faaa69a8e8275695c5043372a1e11040000000000000000000000000000000000000002080e13181c202326282a2b2c2c2c2c2b292725222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0005101a252e373e4346464646464646464645413b332a20160b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17212b343d464e565d646a7075797c80828485868686858482807d7a76716c666059514941382f251c12080000000000000000000000000000050a0e1011100f0e111a242f3a45505b66727d8995a1a79c9084786d6155493d32261a0e0200000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f18212931383f464c51565b5f626567696a6b6b6b6a696765625e5a56514b453e37302820170f060000000000000000000000000000000000000000000000000000000000000000000000000007111b252e373f474e54585c5e5f5f5f5d5955504b45403a332d333f49535b5f5f5f5f5f5e5950463b3024180c0000000000000000000000000000000000000d1925313d4751595e5f5f5f5f5f5f5f5f5a52493e414c555c5f5f5f5f5f5f5f5f5d564d43382c201408000000000000000000000000000000000005101b27323d48535f6a75808c97a2adafa3988d82766b60554a3e33281d1206000000000000000000000000000000010b141c252d353d454c535a60666c71767a7e8286898b8d8f9091929393929291908e8c8a8784817d78746e69635d575049413a322921180f060000000000000000000000000000000005090c0e0e0e0e0e0e0e0e0e0e0d0a07020000000000000000000000000000000000000000000000000000000000000001060a0c0e0e0e0e0e0e0e0e0e0e0c09050000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2d29241e160e050000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a979a8e8174675a4d4134271b0e0100000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d11040000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2935424e5b67717575757571675b4e4235291c0f03000000000000000000000000000000000f1c2935424e5b67717575757571675b4e4235291c0f030000000000000000121f2b3844515d6871737373736d63574b3e3225180c00000c1925313d4954606c77838e99a3aea4998f867d756f696562605f5f5f606265696f757d868f9aa4aca1968a7e7266594d4134281b0f0200000000000000000000000000000000000000000002070c101417191b1d1e1f1f1f1f1e1d1b19222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000009131c252c32373939393939393939393835302921180e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f19222b343c444c52595f64696d707375777879797978777673716e6a65605b554e473f372f261d130a000000000000000000000000000000000000000000000008121d28333e4a55616d7884909ca8a195897d72665a4e42362a1f130700000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f18212a333b424a51575d62676b6f72747677777877777574716e6a66615c565049423a322921180e050000000000000000000000000000000000000000000000000000000000000000000000000009131c252d353c42484c4f52535352504d4945403a342e28222d3741494f5253535353524e473e342a1f13070000000000000000000000000000000000000915202b363f484e5253535353535353524f4940373a434b505353535353535353514c443b31271b10040000000000000000000000000000000000000a15212c37424d59646f7a85919ca7a89d92877b70655a4f44382d22170c000000000000000000000000000000000a131d262e373f474f575e656b71777d82878b8f9295989a9c9d9e9f9fa09f9f9e9c9b999694908d8984807a746e68615a534b443b332a21180f0600000000000000000000000000040b1115191a1a1a1a1a1a1a1a1a1a1917130d070000000000000000000000000000000000000000000000000000000000060c1216191a1a1a1a1a1a1a1a1a1a1916110b050000000000000a141d262d34383a3b3b3b3b3b3b3b3b3935302820170e0400000000000000000000000000000000000000000000000000000000000000000b1824313e4a5764717d8a979b8e8174675b4e4134281b0e0100000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c69768282828276695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768282828276695c4f4336291c1003000000000000000013202c3946535f6c79808080807366594c403326190d00000814202c38444f5b66717c87929ca6aba1988f87817a75716f6d6c6b6b6d6e71757a80878f98a1aba59a9084796d6156493d3125180c0000000000000000000000000000000000000000000000000004070a0d0f10121213131211100e15222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000010a131a21262a2c2c2c2c2c2c2c2c2c2c29241e170f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071019222a323a41484e53585d606466686a6b6c6c6c6b6a696764615e59554f49433c352d251d140b010000000000000000000000000000000000000000000000010c17222d3945505c6874808b97a3a69a8e82766a5f53473b2f23170b00000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e18212a333c454d545b62686e73777b7e8182848485848482817e7a77726d67615b534c443b332a20170d03000000000000000000000000000000000000000000000000000000000000000000000000010a131b232b31373c40434546464543413d39342f29231d1b262f373e43464646464645423c352c22180d02000000000000000000000000000000000000040f19242d363d42454646464646464646433e372e31394044464646464646464644403a322920150a00000000000000000000000000000000000000040f1a26313c47525e6974808b96a1a2978c81756a5f54493d32271c110500000000000000000000000000000009121c252f3840495159616870767d83888e92979b9ea1a4a6a8a9a8a7a6a6a6a7a8a9a7a5a3a09d9995908b86807a736c655d554d453c332a21180e040000000000000000000000060e161c21252727272727272727272726231e1811090000000000000000000000000000000000000000000000000000000810171d22262727272727272727272725221d160f070000000005111b262f383f4447484848484848484745413a322920160c03000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8b989b8e8174685b4e4135281b0f0200000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c6976838f8f8376695c4f4336291c100300000000000000000000000000000000101c2936434f5c6976838f8f8376695c4f4336291c1003000000000000000013202c3946535f6c79868c8c807366594c403326190d000004101c27333e4a55606b75808a949da5aaa199928c86817e7b79787878797b7d81868b9299a1aaa59c93897e73685c5145392d21150900000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000010910161a1e1f20202020202020201f1c19130d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101820282f363c42484c5154575a5c5d5e5f5f5f5f5e5c5a5855514d49443e38322b231b130b020000000000000000000000000000000000000000000000000005111c2834404b57636f7b8793a0aa9f93877b6f63574b3f34281c1004000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000020c16202a333c454e575e666d73797e83878b8d8f90919291908f8d8a87837e78736c655e564d453c32291f150b010000000000000000000000000000000000000000000000000000000000000000000000000109111920262b303436383939393734312d28231e1812141d252d333739393939393936312b231a1106000000000000000000000000000000000000000008121b242b323639393939393939393937322c25272e3438393939393939393938352f2920170e0300000000000000000000000000000000000000000914202b36414c58636e7984909b9c91867b6f64594e43372c21160b00000000000000000000000000000006111b242e37414a525b636b737a81888e94999ea3a7aba7a3a19e9c9b9a9a999a9a9b9d9fa1a4a7a9a5a19c97918b857e776f675f574e453c332a20160c02000000000000000000050f1820272d3134343434343434343434332f2a231b12090000000000000000000000000000000000000000000000000007111a22292e3234343434343434343434322e28211910060000000b16222d38414a50545454545454545454524c443b32281e150b010000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b989b8e8275685b4e4235281b0f0200000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d0000000b16222d38434e59646e78828b949ca3aaa49d97928e8a888685858586888a8d92979da3aaa39b938a81776c62574b4034291d110500000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000050a0e1113131313131313131312100d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e161e252b31373c4044484b4d4f51525253525251504e4b4945413d38332d272019110901000000000000000000000000000000000000000000000000000006121e2a36424e5965717d8995a1ada3978c8074685c5044382c201409000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000009131e28323c454e57606870787e858a8f93979a9c9d9e9e9e9d9c9996938f8a847e776f685f574e443b31271d13080000000000000000000000000000000000000000000000000000000000000000000000000000070e151b2024272a2c2c2c2c2a2825211d17120c070b131b22272a2c2c2c2c2c2c2a25201911080000000000000000000000000000000000000000000009121a21262a2c2c2c2c2c2c2c2c2c2a27211b1d23282b2c2c2c2c2c2c2c2c2b29241e170e05000000000000000000000000000000000000000000030e1925303b46515d68737e8a95968b8074695e53483d31261b10050000000000000000000000000000040e18232d364049535c646d757d858c93999fa5aaa8a39f9b979492908e8d8d8c8d8d8e909295989b9fa4a9a8a29c968f888179716960574e453c32281e140a0000000000000000020d17212a32393e404141414141414141413f3b352d241b11060000000000000000000000000000000000000000000000040f19232c343a3e414141414141414141403e39332b22180d0200000f1b27333e49535b6061616161616161615d564d433a30271d13090000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b989b8f8275685b4f4235281c0f0200000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104050607070707060503010000000000000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d00000005111c27323d47525c666f78818a91989fa4a8a29e9a9794939292929394969a9da2a8a49f98918981786f655b50453a2f23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c131a20262b3034383b3e41434445464646454443413f3c3935312c27221c150e07000000000000000000000000000000000000000000000000000000000b17232f3b46525e6a76828e99a5b1a89c9084786c6055493d3125190d010000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000005101a25303a444e57616a727a828990969ba0a3a6a6a4a3a3a3a4a6a6a39f9a958f898179716960564d43392f241a0f04000000000000000000000000000000000000000000000000000000000000000000000000000003090f14181b1d1f20201f1e1c1915110c070100010910161b1e20202020201f1d1a140e07000000000000000000000000000000000000000000000000080f151a1e1f202020202020201f1e1b161012171c1f20202020202020201f1c18130c05000000000000000000000000000000000000000000000008131f2a35404b57626d78848f90857a6e63584d42362b20150a0000000000000000000000000000000b15202a343e48525b656e767f878f969ea4aba9a39d98938e8b888583828180808081828385888b8f93989da3a9a7a19a938b837b726a61574e443a30261c11060000000000000008131e29333c444a4d4d4d4d4d4d4d4d4d4d4b463f362d22170c00000000000000000000000000000000000000000000000a15202b353e454b4d4d4d4d4d4d4d4d4d4d4a443d342a1f14080000111e2b37434f5b656d6e6e6e6e6e6e6e6e685f564c42392f251b110700000000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c989c8f8275685b4f4235291c0f0200000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d11101213131414131311100d0b07040000000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d000000000b16202b36404a545d666f7880878d93999da1a4a6a3a1a09f9e9f9fa1a3a6a4a19d99938d8780776f665d53493e34291e12070000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8895a2aca5988b7e7165584b3e3225180b00000000000000000508090a0a0a0a0a0a0a0a09080501000000000000000000000000000206080a0a0a0a0a0a0a0a0a09070400000000000000000000000000000000000000000000000001080f151a1f24282c2f32343637383939393938363532302d2925211c16110a040000000000000000000000000000000000000000000000000000000004101c28333f4b57636f7a86929eaab6aca195897d7165594d4135291e12060000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212c37414c566069737c848c949ba1a7a5a19d9a98969696989a9da1a6a6a19a938b837b72685f554b41362c21160b0000000000000000000000000000000000000000000000000000000000000000000000000000000003080b0e1112131312110f0c0905000000000000050a0f11131313131313110d09030000000000000000000000000000000000000000000000000000040a0e11131313131313131313110e0a05070c0f12131313131313131312100c0701000000000000000000000000000000000000000000000000020d19242f3a45515c67727d898a7f73685d52473c30251a0f04000000000000000000000000000007121d27323c46505a646d7780899199a1a8ada59e98928c87837e7b78767574737373747577797c7f83878c92989ea5aca59d958d857c736960564c42382d23180d030000000000000c1824303b454e555a5a5a5a5a5a5a5a5a5a5751493f34281d1105000000000000000000000000000000000000000000030f1b26323d4750565a5a5a5a5a5a5a5a5a5a564f463b3025190d010013202c3946525f6c777b7b7b7b7b7b7b7a71685e544b41372d23190f05000000000000000000000000000000000000000000000000000000000c1926323f4c5865727e8c989c8f8275695c4f4236291c0f0300000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1b1d1e1f202020201f1e1c1a1714100c07020000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d00000000040f19242e38424b545d666e757c82888d9195989a9c9e9f9fa09f9f9e9c9a9895918d88827c756d655d544b41372d22170c010000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8895a0a0a0988b7e7165584b3e3225180b000000000000060c11141617171717171717171614110c070000000000000000000002080e12151617171717171717171614100b0500000000000000000000000000000000000000000000000003090f14181c20232527292b2c2c2c2c2c2b2a282623201d1915100b050000000000000000000000000000000000000000000000000000000000000915202c3844505c6773808b97a3afb7b1a5998d82756a5e52463a2e22160a0000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000006121d28333e48535d68727b858e969ea6a7a09a95918d8b8a8a8a8b8d91959aa0a7a59d958d847a71675d52483d32271c1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121e29343f4a56616c778284796d62574c41352a1f14090000000000000000000000000000020d18232e39434e58626c768089929ba3ababa39b948d86817b76726f6c6a686766666667686a6c6f73777b81868d949ba3aba79f978e857b72685e54493f342a1f1409000000000000101c2935414c576066676767676767676767635b5045392d21160a00000000000000000000000000000000000000000008141f2b37434e59616767676767676767676661574d4135291d110400131f2c3945525e6b757f888888888888837a70665d53493f352b21170c020000000000000000000000000000000000000000000000000000000c1926323f4c5965727f8c999c8f8276695c4f4336291c100300000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a2527292b2c2d2d2d2d2c2b292623201c18130d0701000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d000000000008121c263039424b545c636a71777c8185888b8e9091929293939291908e8b8985817c77716a635c534b42392f251b1006000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8893939393938b7e7165584b3e3225180b00000000010a11181d2123232323232323232323211d18110a0200000000000000040c13191e2123232323232323232322201c160f080000000000000000000000000000000000000000000000000003080c101316191b1d1e1f1f201f1f1e1d1b191714110d090400000000000000000000000000000000000000000000000000000000000000020e1925313d4955606c7884909ca8adaaabaa9e92867a6e62564a3f33271b0f0300000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000010c18232e39444f5a656f79848d97a0a8a49c958f8984817e7d7d7d7e8184898f959da5a79f968c83796f645a4f44392e23170c0000000000000000000000000000000000000000000000000000000306070707070707070707070603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010304050607070707060504030100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c18232e39444f5b66717c7e72675c51463a2f24190e02000000000000000000000000000008141f2a35404a55606a747e88929ba4adaaa1999189827b756f6a66625f5d5b5a59595a5a5c5d6063666b70757b82899199a1aaa9a0978d847a70665b51463b31261a0f040000000000121f2b3844515d69727474747474747474746c61564a3e32261a0e0300000000000000000000000000000000000000000c1824303c48545f6b73747474747474747472695e5245392c1f130600111e2a36424e59636d77818a949494948c82786f655b51473d33291e14090000000000000000000000000000000000000000000000000000000d192633404c596673808c999c908376695c4f4336291d100300000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372e31343638393a3a3a3a39373533302c28231e18120c050000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d0000000000000a141e273039424a52595f666b7075797c7e81838485868686858483817f7c7975706b665f59514a413930271d130900000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b868686868686867e7165584b3e3225180b000000010a131b23292d2f3030303030303030302d29231c140b010000000000040d161e252a2e3030303030303030302f2c27211a110800000000000000000000000000000000000000000000000000000004070a0c0e1011121313131212100f0d0a08040100000000000000000000000000000000000000000000000000000000000000000006121e2a36424d5965717d8995a0a9a19d9fa5a2968b7e73675b4f43372b1f140800000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201309090909090909090909090909090909090909090909090908070401000000000000000000000006121d29343f4b56616c76818b969fa9a49b928b837d7874727070707274787d848b939ba4a89f958b81766b60554a3f34281d1106000000000000000000000000000000000000000000000000060b0f1214141414141414141414120f0b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000206090b0d0f111213131414131312110f0d0b0906020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111d28333e4955606b76776c61564b4034291e13080000000000000000000000000000030e1925303b46515c67717c86909aa4adaba1988f877f77706a645f5a5653514f4d4d4d4d4e4f5153575a5f646a70777f878f98a1aba99f968c82776d62584d42372c21150a0000000000131f2c3946525f6c7981818181818181817e72665a4e42372b1f13070000000000000000000000000000000000000005111d2935404c5864707c8181818181818181796d6053463a2d201307000e1a26323d48515b656e78828c96a09e948a81776d63594f453a30261b110600000000000000000000000000000000000000000000000000000d192633404c596673808c999d908376695d5043362a1d100300000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044373a3d40424446464747464544423f3c38342f2a241d160f0700000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d000000000000020c151e27303840474e545a6064696c6f72747677787979797978767572706c6964605a544e47403830271e150b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616d7779797979797979797064574b3e3125180b00000008121c252d34393c3d3d3d3d3d3d3d3d3c39342e261d130900000000010b161f2830363a3d3d3d3d3d3d3d3d3d3c38332c231a1006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232f3a46525e6a76828d99a5a19791939ca69b8f83776b5f54483c3024180c00000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20151515151515151515151515151515151515151515151515151514110c07000000000000000000000b17222e3a45515c67727d88939da7a59b92898079726c686564636365686d72798189929ca6a79d92887d72675c5045392e22170b00000000000000000000000000000000000000000000020a11171c1f202020202020202020201f1b17110a020000000000000000000000000000000000000000000000000000000000000000000000000002070b0f1215181a1c1d1f2020202020201f1e1c1a1815120f0b070200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38434f5a646b6b655b50453a2e23180d02000000000000000000000000000008141f2b36414d58636e78838e98a2acaca2998f867d756d655f58534e4a47444241404040414244474a4e53595f656d757d868f99a2aca89e94897f74695e53483d32261b100400000000121e2b3844505d6874808c8e8e8e8e8e8e83776b5f53473b2f24180c000000000000000000000000000000000000000a16212d3945515d6975818c8e8e8e8e8e8d8175695d5145382c1f1306000a15212b363f49535c66707a848e99a39c93897f756b61564c42372d22180d02000000000000000000000000000000000000000000000000000d1a2633404d596673808d9a9d9083766a5d5043372a1d100400000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d504442464a4d4f51525353535352504e4c4844403b352f2821191109000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d00000000000000030c151e262e353c43494f54585c60636668696b6c6c6c6c6c6b6a686663605d58544f49433c352e261e150c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3845515c666c6c6c6c6c6c6c6c6c685e53483c2f23160a0000030f1a242e373f45494a4a4a4a4a4a4a4a49453f382f251a0f0400000007121d27313a4146494a4a4a4a4a4a4a4a48443d352c22170c01000000000000000407080808080808080807050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c27333f4b57636e7a86929ea89c90858a96a2a094887c7064584c4034291d1105000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c222222222222222222222222222222222222222222222222222222201d18120b030000000000000004101c27333f4b56626d78848f9aa4a99e948980766e67615c59575657595c61676f77808a949ea9a4998e83786d61564a3f33271c10040000000000000000000000000000000000000000020c141c23282b2d2d2d2d2d2d2d2d2d2d2b27221c140b020000000000000000000000000000000000000000000000000000000000000000000004090e13171b1e222427282a2b2c2d2d2d2d2c2b2a292724211e1b17130e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101c27323d48525a5f5f5b53493f33281d12070000000000000000000000000000010d1925303c47535e69747f8a959faaafa49a90877d746b635b544d47423e3a3735343333333436383b3e42474d545b636b747d87909ba5afa59b90867b70655a4e43372c20150900000000101c2834404c58646f7b87939a9a9a9a93877b6f64584c4034281c11050000000000000000000000000000000000020e1a26323e4a56616d7985919a9a9a9a94887c7064584d4135291d100400040f1a242d37414a545e68727c87919ba59b91877d72685e54493f34291f1409000000000000000000000000000000000000000000000000000d1a2734404d5a6773808d9a9d9084776a5d5044372a1d110400000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d50494e5256595c5e5f606060605f5d5b5854504b46403a332b231b12090000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d0000000000000000030c141c242b32383e43484c505457595b5d5e5f5f5f5f5f5e5d5b595754504c48433e38312b231c140c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c28343f4a545b5f5f5f5f5f5f5f5f5f5c564d42372b1f130700000814202b3640495155565656565656565655514a41372c2115090000000c18232f39434c52565656565656565656544f473e34291d12060000000000060c1013151515151515151514110d0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000914202c3844505c67737f8b97a3a4988c8086929ea4988c8175695d5145392d211509000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2d29231d150c030000000000000814202c3844505b67737e8a95a0aba2978c82776e655c55504c4a4a4a4c50565d656e78828d98a3aba095897e72675b5044382c20140800000000000000000000000000000000000000000a141e262e34383a3a3a3a3a3a3a3a3a3a38332d261d140a000000000000000000000000000000000000000000000000000000000000000003090f151a1f23272b2e3133353738393a3a3a3a3938373533312e2b27231e1a140f090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16212c3640484f52524f4941372d22170c01000000000000000000000000000006121e2a35414d58646f7a86919ca6b1a89d93887e756b62595149423c36322e2b292727262728292b2e32373c42495159626b757e89939ea8ada2978c81766b5f54493d31261a0e020000000c18242f3b47535f6b76828e9aa6a7a4988c8074685c5145392d211509000000000000000000000000000000000007131f2b37424e5a66727e8a96a2a7a79b8f83776b5f54483c3024180d00000008121b252f39424c56606b757f8a949ea3998f847a70655b50463b30261b10050000000000000000000000000000000000000000000000000d1a2734404d5a6773818d9a9d9184776a5d5144372a1e110400000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d50555a5e6266686a6c6d6d6d6c6b6a6764615c57514b443d352d241b120900000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d000000000000000000020a121920272d32373c4044474a4d4f5051525353535251504f4d4a4744403c37322d262019120a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e38424a4f525353535353535353504b443b30261a0f0300000c1825313c48525b616363636363636363625c53483d3125190d010004101c2834404b555e626363636363636363605950453a2e221609000000020a11181c202122222222222222201d19130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d1925313d4954606c7884909ca7a094887c818d99a59d9185796d61554a3e32261a0e020000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f53463c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3b39352e271e140a0000000000000c1824303c4854606c78848f9ba6a89c91867b70665c534b44403d3d3d40444b535c66707b86919da8a69a8f84786c6054483c3024180c0000000000000000000000000000000000000006111c2630383f4447474747474747474746443f382f261c1106000000000000000000000000000000000000000000000000000000000000070e141b20262b2f33373a3d40424345464647474646454442403d3a37332f2a25201a140d0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f1a242e363d434646433e372f261b11060000000000000000000000000000000b17232e3a46525e6975808c97a2adaca1968b81766c635950473f38312b26221e1c1b1a1a1a1b1d1f22262b31383f475059636d77818c97a2ada99e93877c7065594e42362a1f130700000007131f2b37424e5a66727d8995a1ada89c9185796d6155493d32261a0e02000000000000000000000000000000000c18232f3b47535f6b77838e9aa6aea2968a7e72675b4f43372b2014080000000009131d27303a444f59636d78828d97a2a0968c82776d62574d42372c21160b0000000000000000000000000000000000000000000000000e1a2734414d5a6774818e9a9e9184776a5d5144372b1e110400000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5a60666a6e72757778797a7a79787674716d68635d564f473f372e241b1107000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d0000000000000000000000070e151b21272c3034383b3e404243454546464646454442403e3b3834302c27211b150e07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f383f4346464646464646464644403a32291f14090000000f1b2834414d59646d70707070707070706d655a4e4235291c0f030006131f2c3845515c676f70707070707070706b62564a3e3225180c0000020b141c23282c2e2e2e2e2e2e2e2e2d29241e160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2a36414d5965717d8994a0a89c9084787d8995a1a1968a7e72665a4e42362a1e13070000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5348484848484848484848484848484848484848484848484848484848484845403930261c11060000000004101c2834404d5965717d8994a0aca3978b8074695e544a4139343130313439414a545f6a75808c97a3aba094897d7165594d4135281c10040000000000000000000000000000000000000c17232e38424a5053535353535353535353504941382d22170b00000000000000000000000000000000000000000000000000000000020a11191f262c31363b3f43474a4c4e505152535353535352504e4c4a47433f3b36312b251f1811090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121c242c3236393937332d251d140a000000000000000000000000000000030f1b27333f4b57636e7a86919da8b1a69a8f847a6f655a51473e352d261f1a1612100e0d0d0d0e1012161a20262d353e47515b65707a85909ca7afa4998d82766a5e53473b2f23170b000000020e1a26323d4955616d7884909ca8ada195897d72665a4e42362a1f130700000000000000000000000000000004101c2834404c58636f7b87939faba99d9185796e62564a3e32271b0f0300000000010b151f29333d47515c66707b86909ba69e93897e74695e54493e33281d120700000000000000000000000000000000000000000000000e1b2834414e5a6774818e9a9e9184776b5e5144382b1e110500000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5e656b71767b7e818485868787868583807d78746e686159514940372d23190f050000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d000000000000000000000000040a10161b2024282b2f3133353738393939393938373534312f2c2824201b16100a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262d333739393939393939393938342f2820170d02000000101c2936434f5c69757d7d7d7d7d7d7d7d766a5d5043372a1d1004000714202d3a4753606d797d7d7d7d7d7d7d7d7366594d4033261a0d00000a141d262e34383b3b3b3b3b3b3b3b39352f281f160c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232f3a46525e6a76828d99a5a4988c80747985919da69a8e82766a5f53473b2f23170b0000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f55555555555555555555555555555555555555555555555555555555555555514b42382e23170b000000000713202c3844515d6975818d99a5aa9e92867a6f63584d42382f28242324282f38434d58646f7b87929eaaa5998d8175695d5145382c201407000000000000000000000000000000000004101c28343f4a545c606060606060606060605b53493f33271b0f030000000000000000000000000000000000000000000000000000040c141c232a31373d42474b4f5356595b5d5e5f606060605f5e5d5b5956534f4b47423c363029231b130b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a121a21262a2c2c2a27221b130b0200000000000000000000000000000007131f2b37434f5b67737f8b97a2aeaba095897e73685d53493f352c231b140e090603000000000003060a0e141b232c353f49535e69747f8a96a1adaa9e92877b6f63574b3f33271b0f030000000915212d3944505c6874808b97a3afa69a8e82766a5f53473b2f23170b0000000000000000000000000000000915212d3944505c6874808c98a4afa4988c8175695d51453a2e22160a000000000000030d17212b353f4a545f69747f8a949fa59b90867b70655a4f44392e23180d01000000000000000000000000000000000000000000000e1b2834414e5b6774818e9b9e9184786b5e5145382b1e120500000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a6870767d82878b8e909293949393918f8d89857f79726b635b52493f352b21160c0100000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d0000000000000000000000000000050a0f14181c1f222527292a2b2c2c2c2c2c2b2a292725221f1c18140f0a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c22272b2c2c2c2c2c2c2c2c2c2b28231d160e0500000000101c2936434f5c6976838a8a8a8a8a8a84776a5d5044372a1d1104000714202d3a4753606d7a878a8a8a8a8a8a807366594d4033261a0d0006111c262f383f45484848484848484846413a31281e1309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c27333f4b57636e7a86929eaaa094887c7074818d99a59f93877b6f63574b3f34281c100400000000000000000000000013202c3946535f6c798693a0acaca09386796c62626262626262626262626262626262626262626262626262626262626262615c544a3f34281c0f030000000a17232f3c4854606d7985919da9a69a8e82766a5e52473b30261d1817181d26313c47535e6a76828e9aa6a99d9185796d6154483c3023170b000000000000000000000000000000000006131f2c3845505c666c6d6d6d6d6d6d6d6d6c655b5044382b1f120600000000000000000000000000000000000000000000000000040d161e262e353c42484e53585c5f626567696b6c6d6d6d6d6c6b696865625f5b57524d48423b342d251d150d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810161a1e1f201e1b16100901000000000000000000000000000000000a16232f3b47535f6c7884909ba7b2a69b8f84786d61564c41372d231a110a030000000000000000000000030a111a232d37424c57636e7985919ca8afa3978c8074685c4f43372b1f130600000005101c2834404b57636f7b87929eaaaa9f93877b6f63574b4034281c100400000000000000000000000000020e1a25313d4955616d7985919ca8ab9f94887c7064584c4135291d110500000000000000050f19232e38434d58626d78838e99a4a2978c82776c61564b4034291e1307000000000000000000000000000000000000000000000f1b2835424e5b6875818e9b9e9285786b5e5145382b1e120500000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a727a81888e93979a9d9ea0a0a09f9e9c9995908b847d756d645b51473d33281d120700000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d0000000000000000000000000000000003080c0f1316181a1c1d1e1f2020201f1f1e1c1a181613100c0803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1e2020202020202020201f1c18120c040000000000101c2936434f5c69768390969696969084776a5d5044372a1d1104000714202d3a4753606d7a8794969696968d807366594d4033261a0d000b17222d38424a515455555555555555524c433a30251a0f04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000914202c3844505c67737f8b97a3a89c9084786c707c8894a0a3978b8074685c5044382c20140900000000000000000000000013202c3946535f6c798693a0acaca09386796f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6d665c5044382b1f12050000000d1a26323f4b5764707c8995a1ada2968a7e7165594d41362a1f140b0a0b151f2b36424e5a66727e8a96a3aea195897d7064584b3f33261a0e01000000000000000000000000000000000814212e3b4754606d787a7a7a7a7a7a7a7a776c6053463a2d201407000000000000000000000000000000000000000000000000040d161f2830383f474d54595f63686c6f7274767779797a7a7979787674726f6b67635e59534d463f372f271f160d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0e111313110f0a050000000000000000000000000000000000010d1a26323f4b57636f7c8894a0acaea2968a7e72675b50453a2f251b110800000000000000000000000000000008111b25303b46515d6874808c98a4b0a89c9084786c5f53473b2f22160a000000000c17232f3b47525e6a76828e99a5afa3978c8074685c5044382d21150a0a0a0a0a0a0a0a0a0a0a0a0a0a0a121e2a36424e5a65717d8995a1ada69b8f83776b5f54483c3024180d01000000000000000007111c26313b46515c66717c88939ea99e93887d72675c51463a2f24180d010000000000000000000000000000000000000000000f1b2835424e5b6875828e9b9f9285786b5f5245382c1f120500000000000000000000000000000000101c2936434f5c697683909ca9aa9d908477727b848c93999f9d9b9a9a9a9a9c9fa2a7a5a19c968f877f766d63594f443a2f24190e02000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d000000000000000000000000000000000000000306090c0e0f111212131313131211100e0c0907030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f1213131313131313131312100c0701000000000000101c2936434f5c697683909ca3a39d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0a3a39a8d807366594d4033261a0d000f1b27333f4a545c61616161616161615d564c41362c21160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925313d4854606c7884909ca7a4988c8073676c7884909ca89c9084786c6054493d3125190d01000000000000000000000013202c3946535f6c798693a0acaca093867b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b786c605346392d201307000003101c2935424e5b6773808c98a5ac9f93877a6e6255493d3125190e0200030e1a25313d4956626e7a87939faca5998c8074675b4f4236291d1004000000000000000000000000000000000815212e3b4854616e7b87878787878787877a6d6053473a2d2014070000000000000000000000000000000000000000000000020c161f28313a424a51585f656a6f74787b7e8183848586868786868483817e7b78736f6a645e575049413931281f160c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2936424e5b6773808c98a4b0a99d9185796d62564a3f34291e1309000000000000000000000000000000000009141e2a35404c58636f7b8794a0acaca094887c6f63574a3e3225190d0000000007131e2a36424e5965717d8995a0aca89c9084786d6155493d31251917171717171717171717171717171717232f3b47525e6a76828e9aa6ada2968a7e72665b4f43372b1f1408000000000000000000000a151f2a343f4a55606b76818d98a3a59a8f84786d62574c4035291e12070000000000000000000000000000000000000000000f1c2835424f5b6875828f9c9f9285786b5f5245392c1f120600000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084777b848d969d9894918f8d8d8d8e8f92969ba1a8a7a09991887e756b61564b40352a1f1308000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00121e2b37434f5b666d6e6e6e6e6e6e6e685e53483d32281d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2a36414d5965717d8994a0aca094887b6f636874808c98a4a195897d7165594d4135291e1206000000000000000000000013202c3946535f6c798693a0acada1958b888888888888888888888888888888888888888888888888888888888888888886796d6053463a2d201307000006121f2b3844515d6a76838f9ca8a99c9084776b5e5246392d2115090000000915212d3a46525e6b7784909ca9a89c9083776a5e5145382c1f1306000000000000000000000000000000000815212e3b4854616e7b88949494949494877a6d6053473a2d20140700000000000000000000000000000000000000000000000a141e28313a434c545c636a70767b8084888b8d8f91929393939392918f8d8b8784807b756f69625b534b433a31281e140a00000000000000000000000000040708090909090909090909090909090909090909090909090909090909090909090909090909090909090909080704000000000000000000000713202c3845515e6a76838f9ca8b2a6998d8175695d5145392e22170c010000000000000000000000000000000000020d18242f3b47535f6b7784909ca8b0a4988b7f73665a4e4135281c0f03000000020e1a25313d4955606c7884909ca7ada195897d7165594e42362a232323232323232323232323232323232328333f4b57636f7b87929eaaa99d9185796d62564a3e32271b0f0300000000000000000000030d18232e39444f5a65707b87929da9a0958a7e73685d51463a2f23180c0000000000000000000000000000000000000000000f1c2936424f5c6875828f9c9f9286796c5f5246392c1f130600000000000000000000000000000000101c2936434f5c697683909ca9aa9d908378838d9697918c8884828180808183868a8f969da5aba39a91877d72685d52473b3024190d010000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070b0d0f0e0c09050000000000000000000001060a0d0e0e0d0a06010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d0013202c3946525f6c777b7b7b7b7b7b7a6f645a4f44392e23190e03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e3a46525e6a75818d99a5a89b9083776b5f636f7b8894a0a5998d81756a5e52463a2e22160a000000000000000000000013202c3946535f6c798693a0acb1a69d96959595959595959595959595959595959595959595959595959595959595959386796d6053463a2d20130700000814212e3a4753606c7985929eaba69a8d8174685b4f42362a1d110500000005111e2a36434f5b6874818d9aa6ab9f9286796d6054473b2e221509000000000000000000000000000000000815212e3b4854616e7b8894a0a0a0a094877a6d6053473a2d2014070000000000000000000000000000000000000000000007111c26303a434d555e666d747b81878c9094979a9c9e9fa0a0a0a09f9e9c9a9794908b86817a746d655d554c433a30261c120700000000000000000000070c1114151515151515151515151515151515151515151515151515151515151515151515151515151515151515151513100b0500000000000000000916222f3b4854616d7986929fabafa2968a7d7165594d4135291d11060000000000000000000000000000000000000007131f2b37434f5b6774808c99a5b2a79b8f8276695d5044372b1e1205000000000915212c3844505c67737f8b97a3aea59a8e82766a5e52463b303030303030303030303030303030303030303844505c6873808b97a3afa4988c8175695d5145392e22160a00000000000000000000000007111c27323d48535f6a75818c98a3a69b9085796e62574b4034281d110500000000000000000000000000000000000000000f1c2936424f5c6975828f9c9f9286796c5f5346392c20130600000000000000000000000000000000101c2936434f5c697683909ca9a99c90837f8a94948d86807b787574737374767a7e848b939ca5aca3998f84796e63584c41352a1e12060000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004090e13171a1b1b1915110b0300000000000000050c1216191b1b1a16120d0803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00131f2c3945525e6b7681888888888881766b60564b40352a1f150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101b27333f4b57636e7a86929eaaa3978b7f73675b5f6b7784909ca89e92867a6e62564a3f33271b0f030000000000000000000013202c3946535f6c798693a0acb8afa7a3a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a09386796d6053463a2d20130700000a1623303c4955626f7b8894a1ada4988b7e7265594c4033271a0e01000000020e1a2733404c5965727e8b98a4aea195887c6f6356493d3024170b000000000000000000000000000000000815212e3b4854616e7b8894a1adada094877a6d6053473a2d201407000000000000000000000000000000000000000000030e19232e38424c555f6770787f868d92989ca0a3a6a9aaa9a8a8a8a8a9aaa9a6a3a09c97928c867e776f675e554c42382e24190f0400000000000000020b12181d2022222222222222222222222222222222222222222222222222222222222222222222222222222222222222221f1c171009010000000000000b1824313d4a5763707c8995a2aeac9f93877a6e6155493d3024180c0100000000000000000000000000000000000000020e1b27333f4b5864717d8a96a3afaa9e9185786c5f53463a2d2114070000000004101c28333f4b57636e7a86929ea9aa9e92867a6f63574b3f3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4954606c7884909ca8ab9f93887c7064584c4035291d1105000000000000000000000000000b16212c37424e5964707b87929eaaa1968a7f73685c5145392d22160a0000000000000000000000000000000000000000101c2936434f5c6976838f9ca09386796c5f5346392c20130600000000000000000000000000000000101c2936434f5c697683909ca9a89b8f828590948a827b756f6c69676666686a6e7379818a939da8aba0968b8074695d52463a2e22170a0000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d00000000000000000000000000000000000000000000000000000000000000000000000000000000000001060b10151a1f2427282825211c150e050000000000070f171d2226282826221e19140f0a0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00111d2a36424e59646f7a858f959592887d72675c51473c31261b110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814202c3844505b67737f8b97a3ab9f93877b6f63575b6773808b97a4a2968b7e73675b4f43372b1f14080000000000000000000013202c3946535f6c798693a0acb9b1aaa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a09386796d6053463a2d20130700000c1825313e4b5764717d8a96a3afa296897c7063574a3e3124180b00000000000b1824313d4a5763707c8996a2afa4978b7e7165584b3f3226190c000000000000000000000000000000000815212e3b4854616e7b8894a1aeada094877a6d6053473a2d20140700000000000000000000000000000000000000000009141f2a353f4a545e677179828a91989ea3a8aca7a4a19e9d9c9b9b9c9d9ea1a4a7aca8a39d979089817970675e544a40352b20150a000000000000020c141c23292d2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2e2c28221b130a0000000000000d1a26333f4c5965727e8b98a4b1a99d9084776b5e5245392d2014080000000000000000000000000000000000000000000b1723303c4855616e7a8794a0adada094877b6e6255483c2f23160900000000000b17232f3a46525e6a75818d99a5afa3978b7f73675c504a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4d5965717d8995a0aca69a8f83776b5f53483c3024180c0100000000000000000000000000040f1b26313c48535f6a76828d99a5a79b9084796d61564a3e32261b0f0300000000000000000000000000000000000000101d293643505c697683909ca09386796d6053463a2d20130700000000000000000000000000000000101c2936434f5c697683909ca9a99c91888b958b81787069645f5c5a595a5b5e62686f78818b96a1aca79c91857a6e62574b3f33271b0e0200000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d0000000000000000000000000000000000000000000000000000000000000000000000000000000003080d12171c21262b30333534322d271f170e0400000006101921282e323535322e2925201b16110c070200000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d000e1a26323d48525d68737e89939e998e84796e63584d43382d22170c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925313d4854606c7884909ba7a79b8f83776b5f5357636f7b87939fa79b8f83776b5f54483c3024180c0000000000000000000013202c3946535f6c798693a0acb3a89f9a999999999999999999999999999999999999999999999999999999999999999386796d6053463a2d20130700000d1a2633404c5966727f8c98a5ada194877b6e6155483c2f22160900000000000916222f3b4855616e7b8794a1ada6998c8073665a4d4134271b0e010000000000000000000000000000000815212e3b4854616e7b8894a1a4a4a094877a6d6053473a2d2014070000000000000000000000000000000000000000030e1a25313c47515c667079838b949ba3a9aca5a09b979492908f8f8f8f909294989ba0a6aca8a29b938b82796f665c52473c32271c100500000000000a141e262e34393b3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3b38332d251c120800000000000f1b2835414e5a6774818d9aa6b3a79b8e8275685c4f43362a1d11050000000000000000000000000000000000000000000814202d3946535f6c7885919eabafa396897d7063574a3e3124180b000000000006121e2a36414d5965717c8894a0aca79c9084786c6056565656565656565656565656565656565656565656565e6a75828d99a5ada2968a7e72665a4f43372b1f14080000000000000000000000000000000914202b37424e5965717c8894a0aca1958a7e72665b4f43372b1f130700000000000000000000000000000000000000101d2a3643505d697683909da09386796d6053473a2d20140700000000000000000000000000000000101c2936434f5c697683909ca9ada29a95968e83796f665f5853504e4d4d4e51565d666f79848f9aa6ada2968b7f73675b4f43372b1e120600000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d0000000000000000000000000000000000000000000000000000000000000000000000000000050a0f14191e23282d31363b4041413e38312920160b0000020d18222b333a3f41413f3a35302b26221d18130e09040000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d000915202b36414c57616c77828d97a0958a80756a5f54493e34291e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2a35414d5965717c8894a0aca2968a7e72665a4e535f6b77838f9ba7a094887c7064584c4034291d110500000000000000000013202c3946535f6c798693a0acaea2978e8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c86796d6053463a2d20130700000e1b2835414e5b6774818d9aa7ac9f9386796d6053473a2d21140700000000000714202d3a4653606c7986929faca79b8e8275685b4f4235291c0f030000000000000000000000000000000815212e3b4854616e7b88949898989894877a6d6053473a2d201407000000000000000000000000000000000000000008141f2b36424d58636d78828c959da6ada8a19a948f8b888584828282828485888b8f949aa1a8aca59d948b82786e63594e43382d22160b0000000006111c26303840454848484848484848484848484848484848484848484848484848484848484848484848484848484848484848443e372e24190e0300000000101d2936434f5c6975828f9ba8b2a5998c8073665a4d4034271b0e0200000000000000000000000000000000000000000005121e2b3744515d6a7683909ca9b1a4988b7e7265584c3f3226190c0000000000020d1925313d4854606c78848f9ba7aca094897d71656363636363636363636363636363636363636363636363636e7a86929eaaa99d9185796d62564a3e32261b0f03000000000000000000000000000000030f1a26313d4854606c77838f9ba7a69a8f83776b5f53473b2f23170b00000000000000000000000000000000000000111d2a3744505d6a7683909da094877a6d6053473a2d20140700000000000000000000000000000000101c2936434f5c697683909ca9b4aba59f93887c72675d544d474341404042454c545d68737e8a95a1ada79b8f84776b5f53473b2e22160900000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d000000000000000000000000000000000000000000000000000000000000000000000002070c11161b20252a2e33383d42474c4e4d4a433b32271d11060008141f2a343d454b4e4e4b46413c37322d28231f1a15100b06010000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00040f1a252f3a45505b65707b86919c9c91867b71665b50453a30251a0f0400000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222e3a46525e6a75818d99a5a99d92867a6e62564a4f5b67737f8b97a3a4988c8175695d5145392d21150900000000000000000013202c3946535f6c798693a0acaca093867f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f796d6053463a2d2013070000101c2936424f5c6975828f9ba8ab9e9285786b5f5245392c1f1206000000000006121f2c3845525e6b7884919eaba99c908376695d5043372a1d11040000000000000000000000000000000815212e3b4854616e7b888b8b8b8b8b8b877a6d6053473a2d20140700000000000000000000000000000000000000000c1824303c47535e69747f8a949ea7afa69e968f89847f7b79777575757577797b7f84898f969ea6afa69d948a80756a6055493e33271c10040000000b17222d38424a515555555555555555555555555555555555555555555555555555555555555555555555555555555555555554504940362b20140800000000111e2a3744515d6a7783909da9b1a4978b7e7165584b3f3225190c0000000000000000000000000000000000000000000002101c2936424f5c6875828e9ba8b3a6998c8073665a4d4034271a0d0000000000000814202c38444f5b67737e8a96a2aea5998d817570707070707070707070707070707070707070707070707070737f8b97a2aea4988c8175695d5145392d22160a00000000000000000000000000000000000915202c38434f5b67737f8b97a3ab9f93887b7064584c4034271b0f03000000000000000000000000000000000000111d2a3744505d6a7784909da094877a6d6154473a2e21140700000000000000000000000000000000101c2936434f5c697683909ca9b6b2a59a8e82766b60554b423c37343334353a424c56616d7985919da9aca094887b6f63564a3e3125190c00000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d00000000000000000000000000000000000000000000000000000000000000000004090e13181d22272b30353a3f44494e53585b5a554d44392e22160a000d1925303b464f565a5b57524d48433e39342f2a25201c17120d0803000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d000008131e29333e49545f69747f8a95a0988d82776c62574c41362c21160b0000000000000000000000000000000000000000000000000000000000000000000000000000000004101b27333f4b57626e7a86929eaaa5998d8175695d51454a57636f7b87939fa99d9185796d6155493e32261a0e02000000000000000013202c3946535f6c798693a0acaca0938679727272727272727272727272727272727272727272727272727272727272727271685d5145382c1f13060000111d2a3743505d6a7683909da9aa9d9084776a5d5144372b1e1105000000000004111e2a3744515d6a7784909daaaa9d9184776b5e5144382b1e12050000000000000000000000000000000815212e3b4754616e7a7e7e7e7e7e7e7e7e796d6053473a2d2014070000000000000000000000000000000000000004101d2935414d58646f7b86919ca6afa79d948c847d78736f6c6a696868696a6c6f73787e848c949da6afa69c91877c71665b4f44382c2115090000000f1b27333f4a545c61626262626262626262626262626262626262626262626262626262626262626262626262626262626262605a52473c3125190c00000000121f2b3845515e6b7884919eabb0a3968a7d7063574a3d3024170a00000000000000000000000000000000000000000000000e1b2834414e5a6774818d9aa7b4a79a8e8174675b4e4134281b0e000000000000040f1b27333f4a56626e7a86919da9aa9e92867d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d848f9ba7ab9f93877b7064584c4035291d11050000000000000000000000000000000000040f1b27333f4a56626e7a86939faba4988c8074685c5044382b1f1307000000000000000000000000000000000000111e2a3744515d6a7784919da194877a6d6154473b2e21140800000000000000000000000000000000101c2936434f5c697683909ca9b6aea195897d71655a4f4439312b28272729303a45505c6874818c99a5b0a4978b7e72665a4d4134281b0f02000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d00000000000000000000000000000000000000000000000000000000000001060b10151a1f23282d32373c41464b50555a5f6468665f554a3f33261a0e00101d2935414d58616767625d59544f4a45403b36312c27221d18140f0a0500000000000000000000000000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d0000010c17222d37424d58636e78838e999f94897e73685e53483d32271d12070000000000000000000000000000000000000000000000000000000000000000000000000000000814202c38444f5b67737f8b97a2aca094897c7165594d4146525e6a77838f9ba7a1968a7e72665a4e42362a1e1307000000000000000013202c3946535f6c798693a0acaca09386796c65656565656565656565656565656565656565656565656565656565656565655f564c4135291d10040000121e2b3844515e6b7784919eaaa99c908376695d5043362a1d1004000000000000101d293643505c6976838f9ca9ab9e9285786b5f5245392c1f12060000000000000000000000000000000714202d3946525e6970717171717171717170685d5145382c1f1306000000000000000000000000000000000000000814202d3945515d6975818c97a2ada99f958b827a736c6763605d5c5b5b5c5d6063676c737a828a949da7aea3988e82776c6055493d3125190d010000121e2b3743505b666d6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6c64594d4134281b0f00000000121f2c3945525f6b7885929fabafa295897c6f6256493c2f23160900000000000000000000000000000000000000000000000d1a2733404d596673808d99a6b3a89b8e8275685b4f4235281c0f000000000000000b16222e3a46525d6975818d98a4aea2978d8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b94a0aca69a8f83776b5f53473c3024180c000000000000000000000000000000000000000b16222e3a46525e6a76828e9ba7a89c9084786c6054473b2f23170a000000000000000000000000000000000000111e2b3744515e6a7784919ea194887b6e6154483b2e21150800000000000000000000000000000000101c2936434f5c697683909ca9b6aa9e9285796d6155493d32271f1b1a1a1e2834404c5864707d8995a2aea79b8e8275695c5043372a1e1105000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d0000000000000000000000000000000000000000000000000000000003080d12171c20252a2f34393e43484d52575c61656a6f7471675b4f4236291c1000121f2c3845515e6973736e69645f5a55514c47423d38332e29241f1a15100c070200000000000000000000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00000005101b26313c46515c67727c87929d9a90857a6f64594f44392e23190e0300000000000000000000000000000000000000000000000000000000000000000000000000010d1925313d4854606c78848f9ba7a89c9084786c6054483c424e5a66727e8b97a3a69a8e82766a5f53473b2f23170b000000000000000013202c3946535f6c798693a0acaca09386796c5f59595959595959595959595959595959595959595959595959595959595958544d443a3024180d000000121f2c3845525f6b7885929eaba89c8f8275695c4f4236291c10030000000000000f1c2935424f5b6875828f9ba8ac9f9286796c5f5346392d20130600000000000000000000000000000005111d2a36414c575f646464646464646464645f564c4135291d1004000000000000000000000000000000000000000b1724303c4955616d7985919da9aea2988d83797068615b5753514f4f4f4f5153575b61687078828b95a0abaa9f94887d7165594e4236291d1105000013202c3946525f6c787b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b75695c5043362a1d100000000013202c3946525f6c7986929facaea295887b6f6255483c2f22150900000000000000000000000000000000000000000000000d192633404c596673808c99a6b2a89c8f8275685c4f4236291c0f0000000000000006121d2935414d5864707c88949faba89f98969696969696969696969696969696969696969696969696969696979da6ada1968a7e72665a4f43372b1f13080000000000000000000000000000000000000006121e2a36424e5a66727e8b97a3ada194887c7064574b3f33261a0e010000000000000000000000000000000000111e2b3844515e6b7784919ea194887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c697683909ca9b4a79b8e8275695d5145382d21160f0d0d1824303c4854616d7a86939facaa9e9185786b5f5246392d201307000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d0000000000000000000000000000000000000000000000000000050a0f14181d22272c31363b40454a4f54595d62676c71767b8076695d5043362a1d100013202c3946535f6c797f7a75706b66615c57524e49443f3a35302b26211c17120d09040000000000000000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d000000000a141f2a35404a55606b76818b96a1968c81766b60554b40352a1f140a0000000000000000000000000000000000000000000000000000000000000000000000000006121e2935414d5965717c8894a0aca3978b8073675c5044383e4a56626e7a86939fab9f93877b6f63574b3f34281c10040000000000000013202c3946535f6c798693a0acaca09386796c5f534c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c49433b32291e1308000000131f2c3946525f6c7986929faca89b8e8275685b4f4235281c0f020000000000000f1b2835424e5b6875818e9ba8ada09386796d6053473a2d201407000000000000000000000000000000010d1925303b454d5457575757575757575757534d443a2f24180d00000000000000000000000000000000000000000d1a26333f4c5865717d8a96a2aea89d91867b71675e56504b47444342424344474b50565e666f79848e99a4b0a5998e82766a5e5246392d211508000013202c3946535f6c7986888888888888888888888888888888888888888888888888888888888888888888888888888888888376695d5043362a1d100000000013202c3946535f6c798693a0acaea295887b6e6155483b2e22150800000000000000000000000000000000000000000000000c1926323f4c5965727f8c99a6b2a99c8f8275695c4f4236291c0f00000000000000010d1924303c48545f6b77838f9ba6b1a9a4a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a4a8afa99d9185796d61564a3e32261a0f0300000000000000000000000000000000000000010d1926323e4a56626f7b8793a0aca4988c8073675b4e4236291d11040000000000000000000000000000000000121e2b3845515e6b7885919ea295887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c697683909ca9b1a5988c7f73665a4d4135281c1004000714202c3945525e6b7784909daaaca093877a6e6154483b2f221509000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d000000000000000000000000000000000000000000000002070c11151a1f24292e33383d42474c51565a5f64696e73787d82878376695d5043362a1d100013202c3946535f6c798686817c77726d68635e59544f4a46413c37322d28231e19140f0a06010000000000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00000000030e18232e39444e59646f7a858f9a9d92887d72675c51463c31261b10060000000000000000000000000000000000000000000000000000000000000000000000000b17222e3a46525e6975818d99a5aa9f93877b6f63574b3f333a46525e6a76828e9aa6a3978b8074685c5044382c2014080000000000000013202c3946535f6c798693a0acaca09386796c5f53463f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3c38312920170c0200000013202c3946535f6c7986939faca89b8e8275685b4e4235281b0f020000000000000e1b2834414e5b6774818e9ba7ada094877a6d6053473a2d211407000000000000000000000000000000000915202c36404950555555555555555555544e473e33281e130700000000000000000000000000000000000000000f1c2935424e5b6774818d99a6b0a4988c8075695f554c453f3b3836353536383b3f454c545d67727d88939faaaa9e92867a6e6256493d3124180b000013202c3946535f6c7986939595959595959595959595959595959595959595959595959595959595959595959595959595908376695d5043362a1d100000000013202c3946535f6c7986929facaea295887b6e6155483b2f22150800000000000000000000000000000000000000000000000d192633404c5966727f8c99a6b2a89c8f8275695c4f4236291c0f00000000000000000814202b37434f5b66727e8a96a2adb4b1a9a29f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa1a7afb3b0a4988c8074695d5145392d22160a0000000000000000000000000000000000000000000916222e3a46535f6b7784909ca9a89c8f83776a5e5245392d2014070000000000000000000000000000000000121f2b3845515e6b7885929ea295887b6f6255483c2f22150900000000000000000000000000000000101c2936434f5c697683909ca9afa396897d7064574b3e3225190c000004111d2a36434f5c6975828f9ba8afa295897c6f63564a3d3024170a000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d00000000000000000000000000000000000000000004090e12171c21262b30353a3f44494e52575c61666b70757a7f84898e908376695d5043362a1d100013202c3946535f6c7986928d88837e79746f6a65605b56514c48433e39342f2a25201b16110c0703000000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d000000000007121c27323d48525d68737e89939e998e83786e63584d42382d22170c0100000000000000000000000000000000000000000000000000000000000000000000040f1b27333f4b56626e7a86929ea9a69a8e82766a5e53473b2f36424e5a66727e8a96a2a89c9084786c6054493d3125190d0100000000000013202c3946535f6c798693a0acaca09386796c5f53463932323232323232323232323232323232323232323232323232323232302c2720170e050000000013202c3946535f6c798693a0aca89b8e8174675b4e4134281b0e020000000000000e1a2734414d5a6774818e9aa7aea194877a6d6154473a2e211407000000000000000000000000000000000d1925313d48525b61626262626262626260594f453a2e2216090000000000000000000000000000000000000000111e2a3744505d6a76838f9ca8ada094887b6f64584d433a332e2b292828292b2e333a424b56606b76828e9aa6afa3968a7e7265594c4034271b0e020013202c3946535f6c798693a0a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a29d908376695d5043362a1d1000000000131f2c3946525f6c7986929facafa295887b6f6255493c2f22160900000000000000000000000000000000000000000000000d1a2633404d596673808c99a6b3a89b8f8275685b4f4235281c0f0000000000000000030f1b27323e4a56626d7985919da9b4aba0979292929292929292929292929292929292929292929292959ea8b4ab9f93877b7064584c4035291d110500000000000000000000000000000000000000000006121e2a37434f5b6874818d99a6ab9f93867a6d6155483c2f23160a0000000000000000000000000000000001121f2c3845525f6b7885929fa295887b6f6255493c2f22160900000000000000000000000000000000101c2936434f5c697683909ca9aea194887b6e6255483c2f23160a0000010e1b2834414e5a6773818d9aa6b0a4978a7e7164584b3e3225180c000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d00000000000000000000000000000000000001060a0f14191e23282d32373c41464b4f54595e63686d72777c81868b909599908376695d5043362a1d100013202c3946535f6c79869398938e8a85807b76716c67625d58534e4944403b36312c27221d18130e090400000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d0000000000000b16202b36414c57616c77828d97a0958a80746a5f54493e33291e1308000000000000000000000000000000000000000000000000000000000000000000000814202c38434f5b67737f8b96a2ada1968a7e72665a4e42362a323e4a56626e7a86929eaaa195897d7165594d4135291e120600000000000013202c3946535f6c798693a0acaca09386796c5f5346392c26262626262626262626262626262626262626262626262626262524201b150e05000000000013202c3946535f6c798693a0aca89b8e8174675b4e4134281b0e010000000000000e1a2734414d5a6774818e9aa7aea194877a6d6154473a2e211407000000000000000000000000000000000f1c2835414d59646d6f6f6f6f6f6f6f6f6b61564a3e3225190c0000000000000000000000000000000000000000121f2c3845525e6b7884919eaaaa9d9184786b5f53473c3128221f1d1c1c1d1f2228303a444f5a66717d8a96a2a5a49a8d8175685c4f43362a1d11040013202c3946535f6c7986939e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9d908376695d5043362a1d1000000000121f2c3845525f6b7885929eabafa296897c6f6356493d3023170a00000000000000000000000000000000000000000000000e1b2734414d5a6774818d9aa7b3a79b8e8174685b4e4235281b0f0000000000000000000a16222e3945515d6974808c98a4afa79b8f86868686868686868686868686868686868686868686868c98a4b1a69a8e83776b5f53473c3024180c00000000000000000000000000000000000000000000020e1b2733404c5865717e8a97a3afa296897d7064574b3e3225190c0000000000000000000000000000000004131f2c3945525f6c7885929fa296897c6f6255493c2f22160900000000000000000000000000000000101c2936434f5c697683909ca9aca09386796d6053473a2d2114070000000d1926333f4c5965727f8c98a5b2a5988c7f7266594c3f3326190d000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d0000000000000000000000000000000003070c11161b20252a2f34393e43484c51565b60656a6f74797e83888d92969ba09d908376695d5043362a1d100013202c3946535f6c798693a09f9a95908b87827d78736e69645f5a55504b46413d38332e29241f1a15100b060100000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d000000000000040f1a252f3a45505b65707b86919c9c91867b70665b50453a2f251a0f040000000000000000000000000000000000000000000000000000000000000000010d1925313c4854606c78848f9ba7a99d9185796d6155493d32262d3946525e6a76828e9aa6a5998d8175695e52463a2e22160a00000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2019191919191919191919191919191919191919191919191919191714100a0300000000000013202c3946535f6c798693a0aca89b8e8174675b4e4134281b0e010000000000000e1a2734414d5a6774818e9aa7aea194877a6d6154473a2e21140700000000000000000000000000000000101d2a3743505d69767c7c7c7c7c7c7c7c73665a4d4033271a0d010000000000000000000000000000000000000013202c3946525f6c7986929faca89c8f8276695c5043372b1f1712100f0f1012171e28323d4955616d7a8692999998979084776b5e5245382c1f13060013202c3946535f6c7986929292929292929292929292929292929292929292929292929292929292929292929292929292908376695d5043362a1d1000000000111e2b3844515e6a7784919daab0a3978a7d7164574b3e3125180b00000000000000000000000000000000000000000000020f1c2935424f5b6875828e9ba8b3a69a8d8173675a4d4134271b0e00000000000000000005111d2935404c5864707b87939faba79b8f83797979797979797979797979797979797979797979808c98a4ada1968a7e72665a4e43372b1f130700000000000000000000000000000000000000000000000b1724303d4955626e7b8794a0ada5998c8073665a4d4134281b0f0200000000000000000000000000000006131f2c3946525f6c7986929fa296897c6f6356493c3023160900000000000000000000000000000000101c2936434f5c697683909ca9ab9f9285786c5f5245392c1f13060000000b1825323e4b5864717e8b98a4b1a69a8d8073675a4d4034271a0e000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d000000000000000000000000000004090e13181d22272c31363b4044494e53585d62676c71767b80858a8e93989da2a49f9a908376695d5043362a1d100013202c3946535f6c7986939ba0a5a19c97928d88847e7a75706b66615c57524d48433e3935302b26211c17120d08030000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d0000000000000008131e29333e49545f69747f8a95a0988d82776c61574c41362b21160b000000000000000000000000000000000000000000000000000000000000000006121e2935414d5965707c8894a0aca4988c8175695d5145392d212935414d5966727e8a96a2aa9e92867a6e62564a3f33271b0f03000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0804000000000000000013202c3946535f6c798693a0aca89b8e8275685b4e4235281b0f020000000000000e1b2834414e5b6774818e9aa7ada094877a6d6054473a2e21140700000000000000000000000000000000101d2a3643505d6976838989898989898174675a4e4135281c10060000000000000000000000000000000000000013202c3946535f6c798693a0aca89b8e8275685b4e4235281c0f0603000003060c16212d3945515e6a77838e8d8c8b8a8986796d6053473a2d2114070013202c3946535f6c7985858585858585858585858585858585858585858585858585858585858585858585858585858585858376695d5043362a1d1000000000101d2a3743505d6976838f9ca9b1a5988b7e7265594c4033261a0d0100000000000000000000000000000000000000000005111e2a3744505d697683909ca9b2a5988c7f7266594c4033261a0d000000000000000000010c1824303c47535f6b77838e9aa6ab9f93877b706c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d7884909ca8a89d9185796d61564a3e32261a0f0300000000000000000000000000000000000000000000000814212d3a46535f6c7885919eaba89b8f8275695c5043372a1e11040000000000000000000000000000000613202c3946535f6c7986939fa396897c6f6356493c3023160a00000000000000000000000000000000101c2936434f5c697683909ca9ab9e9184776b5e5145382b1e12050000000b1724313e4a5764707d8a97a4b0a79a8e8174675b4e4134281b0e000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d000000000000000000000001060b10151a1f24292e33383d41464b50555a5f64696e73787d82878b90959a9fa4a29d98938e898376695d5043362a1d100013202c3946535f6c79858a8f94999ea3a39e99948f8a85817b76726d68635e59544f4a45403b36322d28231e19140f0a05000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00000000000000010c17222d37424d58636d78838e999e94897e73685d53483d32271c1207000000000000000000000000000000000000000000000000000000000000000b16222e3a46525d6975818d99a5aca094887c7064584c4034291d25313d4955616d7a86929eaaa2968b7e73675b4f43372b1f1308000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca89b8e8275685b4f4235281c0f020000000000000e1b2835414e5b6874818e9ba8ada093867a6d6053473a2d20140700000000000000000000000000000000101c2936424f5c6875828e969696968f8276695d5044382d22180f0700000000000000000000000000000000000013202c3946535f6c7986929faca89b8e8275685b4e4235281c0f02000000000005101d2936424f5b68758181807f7e7d7d7c786d6054473a2d21140700131f2c3945525e6b7578787878787878787878787878787878787878787878787878787878787878787878787878787878787873685c4f4336291d10000000000f1c2935424f5b6874818e9ba7b3a69a8d8174675b4e4235291c10030000000000000000000000000000000000000000000714202d3946525f6b7885919eaab0a3978a7d7164584b3e3225180c0000000000000000000008131f2b37434e5a66727e8995a1ada4988c8074685f5f5f5f5f5f5f5f5f5f5f5f5f5f5f65717d8995a1ada4988c8074685d5145392d21160a00000000000000000000000000000000000000000000000005121e2b3744505d6976838f9ca8aa9d9184786b5f5245392c20130600000000000004080b0c0c0b0a09080713202d3946535f6c798693a0a3968a7d7063564a3d3023170a08090a0b0c0c0b080500000000000000101c2936434f5c697683909ca9aa9e9184776a5d5144372b1e11040000000a1723303d4a5663707d8a96a3b0a89b8e8275685b4e4235281b0f000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d00000000000000000003080d12171c21262b30353a3e43484d52575c61666b70757a7e84898d92979ca1a5a09b96918c87827d7872675b4f4236291c1000131f2c3945525e6a74797e84898e93989da2a5a09b96918c87827d78736f6a65605b56514c47423d38332f2a25201b16110c0702000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d000000000000000005101b26313b46515c67727c87929d9a8f857a6f64594e44392e23180e030000000000000000000000000000000000000000000000000000000000030f1b27333f4a56626e7a86929ea9a79b8f83776b5f54483c302418212d3945515d6975828e9aa6a79b8f83776b5f54483c3024180c000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000121f2c3845525f6b7885929eaba89c8f8275695c4f4236291c0f030000000000000f1c2835424f5b6875828e9ba8aca09386796c605346392d201307000000000000000000000000000000000e1b2834414e5a6773808c99a2a29e9185796c6155493e342a211911090200000000000000000000000000000000121f2c3945525f6b7885929eaba89c8f8276695c5043372a1e13080000000000010e1a2734404d596570757473727171706f6d665c5145382c1f130600111e2a36424e59636a6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6961574c4034271b0e000000000e1a2734404d5a6673808c99a5b2a89c8f83766a5d5144382b1f13060000000000000000000000000000000000000000000b1723303c4855616e7a8793a0acaea195887c6f6256493d3023170a00000000000000000000030f1a26323e4a55616d7985919ca8a89d9185796d61555252525252525252525252525e6a76828e99a5ab9f93877b7064584c4034291d1105000000000000000000000000000000000000000000000000030f1c2835424e5b6774818d9aa6aca093867a6d6054473b2e21150800000000030a1014171919181716151413202d3a4653606d798693a0a3968a7d7063574a3d302417141516161718181715110b050000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1e11040000000a1623303d4956636f7c8996a3b0a89b8f8275685b4f4235281c0f000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d00000000000000050a0f14191e23282d32373b40454a4f54595e63686d72767b81858a8f94999ea3a49f9a95908b86817b76726d6760564b3f33271a0e00111d2a36424e5962696e73787d82878c91969ba0a5a29d98938e8984807a75706c67625d58534e49443f3a35302b27221d18130e090400000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00000000000000000009141f2a35404a55606b76818b96a1968b81766b60554a40352a1f140900000000000000000000000000000000000000000000000000000000000814202c38434f5b67737e8b96a2aea3978b7f73675b4f43372b1f141d2935414d5965717d8996a2aba094887c7064584c4034291d11050000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000121e2b3845515e6b7784919eaaa99c908376695c5043362a1d1003000000000000101c2936434f5c6975828f9ca8ab9f9285786c5f5246392c1f1306000000000000000000000000000000000d1926323f4b5864717d8a96a2ada195897d71665b50463c332b231b130c04000000000000000000000000000000111e2b3744515d6a7783909ca9aa9d9184786b5f53473b2f241a110801000000000c1825313d49545e656867666665646362615c544b4034281c1004000e1a26323d4851595e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5d584f453b2f23170b000000000c1925323e4b5864717d8a96a3afab9e9285796c6054473b2f23160a0000000000000000000000000000000000000000030f1b27333f4b5864707d8996a2afac9f9386796d6054473b2e22150800000000000000000000000a16212d3945515c6874808c97a3ada195897d72665a4e4646464646464646464b57636e7a86929eaaa69a8e83776b5f53473b3024180c00000000000000000000000000000000000000000000000000000d1a2633404c5965727e8b98a5aea195887b6f6256493c3023160a000000050d151b20242525242323222120202d3a4753606d7a8693a0a4978a7d7063574a3d30241f2021222324252524211c160f0700000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1e1104000000091623303c4956636f7c8996a3b0a89c8f8275685b4f4235281c0f000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d0000000000060c11161b20252a2f33383d42474c51565b60656a6f74787d82878c91969ba0a5a29d98938e89847f7a75706b66615c564e443a2e23170b000d1a25313c4750585d62676c71767b80858a8f94999ea3a49f9a95908b86817c77726d69645f5a55504b46413c37322d28241f1a15100b050000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d000000000000000000030e18232e39444e59646f7a858f9a9d92877c72675c51463b31261b1005000000000000000000000000000000000000000000000000000000010d1925303c4854606c77838f9ba7aa9e92867a6e62564b3f33271b0f1925313d4955616d7985919da9a4988c8175695d5145392d2115090000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b090500000000000000111e2a3744505d6a7784909daaaa9d9084776a5d5144372a1e1104000000000002111d2a3743505d697683909ca9aa9e9184776b5e5145382b1f1205000000000000000000000000000000000a1723303c4955616e7a86929ea9a5998e82776c62584e453d342d251e160f070000000000000000000000000000101c2936424f5b6874818d9aa6aca093877b6f63574c41362c231a130b030000000814202c37424c54595b5b5a595857565555514b42392e23180c00000a15212b363f474e51515151515151515151515151515151565e62626262626262615c54515151515151515151515151515151514c463d34291e1307000000000a1723303c4955626e7b8794a0adada195887c6f63574b3f33271b0f040000000000000000000000000000000000000008131f2b37434f5b6774808c99a5b2a99c9084776a5e5145382c1f1306000000000000000000000005111d2834404c58636f7b87939eaaa69a8e82766a5e53473b393939393939444f5b67737f8b97a3ada1958a7e72665a4e43372b1f130700000000000000000000000000000000000000000000000000000b1824313e4a5764707d8a96a3b0a3978a7d7064574b3e3124180b0000050e171f262c30323231302f2e2d2c2b2d3a4753606d7a8794a0a4978a7d7164574a3e312b2c2d2e2f30313232302d2821191007000000101c2936434f5c697683909ca9aa9e9184776a5d5144372b1e11040000000a1623303d4956636f7c8996a3b0a89c8f8275685b4f4235281c0f000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d000000020a11181d22272c30353a3f44494e53585d62676c71757a8084898e93989da2a5a09b96918c87827d78736e69645f5a55504b443c33281d1206000914202b353e464c51565b60656a6f74797e84898d92989da2a6a19c97928d88837e79746f6a65615c57524d48433e39342f2a25211c16100900000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d0000000000000000000007121c27323d48525d68737e89939e998e83786e63584d42372d22170c01000000000000000000000000000000000000000000000000000006121d2935414d5965707c8894a0aca5998e82766a5e52463a2e22160a15212d3945515d6975818d99a5a99d9185796d6155493e32261a0e0200000013202c3946535f6c798693a0acaca09386796c5f5346392c201a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1815100b040000000000101d2936434f5c6976828f9ca8ab9e9184786b5e5245382b1f1205000000000005121e2b3844515e6b7784919daaa99d9083776a5d5044372a1e1104000000000000000000000000000000000814202d3945515d6975818d98a4aa9f94897e746a60574e463f3730282019110a020000000000000000000000000e1a2733404c5965717d8a96a2aea3978b8074685d52483e352c241d150e06000004101b26303a42494d4e4e4d4c4b4b4a494845403930271d12070000040f1a242d363d42444545454545454545454545454546525e686e6f6f6f6f6f6f6e665b50454545454545454545454545454544413b342b22170d02000000000814212d3a46535f6c7884919da9b0a4988c8073675b4f43372c20150a000000000000000000000000000000000000030e1924303c47535f6b7784909ca8b2a6998d8174685b4f4236291d10040000000000000000000000000c18232f3b47535f6a76828e9aa5aa9e93877b6f63574b3f332c2c2c303c4854606c7884909ba7a89c9185796d61554a3e32261a0e0300000000000000000000000000000000000000000000000000000a1623303c4955626f7b8895a2aea5988b7e7265594c3f3226190c00010c16202931383c3f3f3e3d3c3b3a3938373a4754616d7a8794a1a4978a7d7164574b3e3738393a3b3c3d3e3f3f3d39332b23190f040000101c2936434f5c697683909ca9ab9e9184776b5e5145382b1e12050000000a1723303d4a5663707d8a96a3b0a89b8e8275685b4e4235281c0f000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d0000020b141c23282d32373c41464b50555a5f64696d72777c81868b90959a9fa4a49f9a95908b86817b76716c67625d58534e49443f3a332a21170c0100030e19232c343b40464b50555a5f64696e73787d82878c91969ba0a5a39e99948f8a85807b76716c67625e59544f4a45403b36312c27211a1209000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00000000000000000000000b16202b36414c57616c77828d97a0958a7f74695f54493e33291e130800000000000000000000000000000000000000000000000000000a16222e3a46525d6975818d99a5ada195897d7165594d41362a1e1206101c2935414d5965717d8995a1ada1968a7e72665a4e42362a1e130700000013202c3946535f6c798693a0acaca09386796c5f5346392c2626262626262626262626262626262626262626262626262626262624211c160e06000000000f1c2835424e5b6874818e9aa7ac9f9286796c5f5346392d20130700000000000613202c3946525f6c7885929eaba89b8f8275695c4f4336291c10030000000000000000000000000000000004111d2935414d5965707c87929da8a59a90867c726960585149413a322b231c140c0400000000000000000000000b1824303d4955616d7985919da8a89c91857a6f645a50473e362f2720181109020009141e2830373d414241403f3f3e3d3c3b39352e271e150b0000000008121b242b3135383838383838383838383838383b4855626e7a7c7c7c7c7c7c786c5f5346393838383838383838383838383735302a22191006000000000005121e2b3743505c6875818d9aa6b2a89c9084776b6054483d31261b110700000000000000000000000000000000010a151f2a35414c5864707c8894a0acaea296897d7165584c3f33271a0e0100000000000000000000000007131f2a36424e5a65717d8995a1aca3978b8074685c5044382c202935414d5965717c8894a0aca4988c8074685d5145392d21160a0000000000000000000000000000000000000000000000000000000815212e3b4754616d7a8794a0ada6998d8073665a4d4034271a0e0007131e28323b43484b4c4b4a494847464544434754616e7a8794a1a4988b7e7164574b43434445464748494a4b4b49443d352b21160a0000101c2936434f5c697683909ca9ab9e9285786b5f5245392c1f13060000000b1724313e4a5764707d8a97a4b0a79b8e8174675b4e4135281b0e000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d00000a141d262e34393e43484d52575c61666a6f74797e83888d92979ca1a6a29d98938e89847f7a75706b66615c57524d48433e39342e2821180f0500000007111a222a30353a3f44494e53585d62676c71767b80858a8f94999ea3a4a09b96918c87827d78736e69645f5b56514c47423d38332c241b12080000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d0000000000000000000000040f1a242f3a45505b65707b86919c9c91867b70655b50453a2f241a0f04000000000000000000000000000000000000000000000000030f1b27333f4a56626e7a86929da9a89c9084786d6155493d3125190d010c1824303c4955616d7985919da9a69a8e82766a5e53473b2f23170b00000013202c3946535f6c798693a0acaca09386796c5f5346393333333333333333333333333333333333333333333333333333333333312d2720180f050000000e1a2734404d5a6673808c99a6ada094877a6e6154483b2e22150800000000000815212e3a4754606d7a8693a0aca69a8d8174675a4e4134281b0e0200000000000000000000000000000000010d1925313c48545f6b76818b96a0aaa2988e847b736a625b534c443d352d261e160e05000000000000000000000814212d3945515d6975808c97a2ada2968b81766c625950484039312a221b140c04020c161e262c3134353434333231302f2f2d29231d150c0300000000000912192025292b2b2b2b2b2b2b2b2b2b2b2b2f3c4855626f7b888989898986796c5f5346392c2b2b2b2b2b2b2b2b2b2b2b2b28241f181007000000000000020f1b2834404d5965717d8a96a2aeaca094887c7065594e43382d23190f0600000000000000000000000000000109131c26313c47525d6975818c98a4b0aa9e9286796d6155493c3024170b00000000000000000000000000020e1a26313d4955616c7884909ca8a89c9084786c6054493d31252e3a46515d6975818d99a5ab9f93877b6f64584c4034281d11050000000000000000000000000000000000000000000000000000000713202d3a4653606c7986939faca79a8e8174675b4e4135281b0e000c18242f3a444d54585857565554535251504f4f54616e7b8894a1a4988b7e7165584e4f50515253545556575858554f473d32271b0f0300101c2936434f5c697683909ca9aca09386796d6053473a2d2114070000000c1825323e4b5864717e8b98a4b1a79a8d8174675a4d4134271b0e000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d0006111c262f383f454a4f54595e63676c71767b80858a8f94999ea3a5a09b96918c87827d78736e69645f5a55504b46413c37322d28231d170f0600000000000811181f24292e33383d42474c51565b60656a6f74797e83888d92979ca1a6a29d98938e89847f7a75706b66615c58534e49443e362d24190e0300101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00000000000000000000000008131e29333e49545f69747f8a95a0978d82776c61564c41362b20160b0000000000000000000000000000000000000000000000000814202c37434f5b67737e8a96a2aea4988c8074685c5044382c211509000814202c3844505c6975818d99a5ab9f93877b6f63574b3f33281c1004000013202c3946535f6c798693a0acaca09386796c5f53464040404040404040404040404040404040404040404040404040404040403d38322a21170d0200000c1925323f4b5865717e8b97a4aea295887c6f6356493d3023170a00000000000a1623303c4955626f7b8895a1aea5988b7e7265594c4033261a0d0000000000000000000000000000000000000814202c37434e59646f7a848e98a1a9a0968d857c746d655e564e473f38302820170f0600000000000000000005111d2935414c58646f7a86919ba6a89d92887e746b625a524b433c342d251e160e06040c141b212527282827262524242322201d18120b0300000000000000080f15191d1e1e1e1e1e1e1e1e1e1e1e222f3c4855626f7b889596969386796c5f5346392c201e1e1e1e1e1e1e1e1e1e1e1c18130d0600000000000000000c1824303d4955616d7985919da9b0a4998d81766a5f54493f342b21181009030000000000000000000000050b131b252e38434d58636e7a85919da9b1a5998d8275695d5145392d20140800000000000000000000000000000915212d3844505c6873808b97a3aca095897d7165594d41352a323e4a56626e7a86929da9a69a8e82766b5f53473b3024180c0000000000000000000000000000000000000000000000000000000006121f2c3945525f6b7885929eaba89b8f8275685b4f4235291c0f00101c2834404c565f656564636261605f5e5d5c5b5a616e7b8895a1a5988b7e71655a5b5c5d5e5f6061626364656561594e43382c20130700101c2936434f5c697683909ca9ada194877b6e6155483b2f2216090000000d1a26333f4c5966727f8c98a5b2a6998c807366594d4033261a0d000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d000b17222d38424a51565b5f64696e73787d82878c91969ba0a5a49f9a95908b86817b76716c67625d58534e49443f3a35302b26211c17120c0500000000000000060d13181d22272c31363b40454a4f545a5f64696e73787d82878c91969ba0a5a39e9a95908b86817c77726d68635e59544f483f352b20140800101c2936434f5c697683909ca9aa9d9184776a5e5144372b1e1105000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d000000000000000000000000010c17222d37424d58636d78838e999e93897e73685d52483d32271c110700000000000000000000000000000000000000000000010d1924303c4854606c77838f9ba7ab9f93877b6f63584c4034281c10040004101c2834404c5864717c8995a1ada3978b8074685c5044382c201408000013202c3946535f6c798693a0acaca09386796c5f534d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4c49443c33291e130800000b1724303d4a56636f7c8995a2aea4978a7e7164584b3f3226190d00000000000c1925323e4b5764717d8a96a3afa396897d7064574a3e3125180b000000000000000000000000000000000000040f1b26323d48535d68727c868f98a0a89f978e867e776f6860595149423a322921180f060000000000000000010d1824303c47535e69747f89949ea7a49a90877d746c645d554d463f3730282018100802091015181b1b1b1a19181817161514110c070000000000000000000004090d101212121212121212121215222f3c4855626f7b8895a2a09386796c5f5346392c201312121212121212121211100c08020000000000000000000814212d3945515d6975818d98a4b0a99e92877c71665b51463d332a221b140f0a0705030202020305080c10161d252d37404a545f6a75808b97a2aeaca095897d7165594d4135291d1004000000000000000000000000000004101c28343f4b57636f7a86929eaaa5998d82756a5e52463a2e37434f5b67727e8a96a2ada1958a7e72665a4e42372b1f13070000000000000000000000000000000000000000000000000000000004121e2b3845515e6b7784919eaba99c8f8276695c4f4336291c1000121f2b3844515d68717271706f6e6d6c6b6a696867666e7b8895a2a5988c7e72666768696a6b6b6d6d6f6f7071716b6054483b2f22160900101c2936434f5c697683909ca9afa296897c7063574a3d3124180b0000010f1b2834414e5a6774818d9aa6b1a4988b7e7265584c3f3225190c000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938c807366594c403326190d000f1b27333f4a545c61666b70757a7f84898e93989da2a6a29d98938e89847f7a75706b66615c57524d48433e39342f29251f1a15100b060100000000000000000002080d12171c21262b30353a3f44494e53585d62676c71767b80858a8f94999ea3a5a09b96928d88837e79746f6a65605a51473c3025180c00101c2936434f5c697683909ca9ab9e9285786b5f5245392c201306000714212d3a4753606d7a8794a0ada69a8d807366594d4033261a0d0000000000000000000000000005101b26313b46515c67727c87929d9a8f857a6f64594e44392e23180d0300000000000000000000000000000000000000000006121d2935414d5964707c8894a0aca69b8f83776b5f53473b2f23170c0000000c1824303c4854606c7885919da9a89c9084786c6054493d3125190d010013202c3946535f6c798693a0acaca09386796c5f5959595959595959595959595959595959595959595959595959595959595959554e453b3024190d01000915222e3b4854616d7a86939faca6998c8073675a4e4135281c1003000000030f1b2834414d5a6673808c99a5ada094877b6e6155483c2f231609000000000000000000000000000000000000000a15202b36414c56606a737d868e969ea6a0989089817a726a635b534c443b332a21180f06000000000000000008141f2b36414d58626d78828c959ea7a2998f877e766e675f585049413a322a221a12090004090c0e0f0e0d0d0c0b0a09080704010000000000000000000000000000000000000000000000000915222f3c4855626f7b8895a2a09386796c5f5346392c2013060000000000000000000000000000000000000000000004111d2935414d5964707c88939faaafa4988d82776d62584f453c342c25201b171311100f0f0f101214181c21282f373f49525c66717b86919ca8b1a69b8f84786c6155493d3125190d000000000000000000000000000000000b17232f3b46525e6a76828d99a5aa9e92867a6e62564b3f333c48535f6b77838f9ba7a89c9185796d61554a3e32261a0e020000000000000000000000000000000000000000000000000000000001111e2a3744515d6a7784919daaa99c908376695d5043362a1d100013202c3946535f6c797e7d7c7b7b7979787776757473727b8895a2a5988c7e7272737475767778797a7b7c7d7e7c7063564a3d3023170a00101c2936434f5c697683909ca9b1a4988b7e7265594c4034271b0f030004111d2a3643505c6975828f9ba8afa3968a7d7064574a3e3124180b000000000000010507101c2936434f5c69768390908376695c4f4336291c100705010000000000000000000000010507101c2936434f5c69768390908376695c4f4336291c1007050100000000000013202c3946535f6c7986938c807366594c403326190d00121e2b37434f5b666d72777c81868b90959a9ea3a5a09b96918c87827d78736e69645f5a55504b46413c37322d28231e19140f0a05000000000000000000000000000001060b10151a1f24292e33383d42474c51565b60656a6f74797e83888d92979ca1a6a29d98948f8a85807b76716c63594d4134281b0f00101c2936434f5c697683909ca9aca093867a6d6154473b2f22160a000714212e3a4754616d7a8794a1aea69a8d807366594d4033261a0d000000000000000000000000000009141f2a35404a55606b75818b96a1968b81756b60554a3f352a1f14090000000000000000000000000000000000000000000a16222e3a46515d6975818d99a4aca2968a7e72665a4e43372b1f13070000000814202c3844505c6874818c98a5aca095897d7165594d4135291d12060013202c3946535f6c798693a0acaca09386796c66666666666666666666666666666666666666666666666666666666666666666560574c4135291d1004000713202c3945525e6b7784909da9a89b8f8276695d5144382c1f130700000006121f2b3744505c6975828e9ba7aa9e9185786c5f53463a2d20140700000000000000000000000000000000000000040f1a252f3a444e58616b747c848c949ca3a29b938b847c756d655d554d453c332a21180e0400000000000000030e1a25303b46515b66707a838c959da6a19990888079716a625b534c443c342c241b1209000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8895a2a09386796c5f5346392c20130600000000000000000000000000000000000000000000000c1824303c48545f6b76828d99a4afaa9f94897e746a61574e463e37312b2723201e1c1c1b1c1d1e2124282d33394149515b646e78828d98a3aeaba0958a7e73675c5044382c2015090000000000000000000000000000000007121e2a36424d5965717d8994a0aca2978b7f73675b4f4337404c5864707c88949faba3988c8074685c5145392d21150a000000000000000000000000000000000000000000000000000000000000111d2a3744505d6a7784909daaaa9d9083766a5d5043372a1d100013202c3946535f6c79868a89888786858484828281807e7d8895a2a6998c7f7e7f818182838485868788898a8a7d7063564a3d3023170a00101c2936434f5c697683909ca9b3a79a8e8175685c5043372b1f1308040814202d3945525e6b7784919daaaea194887b6e6255493c2f2316090000000000070d1114161c2936434f5c69768390908376695c4f4336291c1614110d07000000000000000000070d1114161c2936434f5c69768390908376695c4f4336291c1614110d07000000000013202c3946535f6c7986938c807366594c403326190d0013202c3946525f6c777e83888d92979ba0a5a49f9a948f8a85817b76716c67625d58534e49443f3a35302b26211c17120d08030000000000000000000000000000000000000004090e13181d22272c31363b40454a4f54595e63686d73787d82878c91969ba0a5a49f9a95918c87827d75695c5043362a1d1000101c2936434f5c697683909ca9aea295897c6f63574a3e32261a0f060815222e3b4854616e7b8894a1aea69a8d807366594d4033261a0d0000000000000000000000000000030e18232e39444e59646f7a858f9a9d92877c71675c51463b31261b100500000000000000000000000000000000000000000f1b27333f4a56626e7a86919da0a09d92867a6e62564a3e32261a0e0200000004101c2834404c5864707c8894a0a0a0998d8175695e52463a2e22160a0013202c3946535f6c798693a0acaca093867973737373737373737373737373737373737373737373737373737373737373737372695d5145382c1f13060004111d2a36434f5c6875818e9aa6aa9e9285796c6054483b2f23170b0000000b17232f3b47535f6c7885919eaaa79b8e8275695c5044372b1e1205000000000000000000000000000000000000000008131e28323c464f59626a727a828a9299a1a59d968e877f776f675f574e453c332a20160b010000000000000008141f2a353f4a545e68717a838b949ca4a29a928b837b746d655e564e463e362d241b12080000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8895a2a09386796c5f5346392c20130600000000000000000000000000000000000000000000000814202c37434f5a65717c87929da8b0a59b90867c736960585049423c37332f2d2b29282829292b2d3034383e444b535b636d76808a949fa9afa59a8f84786d62564b3f33281c100400000000000000000000000000000000020e1925313d4954606c78848f9ba7a79b8f83776c6054483c45515d6974818c98a4ab9f93877b6f63584c4034281d1105000000000000000000000000000000000000000000000000000000000000111d2a3744505d6a7783909daaaa9d9084776a5d5044372a1d110013202c3946535f6c798693969594939291908f8e8d8c8b8a8e98a4a79b908a8b8c8d8e8f90919293949596968a7d7063564a3d3023170a00101c2936434f5c697683909ca9b6a99d9084786c5f53473b3024191211111824303c4955616e7a87939facab9f9286796c6053473a2e211408000000030b12181d2022222936434f5c69768390908376695c4f4336292222201d18120b030000000000030b12181d2022222936434f5c69768390908376695c4f4336292222201d18120b0300000013202c3946535f6c7986938c807366594c403326190d0013202c3946535f6c79868f94989da2a7a29d98938e89847e7a75706b66615c57524d48423d39332e29241f1a15100b0601000000000000000000000000000000000000000000000003080d12171c21262b30353a3f44494e53585d62676c71767b80858a8f94999ea3a6a19c97928d8376695d5043362a1d1000101c2936434f5c697683909ca9b1a4988b7f73665a4e42372c2118121116232f3c4955626f7b8895a2aea6998c807366594c403326190d00000000000000000000000000000007121c27323d48525d68737e89939e998e83786d63584d42372c22170c0100000000000000000000000000000000000000111e2a37434f5b67737e8a93939393938d8175695d5145392e22160a00000000000b1824303c4854606c7884909393939392867a6e62564a3e3225190c0013202c3946535f6c798693a0acaca0938680808080808080808080808080808080808080808080808080808080808080808080796d6053463a2d20130700010e1b2734404d5965727e8a97a3ada195887c7064584b3f34281d120a0809111c27333f4b57636f7b8894a1ada4978b7e72665a4d4134281b0f030000000000000000000000000000000000000000010c16202a343d4750586068707880878f969ea5a09891898179716960574e453c32281d130800000000000000020d18232d38424c565f687179828a929aa1a49c958d867e776f68605850483f362d241a100600000000000000000000000000000000000000000000000000000000000101010101010101010915222f3c4855626f7b8895a2a09386796c5f5346392c2013060101010101010101010000000000000000000000000000030f1b26323d4954606b76818c96a1abaca2988e857b726a625a534d48433f3c39373635353536383a3c4044494f565d656d757f88929ca6b0a89e93887d72675c51453a2e23170b0000000000000000000000000000000000000915202c3844505b67737f8b96a2aca094887c7064584d414a55616d7985919da9a69a8e82766b5f53473b2f24180c00000000000000000000000000000000000000000000000000000000000000111d2a3744505d6a7784909daaaa9d9084776a5d5044372a1d110013202c3946535f6c798693a0a2a1a09f9e9d9c9b9a99989799a0a9aca29a9798999a9b9c9d9e9ea0a0a1a2968a7d7063564a3d3023170a00101c2936434f5c697683909ca9b6aca094887c7064584c41362b221f1e1e202a35414c5865717d8a96a2afa99c9083776a5e5145382b1f12060000020c151d24292d2f2f2f36434f5c69768390908376695c4f43362f2f2f2d29241d150c02000000020c151d24292d2f2f2f36434f5c69768390908376695c4f43362f2f2f2d29241d150c02000013202c3946535f6c7986938c807366594c403326190d0013202c3946535f6c7986939fa4a5a09b96918c87827d78736e69645f5a55504b46413c37322d28231e19140f0a050000000000000000000000000000000000000000000000000000000001060b10151a1f24292e33383d42474c51565b60656a6f74797e83888d92979ca1a7a39d908376695d5043362a1d1000101c2936434f5c697683909ca9b4a79b8f83776b5f53483d332a231f1e1e25313e4a5764707d8a96a3b0a5988c7e7265594c3f3226190c000000000000000000000000000000000b16202b36414c56616c77828d979f958a7f74695e54493e33281e13080000000000000000000000000000000000000013202c3946525f6b7783868686868686867c7165594d4135291d1105000000000007131f2b3844505c687480868686868686867e73665a4d4134271a0e0013202c3946535f6c798693a0acaea2978e8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d86796d6053463a2d20130700000c1824313d4956626e7b87939faba4988c8074685c5044392e231b16151619222d38444f5b6773808b98a4aca094877b6f63564a3e3125190c00000000000000000000000000000000000000000000040f18222b353e464e575e666e757d848c939ba2a39b938b837b726a60574d44392f241a0f040000000000000007111c26303a444d565f67707880888f979ea69f989089817a726a625a51483f362c22180e0300000000000000000000000000000000000000000000000000060a0d0e0e0e0e0e0e0e0e0e0e15222f3c4855626f7b8895a2a09386796c5f5346392c20130e0e0e0e0e0e0e0e0e0e0c09050000000000000000000000000a16212c38434e59646f7a858f99a3adaaa0978e857c746c655e59534f4b48464443424242434446494c50555a61676f767f88919aa4aeaaa0968c81766c61564b3f34291d120600000000000000000000000000000000000004101c27333f4b57626e7a86929da9a4998d8175695d51454e5a66727e8a96a1ada195897d72665a4e42372b1f130700000000000000000000000000000000000000000000000000000000000000111d2a3744505d6a7784909daaaa9d908376695d5043372a1d100013202c3946535f6c798693a0a1a09f9e9d9c9b9a99989796989fa9aca199969698989a9b9c9d9e9fa0a1a2968a7d7063564a3d3023170a00101c2936434f5c697683909ca9b6b0a4988c8074695d52473d342e2c2a2b2c323b46515d6975818d99a5b2a5998d8174675b4f4236291d100400000a141e272e35393c3c3c3c434f5c69768390908376695c4f433c3c3c3c39352e271e140a0000000a141e272e35393c3c3c3c434f5c69768390908376695c4f433c3c3c3c39352e271e140a000013202c3946535f6c7986938c807366594c403326190d0013202c3946535f6c798693a0a39a948f8a85817b76716c67625d58534e49443f3a35302b26211c17120d080300000000000000000000000000000000000000000000000000000000000000000004090e13181d22272c31363b40454a4f54595e63686d72777c82878c91969ca69d908376695d5043362a1d1000101c2936434f5c697683909ca9b6ab9f93877b70655a4f453c342e2b2a2b2c34414d5966727f8b98a5b0a4978a7e7164584b3e3125180b00000000000000000000000000000000040f1a242f3a45505b65707b86919b9b91867b70655a50453a2f24190f04000000000000000000000000000000000000131f2c3946525f6b767979797979797979776c6054483c3024190d010000000000030f1b27333f4c58647079797979797979797972665a4d4034271a0e0013202c3946535f6c798693a0acb3a9a09a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9386796d6053463a2d20130700000915212e3a46525f6b77838f9ba7a89c9084786d61564a40352d26232222252b343f4955606c7884909ca8a89c9084776b5f53473a2e2215090000000000000000000000000000000000000000000000061019232c343d454d545c646b737a82899198a0a59d958d857c72695f554b41362b20150a00000000000000000a141e28323b444d555e666e767d858d949ca3a29b938b847c746c635a51483e342a1f150a0000000000000000000000000000000000000000000000050c1116191b1b1b1b1b1b1b1b1b1b1b222f3c4855626f7b8895a2a09386796c5f5346392c201b1b1b1b1b1b1b1b1b1b1a1815100a030000000000000000000004101b27323d48535e68737d87919ba4aea9a0978e867e76706a645f5b575452504f4f4e4f50515355585c61666c72798189919aa3acaba2988e847a6f655a4f44392e23180c01000000000000000000000000000000000000000b17232e3a46525e6975818d99a4a99d9185796e62564a535f6b76828e9aa6a89c9185796d6155493e32261a0e0200000000000000000000000000000000000000000000000000000000000002111e2b3744515d6a7784919eaaa99c908376695d5043362a1d100013202c3946535f6c7986939694939291908f8e8d8c8b8a898d98a4a79a8f898a8b8c8d8e8f909192939495968a7d7063564a3d3023170a00101c2936434f5c697683909ca9b6b4a89d91857a6e63594f463f3b383737393d444d58636e7985919da9aea295897d7164584c3f33261a0e010006111c263039404548494949494f5c69768390908376695c4f494949494845403930261c11060006111c263039404548494949494f5c69768390908376695c4f494949494845403930261c11060013202c3946535f6c7986938c807366594c403326190d0013202c3946535f6c798693a09e9289847e7a75706b66615c56514c47423d38332e29241f1a15100b06010000000000000000000000000000000000000000000000000000000000000000000000000002070c11161c21262b30353a3f44494e53585d62676c71767b80858a95a19d908376695d5043362a1d1000101c2936434f5c697683909ca9b4aca4988d81766b61574e463f3b383738393c45515d6975828e9aa7afa295897c7063564a3d3024170a000000000000000000000000000000000008131e29333e49545f69747f8a959f978c82776c61564b41362b20150b000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6b655b4f44382c201408000000000000000b17232f3b47535e676c6c6c6c6c6c6c6c6c6960564a3e3225190c0013202c3946535f6c798693a0acacacaba7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a09386796d6053463a2d201307000005121e2a36424f5b67737f8b97a3aca195897d72675c51473e37322f2e2f31363d46505b66717d8894a0aca3978b8073675b4f43372b1e120600000000000000000000000000000000010102030201000007101a222b333b424a5259616870777f878e97a0a79f968e857b71675d52483d32261b100400000000000000020c162029323b434c545c646c737b828a9199a0a59d968e867e756c635a50463c31261c1105000000000000000000000000000000000000000000070f161d22262728282828282828282828282f3c4855626f7b8895a2a09386796c5f5346392c28282828282828282828282725211c150d05000000000000000000000a15202c36414c57616b758089929ca5ada9a0989088817b75706b6764615f5d5c5b5b5b5c5e5f6265686d71777d848b929ba3acaba29990867c72685e53493e33281d1206000000000000000000000000000000000000000006121e2935414d5965707c8894a0aba2968a7e72665a4f57636f7b87939faba3988c8074685c5045392d21150a0000000000000000000000000000000000000000000000000000000000000004121e2b3845515e6b7784919eaba99c8f8275695c4f4336291c100013202c3946535f6c79868a898887868584828281807e7d7c8996a2a6998c807d7e7f8081828384858687888a8a7d7063564a3d3023170a00101c2936434f5c697683909ca9b3aaa29f968b80756b6158504b4745444445494e565f69747f8a96a2aea99d9185796d6155483c3023170b00000b17222e38424b515555555555555c69768390908376695c555555555555514b42382e22170b000b17222e38424b515555555555555c69768390908376695c555555555555514b42382e22170b0013202c3946535f6c7986938c807366594c403326190d0013202c3946535f6c798693a09d9085807a75706b66615c57524d48433e39342f2a25201b16110c070200000000000000000000000000000000000000000000000000000000000000000000000000000004090e13181d22272c31363b40454a4f54595e63686d72777c818793a09d908376695d5043362a1d1000101c2936434f5c697683909ca9ada29b9893887d73696057504b4745444446484d57626d7985919daaaca093877a6e6154483b2f2215090000000000000000000000000000000000010c17222d37424d58636d78838e999e93887d73685d52473d32271c110600000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5a53493e33271b10040000000000000007131f2b37424c555c5f5f5f5f5f5f5f5f5f5d574e44392d2216090013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09386796d6053463a2d2013070000020e1a26323e4b57636e7a86929ea9a69a8f83786e63595049423e3c3b3c3e41474f58626d77838e99a5a99e92877b6f63574b3f33271b0e020000000000000000010508090a0b0c0c0d0e0f0f0f0d0a05000710192129313840484f565e656d747c858e97a0a8a0978d83796f64594e43382c2115090000000000000000040e172029313a424a525a6169707880878f969fa7a09890877e756b62584d43382d22170b000000000000000000000000000000000000000006101921282e32343434343434343434343434343c4855626f7b8895a2a09386796c5f53463934343434343434343434343434312d271f170d04000000000000000000040f1a25303a454f59636d77818a939ba3abaaa29a938c86817b7773706e6b6a69686868696a6c6e7174787d82888f959da4aca9a19990877e746a60564c41372c21160b000000000000000000000000000000000000000000010d1925313c4854606b77838f9ba7a69b8f83776b5f535c6874808c98a3aa9f93877b6f63584c4034281c11050000000000000000000000000000000000000000000000000000000000000006131f2c3945525f6c7885929faba89b8e8275685b4f4235281c0f0013202c3946535f6c797e7d7c7b7a7978777675747371707d8a96a3a79a8d817471727374757677797a7b7c7d7e7c7063564a3d3023170a00101c2936434f5c697683909ca9ada298929392877d736a625b57535251515255596068717b86919ca7b0a4998d8175695d5145392c20140800000f1b27333f4a545c616262626262626976839090837669626262626262615c544a3f33271b0f000f1b27333f4a545c616262626262626976839090837669626262626262615c544a3f33271b0f0013202c3946535f6c7986938c807366594c403326190d0013202c3946535f6c798693a0a197908b86817c77726d68635e59544f4a45403b36312c27221d18130e09040000000000000000000000000000000000000000000000000000000000000000000000050a0f14191e23282d32373c41464b50555a5f64696e73787d82878c9199a49d908376695d5043362a1d1000101c2936434f5c697683909ca9a79b908b908f857b7269625c57535151515254585f69737e8a95a1ada99d9184786b5f5246392d20140700000000000000000000000000000000000005101b26313b46515c67717c87929d9a8f84796f64594e43392e23180d02000000000000000000000000000000000a16212c3740484f525353535353535353524f4941372d22160b0000000000000000030e1a25303a434b50535353535353535353514c453c32281d11050013202c3946535f6c79869393939393939393939393939393939393939393939393939393939393939393939393939393939386796d6053463a2d2013070000000a16222e3a46525e6a75818d98a3aba0958a80756b625a544e4b4948484a4d5259616a747e89949faaa4988d81766a5e52473b2f23170b0000000000000000070d111416171818191a1b1c1c1c1916110b04070f171f262e363d454c535b636a737c858e98a2a99f958b81766b6054493d32261a0e020000000000000000050e171f283038404850575f666e757d858c959ea7a29990877d74695f544a3e33281c1105000000000000000000000000000000000000020d18222b33393e41414141414141414141414141414855626f7b8895a2a09386796c5f534641414141414141414141414141403d3831291f150b0000000000000000000009131e29333d48515b656e778189929aa1a9aca59e97928c8883807d7a7877757575757677797b7d8185898e949aa0a7ada69f978f877e756b62584e443a30251b1005000000000000000000000000000000000000000000000814202c37434f5b67737e8a96a2ab9f93877b6f6458616d7884909ca8a69a8e82766a5f53473b2f23180c00000000000000000000000000000000000000000000000000000000000000000714202d3a4653606d798693a0aca79a8e8174675b4e4134281b0e00121f2b3844515d687071706f6e6d6c6b6a6968676665717e8b97a4a89b8e817568666768696a6b6c6d6e6f7071716b6054483b2f22160900101c2936434f5c697683909ca9a99d918689948f857c746d6763605e5d5d5f61656b727a838d97a2ada99e93887c7065594d4135291c10040000121e2b3744505b666e6f6f6f6f6f6f6f7683909083766f6f6f6f6f6f6f6e665b5044372b1e1200121e2b3744505b666e6f6f6f6f6f6f6f7683909083766f6f6f6f6f6f6f6e665b5044372b1e120013202c3946535f6c7986938c807366594c403326190d0013202c3946535f6c798693a0a8a19c97928d88837e79746f6a65605b56514c47423d38332e29241f1a15100b0601000000000000000000000000000000000000000000000000000000000002070c11161b20252a2f34393e43484d52575c61666b70757a7f84898e93989da3a79d908376695d5043362a1d1000101c2936434f5c697683909ca9a5998c7f89948d847b746d6763605e5d5e5f61646a717a85909ba6b1a5998d8175685c5043372a1e11050000000000000000000000000000000000000009141f2a353f4a55606b75818b96a1968b80756b60554a3f342a1f14090000000000000000000000000000000005101a252e373e4346464646464646464646433e372f251b100500000000000000000009141e283139404446464646464646464645413b332a21160b000013202c3946535f6c79868686868686868686868686868686868686868686868686868686868686868686868686868686868686796d6053463a2d20130700000006121e2a36414d5964707b87929da8a69c91877d746c655f5a5755555557595e646b737c86909ba5a89d92877c7065594d42362a1e1206000000000000030b12181d212323242526272828292826221c150e05050d151c242b333a42495159616a737c86919ba6a79d92877c71655a4e42362a1e1206000000000000000000050d161e262e363e454d545c636b727a838c959ea8a29990867b71665b5044392d22160a00000000000000000000000000000000000008141f29343d444a4d4e4e4e4e4e4e4e4e4e4e4e4e4e4e55626f7b8895a2a09386796c5f534e4e4e4e4e4e4e4e4e4e4e4e4e4e4d49433b31271c1106000000000000000000020c17212b364049535c656e7780888f979ea4aba9a39d9894908c8987858382828282828485878a8d91959a9fa5aba8a29c948d857d756c635950463d32281e14090000000000000000000000000000000000000000000000030f1b27333f4a56626e7985919da9a4988c8074685c65717d8995a1ada195897d72665a4e42362b1f130700000000000000000000000000000000000000000000000000000000000000000815222e3b4854616e7a8794a1ada6998c8073665a4d4033271a0d00101c2834404b565f6465646362615f5e5d5c5b5a5965727f8c98a5a89c8f8275695c5a5b5c5d5e5f60616263646561594e43382c20130700101c2936434f5c697683909ca9a99c8f82838e978e867e78736f6d6b6a6a6b6d71767c848c959fa9ada3988d82766b6054483c3024180c00000013202c3946535f6c787c7c7c7c7c7c7c7c839090837c7c7c7c7c7c7c7c786c5f5346392c20130013202c3946535f6c787c7c7c7c7c7c7c7c839090837c7c7c7c7c7c7c7c786c5f5346392c20130013202c3946535f6c7986938c807366594c403326190d0013202c3946535f6c798692979ca1a6a39e99948f8a85807b76716c67625d58534e49443f3a35302b26211c17120d08030000000000000000000000000000000000000000000000000004090e13181d22272c31363b40454a4f54595e63686d72777c81868b90959a9fa4a5a09b96908376695d5043362a1d1000101d2a3643505d697683909da9a5988c7e828d968d857e78736f6c6b6a6b6b6d70757b838d97a1acaca095897d7165594c4034271b0f0200000000000000000000000000000000000000030d18232e39444e59646f7a858f9a9d92877c71665c51463b30261b10050000000000000000000000000000000009131c252c32373939393939393939393937332d251d130900000000000000000000020c161f282f34383939393939393939393835302921180f040000131f2c3946525f6b76797979797979797979797979797979797979797979797979797979797979797979797979797979797979766b5f5346392d201306000000010d1925313c48535f6a75818b96a1aba39990877e77706b676462616263666a6f757d858e98a2aba1968c81766a5f54483d31251a0e020000000000020c151d24292d2f303132333334353635322d2720170e04030a121a212830373f474f57616a747f8a95a0aba4998d82766a5f53473b2e22160a00000000000000000000040c141c242c333b424a525961697179838c96a0aaa2978d82776c61554a3e32261a0e0200000000000000000000000000000000000d1925303b454f565a5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b626f7b8895a2a09386796c5f5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b59554d43392e22160a00000000000000000000050f1a242e37414a535c656d767e858c93999fa5aaa9a4a09c98969391908f8e8e8f8f90929496999da1a5aaa8a39d97918a837b736b625a51473e342b21170c020000000000000000000000000000000000000000000000000a16222e3a45515d6975818c98a4a89c9084786c606a76828e9aa6a89c9085796d6155493d32261a0e0200000000000000000000000000000000000000000000000000000000000000000a1623303c4956626f7c8895a2aea5988b7e7265584c3f3226190c000c18242f3a444d54585857565554535251504f4d5a6673808d99a6a99d9083766a5d504e4f505152535556575858554f473d32271b0f0300101d2936434f5c697683909ca9a89c8f827d8892989089847f7b79787777787a7d82878e969ea7aea59b91867b70655a4f43372c20140800000013202c3946535f6c798689898989898989899292898989898989898986796c5f5346392c20130013202c3946535f6c798689898989898989899292898989898989898986796c5f5346392c20130013202c3946535f6c7986938c807366594c403326190d0013202c3946535f6c7982878b90959a9fa4a49f9a95908b86827c77726d68635e59544f4a45403b36312c27221d18130e0904000000000000000000000000000000000000000000050a0f14191f23282d32383c42474b51555b6064696e73787d83888d92979ca1a6a39e99948f8a858176695d5043362a1d1000101d2a3643505d697683909daaa5988b7e7b8690979089847f7b79777777787a7d81868d959fa8afa59a8f84786c6155493c3024180b00000000000000000000000000000000000000000007121c27323d48525d68737e89939e998e83786d62584d42372c21170c01000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2a27211b130b010000000000000000000000040d161d23282b2c2c2c2c2c2c2c2c2c2c29241f170f06000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b645a4f43372b1e1205000000000914202b37424e59646f7a858f99a3aba2999088827b7773706f6e6f7072767a80878f97a0aaa3998f857a6f64594e43372c2015090000000000000a141e272e35393c3d3e3e3f40414242423e39312920150b0000080f171e262d353d454f58636d78848f9aa6aa9e93877b6f63574b3e3225190d0000000000000000000000020a121a2229313840474f575f67717a848e99a4a99f94897d72665a4f43372b1e12060000000000000000000000000000000000101d2935414d576167676767676767676767676767676767676f7b8895a2a09386796c67676767676767676767676767676767665f554a3f33261a0e000000000000000000000008121c252f38414a535c646c737a82888e94999ea2a6aaa8a5a2a09e9d9c9b9b9b9c9d9ea0a3a6a9a9a5a19c97928c867f787169615950483f352c22190f050000000000000000000000000000000000000000000000000006111d2935414c5864707c88939faba195897d71656e7a86929eaaa3978c8074685c5045392d2115090000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5764717d8a97a3b0a3968a7d7064574a3e3124180b0007121d28323b42484b4b4a49484746454443424e5b6774818e9aa7aa9e9184776b5e5145434445464748494a4b4b49443d352b21160a0000101d2a3643505d697683909da9a89b8e8276808b949b948f8b88868484848586898d9299a0a8aca49c93897f746a5f54493d32271b0f0300000013202c3946535f6c798693969494949494949494949494949494969386796c5f5346392c20130013202c3946535f6c798693949494949494949999949494949494949386796c5f5346392c20130013202c3946535f6c7986938c807366594c403326190d00121f2b3844515d6871767b80858a8f93989da2a6a19c97928d88837e79746f6a65605b56514c47423d38332e29241f1a15100b060100000000000000000000000000000002070c11161b20252a2f34393e43484d52575c61666b70757a8084898e93989da2a6a19c97928d88847e7a756f665a4e4235291c0f00101d2a3743505d6a7683909daaa4988b7e747e88929b958f8b88868484848587898d91989fa8afa79d93897e73675c5044382c201408000000000000000000000000000000000000000000000b16202b36414c56616c77828d979f948a7f74695e53493e33281d130800000000000000000000000000000000010910161a1e1f2020202020202020201e1b1610090100000000000000000000000000040b12181c1f2020202020202020201f1d19130d06000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a52493e33271b0f0200000000030f1a26313c48535d68737d87919aa3aba29a938d8783807d7b7b7b7c7e82868c9299a1a9a39a91877d73685e53483d31261b0f04000000000006111c2630394046494a4a4b4c4d4e4f4f4e4a433b31271c11050000050c141b232b333d46515c67727e8a96a2aea3978b7f73665a4e4135281c0f030000000000000000000000000810171f262e353d454d555f68727c87929da9a59a8e83776b5f53473b2e2216090000000000000000000000000000000000121f2c3845515d697274747474747474747474747474747474747b8895a2a0938679747474747474747474747474747474747471675b4f4236291c100000000000000000000000000a131d262f38414a525a616970767d83888d92969a9ea1a3a5a7a8a9a8a8a8a8a9a9a8a7a5a29f9c9995908c86817b746d665f574f473e362d231a10070000000000000000000000000000000000000000000000000000010d1824303c48535f6b77838f9aa6a5998d817569727e8a97a3aa9f93877b6f63574c4034281c10050000000000000000000000000000000000000000000000000000000000000000000d1a2733404c5966727f8c98a5aea195887b6f6255493c2f23160a00010c16202931373c3e3f3d3c3b3a39383736424f5b6875828e9ba8ab9f9285786c5f5245393738393a3b3c3d3e3f3d39332b23190f040000111d2a3744505d6a7683909daaa79a8e817478828c959d9b979592919190919396999ea4aaa8a19a928a81776d63584e43382c21160a0000000013202c3946535f6c7986938d87878787878787878787878787878d9386796c5f5346392c20130013202c3946535f6c798687878787878787889191888787878787878786796c5f5346392c20130013202c3946535f6c7986938c807366594c403326190d00101c2834404c565f656a6f74797e83888d92979ba0a5a39e99948f8a85807b76716c67625d58534e49443f3a35302b26211c17120d0803000000000000000000000004090e13181d22272c31363b40454a4f54595e63686d72777c81868b90959a9fa4a49f9a95908c87827d78736e69645d54493e3226190d00111d2a3744505d6a7784909daaa4978a7d71768089929a9b979492919191929395999da3a9aaa49d958c82776c61564b3f34281c100400000000000000000000000000000000000000000000040f1a242f3a45505b65707b86919b9b90867b70655a4f453a2f24190e040000000000000000000000000000000000050a0e1113131313131313131313110f0a050000000000000000000000000000000001070c101213131313131313131312100d080200000000000a16212c3740484f52535353535353535353535353535353535353535353535353535353535353535353535353535353535353524f4940372c21160a0000000000000915202b36414c56616b757f889199a1a8a59e98938f8c8a888888898b8e92979da3a9a29a91897f756b61574c41362b20150a0000000000000b17222e38424b5155565758595a5a5b5c5a554d43392d22160a00000002091119212b353f4a56616d7986929eaba79b8f8276695d5044372a1e110500000000000000000000000000060d151c242b333b434d56606b75818c98a4ab9f93877b6f63574a3e3125180c000000000000000000000000000000000013202c3946535f6c798181818181818181818181818181818181818995a2a0938681818181818181818181818181818181818176695d5043362a1d10000000000000000000000000010b141d262f38404850575e656b72777d82868a8e919497999a9c9d9e9e9e9e9d9d9b9a989693908d8984807b756f69635c554d453d352c241b11080000000000000000000000000000000000000000000000000000000008141f2b37434f5a66727e8a96a1a99d9185796d76838f9ba7a69a8e82766a5f53473b2f23180c00000000000000000000000000000000000000000000000000000000000000000003101c2935424e5b6874818d9aa7ac9f9386796d6054473a2e2115080000040e171f262c30323231302f2e2d2c2b3643505c6976838f9ca9aca09386796d6053463a2d2b2c2d2e2f313232302d2821191007000000111e2a3744515d6a7784909da2a29a8d8073707a838b92999ea19f9e9d9d9ea0a2a5a8a5a19c96908980786e655b51473c31261b10040000000013202c3946535f6c7986938b7e7a7a7a7a7a7a7a7a7a7a7a7a7e8b9386796c5f5346392c20130013202c3946525f6b777a7a7a7a7a7a7a7a839090837a7a7a7a7a7a7a7a776b5f5246392c20130013202c3946535f6c7986938c807366594c403326190d000c18242f3a444d54595e63686d72777c81868b90959a9fa3a5a09b96918c87827c77736d69635e5a54504a45403b36312c27221d18130e080200000000000000030a10151a1f24292e33383d42474c51565b60656a6f74797e83888d92979ca1a6a29d98948f8a85807b76716c67625d58534b42382d21160a00111e2b3744515d6a7784919ea2a2968a7d706d7680888f969ca19f9e9e9e9ea0a2a5a9a6a39f99938b837970655b50453a2e23170b00000000000000000000000000000000000000000000000008131e29333e49545f69747f8a959f978c82776c61564b40362b20150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101a252e373e434646464646464646464646464646464646464646464646464646464646464646464646464646464646464646433e372e251b1005000000000000030f1a252f3a454f59636d767f878f979da3a9a49f9b989695959596989a9ea3a8a49e9790887f766d63594f453a30251a0f040000000000000f1b27333f4a545c626364656566676869665f554a3e32261a0d0100000000070f19232e3945515d6a76838f9ca8aa9e9185786b5f5245392c1f13060000000000000000000000000000030a12192129313a444e5964707b8793a0aca4978b7e7266594d4034271b0e010000000000000000000000000000000013202c3946535f6c79868e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e919aa5a3988f8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8376695d5043362a1d1000000000000000000000000000020b141d262e363e454c535a60666c71767a7e8285888a8c8e8f909191919191908f8d8b898784817c78746f6a645e58514a433b332b231a12090000000000000000000000000000000000000000000000000000000000030f1b26323e4a56616d7985919ca8a295897d717a87939faba195897d71665a4e42362a1f130700000000000000000000000000000000000000000000000000000000000000000006121f2b3844515d6a7683909ca9aa9d9184776b5e5245392c1f1306000000050d141b2023252524232221201f2b3744515d6a7784909daaada094877a6d6154473b2e212021222324252524211c160f0700000000121e2b3844515e6b778491969696968c7f7368707981878d93979a9c9e9fa0a09f9e9c9995918b857e766e665d53493f352a20150a000000000013202c3946535f6c7986938b7e716d6d6d6d6d6d6d6d6d6d717e8b9386796c5f5346392c201300111e2a37434f5a656c6d6d6d6d6d6d6d7683909083766d6d6d6d6d6d6d6c655a4f43372a1e110013202c3946535f6c7986938c807366594c403326190d0007131e28323b43494e52575c61666b70757a7f84898e93989da2a6a19c97928d88837e79746f6a65605b56514c47423d38332e29241f1a130c030000000000050d151b20252a2f34393e43484d52575c61666b70757a80858a8e94999ea3a5a09c97928d88837e79746f6a65605b56514c47413930261b100500121e2b3845515e6b77849195959595897c6f646d767e858b9095989b9d9f9f9f9f9e9c9a97938e88817970675e54493f34281d1206000000000000000000000000000000000000000000000000010c17222d37424d58636d78838e999e93887d73685d52473c32271c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306090b0d0e0e0f0f0e0d0c0a080603000000000000000000000000000009131c252c3237393939393939393939393939393939393939393939393939393939393939393939393939393939393939393937322c251c1309000000000000000008131e28333d47515b646d757d858c92989da1a4a7a5a3a2a2a2a2a4a7a5a29d99938c857e766d645b51473d33291e130800000000000000121e2b3744505b666e707171727374757571665a4e4235281c0f03000000000007111d2935424e5b6774818e9aa7aca09386796d6053473a2d20140700000000000000000000000000000000070f171f28323d48535f6b7783909ca2a29a8e8275685c4f4236291c10030000000000000000000000000000000013202c3946535f6c7986939b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9ca2abaaa19c9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b908376695d5043362a1d100000000000000000000000000000020b141c242c343b42494f555b60656a6e7275787b7d8081828384848584848382817e7d7a7774706c68635e59534d464038312922191108000000000000000000000000000000000000000000000000000000000000000a16222d3945515d6874808c98a3a69a8d81757e8b97a3a89c9084786d6155493d32261a0e020000000000000000000000000000000000000000000000000000000000000000000815212e3a4753606c7985929eaba79b8e8275695c5043362a1d110400000000030a0f1417181817161514131f2c3845525e6b7885919eabaea195887b6e6255483c2f22151415161718181715110b050000000000131f2c3945525f6b78858989898989897e7165676f767c82878a8d909192939392918f8c8985807a736c655c544a41372d23190e03000000000013202c3946535f6c7986938b7e7165606060606060606065717e8b9386796c5f5346392c2013000f1b27333e49535b606060606060606976839090837669606060606060605b53493e33271b0f0013202c3946535f6c7986938c807366594c403326190d00010c16202931383d42474c51565b5f64696e73787d82878c91969ba0a5a39e99948f8a85807b76716c67625d58534e49443f3a35302b251e150c02000000050e171f262c31363b40454a4f54595e63686d72777c81868b90959a9fa4a39f9a95908b86817c77726d68635e59544f4b46413c362f271e140a0000131f2c3946525f6c78858888888888887b6f62646c737a8085898c8f919292939291908d8a87827c766f675e554c42382d22170c010000000000000000000000000000000000000000000000000005101b26313b46515c67717c87929d9a8f84796e64594e43382e23180d020000000000000000000000000000000004080b0c0c0b0804000000000000000000000000000000000105090d10131517191a1b1b1b1b1a191715120f0b07020000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a27211b130a010000000000000000010c17212b353f49525b636b737a81878c9195989b9d9e9f9f9f9e9d9b9995928d88827b746c645b52493f362c21170c020000000000000013202c3946535f6c787c7d7e7f8081828276695d5044372b1e12060000000000000d1a2734404d5a6773808d9aa6ada194877a6d6154473a2e2114070000000000000000000000000000000000050d16202b37434f5b6874818d959595959083776a5d5044372a1e11040000000000000000000000000000000013202c3946535f6c798693a0a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a7abb3b1aaa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69d908376695d5043362a1d10000000000000000000000000000000020a121a222930373e444a4f54595e6266696c6f7173747677777778777776757472706e6b6864605c57524d47423b352e271f181007000000000000000000000000000000000000000000000000000000000000000005111d2934404c58646f7b87939faa9d918579828e9ba7a3978c8074685c5044392d211509000000000000000000000000000000000000000000000000000000000000000000000b1824313d4956626f7b8894a1ada5988c7f73665a4d4134281b0f0200000000000003070a0c0c0b0a090813202c3946535f6c7986929facafa296897c6f6356493d3023160a08090a0b0c0b08050000000000000013202c3946535f6c787c7c7c7c7c7c7c7b70635d646b71767a7e818385868686868482807d79746f69625a534a42382f251b110700000000000013202c3946535f6c7986938b7e7165585353535353535865717e8b9386796c5f5346392c2013000a16212d3741494f5353535353535c69768390908376695c5353535353534f4941372d21160a0013202c3946535f6c7986938c807366594c403326190d0000050e171f262c31363b40454a4f54595e63676c71767b80858a8f94999ea3a5a09b96918c87827d78736e69645f5a55504b46413c362f271e140a0000010c16202931383d42474c51565b60656a6f74797e83888d92979ca1a6a29d98938e89847f7a75706b66615c57524e49443f3a35302b251e150c02000013202c3946525f6c777b7b7b7b7b7b7b796d615a61686e74787c808284858686868483817e7b76716b645d554c433a30261b110600000000000000000000000000000000000000000000000000000009141f2a353f4a55606b75818b96a1968b80756a60554a3f34291f14090000000000000000000000000000030a10141719191815100a0400000000000000000000000105090d1115191c1f2224262728282828272524211f1b17130e090300000000000000000000010910161a1e1f2020202020202020202020202020202020202020202020202020202020202020202020202020202020201f1e1b1610090100000000000000000000050f19232d374049515a61696f767b8185898c8e909192929292908f8c8986817c767069625a524940372d241a0f050000000000000000131f2c3945525f6b78858a8b8c8d8d8e85786c5f53473a2e23170e0704030304060e1a2734404d5a6773818d9aa6aea194877a6d6154473a2e211407000000000000000000000000000000000000040f1a2733404c5966727f88888888888884776b5e5145382b1e12050000000000000000000000000000000013202c3946535f6c798693999999999999999999999999999999999aa1aaa89f9a99999999999999999999999999999999908376695d5043362a1d1000000000000000000000000000000000000810171f262c36414b545b5e5e5e5e5e5f62646668696a6a6b6b6b6a6a69676663615e5e5e5e5e5e5c554c42372b231c150d06000000000000000000000000000000000000000000000000000000000000000000000c1824303b47535f6b76828e9aa6a195897d86929faa9e93877b6f63574c4034281c1005000000000000000000000000000000000000000000000000000000000000000000020f1b2734404c5965727e8b97a3aea295897c7064574b3e3225190c0000000000000000000000000000000714212d3a4753606d7a8693a0adb0a3978a7d7064574a3d3124170b000000000000000000000000000000121e2b3744505b666e6f6f6f6f6f6f6f6f695f545960656a6e7274767879797979787673706d68635d57504941382f261d13090000000000000013202c3946535f6c7986938b7e7165584b474747474b5865717e8b9386796c5f5346392c20130005101b252f373e4446474747474f5c69768390908376695c4f4747474746443e372f251b10050013202c3946535f6c7986938c807366594c403326190d000000050d151b20252a2f34393e43484d52575c61666b6f74797e83888d92979ca1a6a29c97928d89847e79746f6a65605b56514c47413930261b10050007131e28323b43494e53585d62676c71767b80858a8f94999ea3a5a09b96918c87827d78736e69645f5b56514c47423d38332e29241f1a130c03000000121e2b37434f5b666d6e6e6e6e6e6e6e6d675c51575d63686c7073767778797979787674726e6a66605a534b433a31281e140a00000000000000000000000000000000000000000000000000000000030d18232e39444e59646f7a848f9a9c92877c71665b51463b30251b1005000000000000000000000000050e151b2024262624211c150e07010000000000000105090d1116191d2125292c2e313234353535343332302e2b27231f1a140e080100000000000000000000050a0e111313131313131313131313131313131313131313131313131313131313131313131313131313131313131313110e0a050000000000000000000000000007111b242e373f484f575e646a7074797c7f828385868686858482807d7975706b655e57504840372e251b1208000000000000000000111e2a3744505d6976828f9898999a94877b6f63574b3f34292018141110101113171f2a36424f5b6874818e9ba7ada094877a6d6154473a2e211407000000000000000000000000000000000000000c1825323f4b5865717b7b7b7b7b7b7b7b766a5e5145382b1e12050000000000000000000000000000000013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8f99a4a2978e8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8376695d5043362a1d10000000000000000000000000000000000000060d16222f3b47535d666b6b6b6b6b6a645e595b5c5d5e5e5e5e5d5d5c5b595d646a6b6b6b6b6b675e53483c2f23160a03000000000000000000000000000000000000000000000000000000000000000000000007131f2b37424e5a66727d8995a1a5998d818a96a3a59a8e82766a5e53473b2f23170c0000000000000000000000000000000000000000000000000000000000000000000006121f2b3743505c6875818d9aa6ab9f9286796d6154483b2f23160a0000000000000000000000000000000815222e3b4855616e7b8894a1acaca4988b7e7165584b3e3225180c0000000000000000000000000000000f1b27333f4a545c6162626262626262625e574d4e545a5e6265686a6b6c6c6c6c6b696764615c58524c453e372f261d140b010000000000000013202c3946535f6c7986938b7e7165584b3e3a3a3e4b5865717e8b9386796c5f5346392c2013000009131d252d33373a3a3a3a434f5c69768390908376695c4f433a3a3a3a37332d251d1309000013202c3946535f6c7986938c807366594c403326190d00000000030a10151a1f23282d32373c41464b50555a5f64696e73777c81868b90959a9fa4a39e99948f8a85807b76716c67625d58534b42382d21160a000c18242f3a444d54595e63686d72777c81868b90959a9fa4a39e99948f8a85807b76716c67635e59544f4a45403b36312c27221d18140e0802000000000f1b27333f4a545c6161616161616161615d554b4c52575c606467696b6c6c6c6c6b6a6865625e5a554f48413931281f160c02000000000000000000000000000000000000000000000000000000000007121c27323d48525d68737e89939e988e83786d62574d42372c21160c0100000000000000000000050e1720272c303333312d272019120c07050405070a0d1115191d22262a2d3135383b3d3f4141424241403f3d3a37342f2a252019130c0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121c252d363e454c53595f64686c707375777879797978777573706d69655f5a544d463e362e251c1309000000000000000000000f1c2835414e5a6773808c98a5a6a3978b7f73675c50453b322a24201e1d1c1d1f2328313b46525e6a7783909ca9ac9f9286796c605346392d201307000000000000000000000000000000000000000a1724303c495560696e6e6e6e6e6e6e6e6d655a4e4236291d10040000000000000000000000000000000013202c3946535f6c797f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f8895a2a093867f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f76695d5043362a1d10000000000000000000000000000000000000000b1724313d4a57636f7878787878766f69625b5550515151515150535a61686f7678787878787064574b3e3225180b000000000000000000000000000000000000000000000000000000000000000000000000020e1a26323e4955616d7884909ca89d928c909ba6a195897d71655a4e42362a1f1307000000000000000000000000000000000000000000000000000000000000000000000a16222e3b47535f6c7884919da9a79b8f83766a5e5145382c2013070000000000000000000000000000000916232f3c4955626f7b8895a0a0a0a0988c7f7265594c3f3326190d0000000000000000000000000000000b17222e38424b51555555555555555555534d4543494e5256595b5d5e5f5f5f5f5e5d5b5854504c47413b342d251d140b02000000000000000013202c3946535f6c7986938b7e7165584b3e3d3d3e4b5865717e8b9386796c5f5346392c201300000b151f282f363a3d3d3d3d434f5c69768390908376695c4f43362d2d2d2b27221b130b01000013202c3946535f6c7986938c807366594c403326190d00000000000004090e13181d22272b30353a3f44494e53585d62676c71767a8084898e93989da2a5a09b96918c87827d78736e69645d54493e3226190d00101c2834404c565f656a6f74797e83888d92979ca1a6a19c97928d88837e79746f6b66615c57524d48433e39342f2a25201c17120d08030000000000000b17222d38424a51545555555555555554514b4341464c5054575a5c5e5f5f5f5f5e5d5b5956524e49443d372f271f160d04000000000000000000000000000000000000000000000000000000000000000b16202b36414c56616c77828d979f948a7e74695e53483e33281d1208000000000000000000010c17202931383d3f3f3d38322a241d181411111214171a1d21252a2e32363a3d4144474a4c4d4e4e4e4e4d4b494743403b36312b241e1710080000000000000000000000000000000000000000000000000000000003060707070707070707050300000000000000000000000000000000000000000000000000000000000000000000000a131b242c333b42484e53585c606366686a6b6c6c6c6b6a696764615d59544e48423b342c241c130a01000000000000000000000d1926323f4b5764707c8995a1ada79b8f84786d62574d443b35302c2a29292a2c2f333a434d57636e7a87939fabaa9d9184776b5e5245382c1f1206000000000000000000000000000000000000000814202c38434e575e6161616161616161605b53493d32261a0e0100000000000000000000000000000000121f2b3844515d687172727272727272727272727272727272727b8895a2a093867972727272727272727272727272727272726f665a4e4235291c0f000000000000000000000000000000000000000b1824313e4b5764717e85858585817a736d666059534c464a50575e656c737981858585857e7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000915212d3944505c6874808b97a3a49c999ba2a89c9084786d6155493d31261a0e02000000000000000000000000000000000000000000000000000000000000000000020e1a26323e4b57636f7b8894a0aca4988b7f73675a4e4235291d10040000000000000000000000000000000a1724303d4a5663707d899393939393938d8073675a4d4034271a0e01000000000000000000000000000006111c263039404548494949494949494947423b383d4246494c4f50525353535252504e4b4844403b363029221b130b0200000000000000000013202c3946535f6c7986938b7e7165584b4a4a4a4a4b5865717e8b9386796c5f5346392c20130006121d27313a41474a4a4a4a4a4f5c69768390908376695c4f43362920201f1b1610090100000013202c3946535f6c7986938c807366594c403326190d000000000000000002070c11161b20252a2f33383d42474c51565b60656a6f74797d83888c91969ba0a5a29d98938e89847e7a756f665a4e4235291c0f00121f2b3844515d6871767b80858a8f94999ea3a49f9a95908b86817c77736e69645f5a55504b46413c37322d28241f1a15100b0601000000000000000006111c262f383f45484848484848484848454039353b4044484b4e50515253535252504f4c4a46423d38322c251d150d040000000000000000000000000000000000000000000000000000000000000000040f1a242f3a45505a65707b86919b9b90857a70655a4f443a2f24190e03000000000000000007131e29323b43494c4c49433c352f2924201e1e1f202326292d31363a3e42464a4d515456585a5b5b5b5a59585653504c47423c362f28211a110800000000000000000000000000000000000000000000000000060c10121414141414141414120f0b050000000000000000000000000000000000000000000000000000000000000000000109121a222930373d42484c5054575a5c5d5e5f5f5f5f5e5c5a5855514d48433d373129221a120a0100000000000000000000000a16232f3b4854606c7985919da8aca095897e73695f564d46403c3937363637383b3f454c555e6974808b97a3afa79a8e8275695c5043362a1d11040000000000000000000000000000000000000006121d27323c454d53555555555555555554504941372c21150a0000000000000000000000000000000000101c2834404c565f65656565656565656565656565656565656f7b8895a2a09386796c65656565656565656565656565656565645d54493e3226190d000000000000000000000000000000000000000b1724313e4a57636f79838c92928c857e78716b645e5751545b626970777d848b92928d837a7064584b3e3225180c0000000000000000000000000000000000000000000000000000000000000000000000000005101c2834404b57636f7b87929ea7a7a6a7a7a3978b8074685c5044392d2115090000000000000000000000000000000000000000000000000000000000000000000007121e2a36424e5b67737f8b97a4aca094887b6f63574b3e3226190d010000000000000000000000000000000b1824313e4b5764717d86868686868686868174675b4e4135281b0e020000000000000000000000000000000a141e272e35393c3c3c3c3c3c3c3c3c3a36312c31363a3d40424445464646464543413f3c38342f2a241e171009010000000000000000000013202c3946535f6c7986938b7e7165585757575757575865717e8b9386796c5f5346392c2013000b17232e39434c525657575757575c69768390908376695c4f4336291c14120f0b05000000000013202c3946535f6c7986938c807366594c403326190d0000000000000000000000050a0f14191e23282d32373b40454a4f54595e63686d72777c81868b9094999ea3a39e99948f8a858176695d5043362a1d100013202c3946535f6c7982878c91969ba0a5a29d98938e8985807a76716c67625d58534e49443f3a35302b27221d18130e09040000000000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b39352f2a2f34383c3f41434545464646454442403d3a36322d27211a130b030000000000000000000000000000000000000000000000000000000000000000000008131e28333e49545f69747f8a959f978c81766c61564b40362b20150a00000000000000000c18242f3a444d545859554e47403a34302d2b2a2b2d2f3236393d42464a4e5256595d60636567676868676664625f5c58534d47413a332c231a100500000000000000000000000000000000000000000000030b12171c1f20202020202020201f1b161009010000000000000000000000000000000000000000000000000000000000000000000810171e252b31373c4044484b4d4f51525253525251504e4b4845413c37322c261f1810080000000000000000000000000007131f2c3844505c6874808c98a3afa69b90857b71685f58514c48454443434345474b50565e67707a85909ca7afa3978b7e7266594d4134281b0f02000000000000000000000000000000000000000b17232e39434c5358585858585858585858554f463c32261b0f03000000000000000000000000000000000c18242f3a444d5458595959595959595959595959595959626f7b8895a2a09386796c5f59595959595959595959595959595958534b42382d21160a000000000000000000000000000000000000000916222f3b47535e677079838c9597908a837c766f69625b5f666d747a81888f96978d847a71685e53483c2f23170a00000000000000000000000000000000000000000000000000000000000000000000000000000c17232f3b47525e6a76828e999a9a9a9a9a9a92877b6f63574b4034281c1004000000000000000000000000000000000000000000000000000000000000000000000b17232f3b47535f6b77838f9ba7a89c9084786b5f53473b2f22160a000000000000000000000000000000000b1724313e4a5763707979797979797979797973675a4e4135281b0e02000000000000000000000000000000020c151d24292d2f2f2f2f2f2f2f2f2f2e2a2521262a2e31333637383939393938373532302c28241f19130d0600000000000000000000000013202c3946535f6c7986938b7e7165636363636363636365717e8b9386796c5f5346392c2013000f1c28343f4b555d6363636363636369768390908376695c4f4336291c1005030000000000000013202c3946535f6c79868686807366594c403326190d0000000000000000000000000003080d12171c21262b30353a3f43484d52575c61666b70757a7f84898e93989ca1a5a09b96908376695d5043362a1d100013202c3946535f6c798692979ca1a5a09b96918c88837d79746f6a65605b56514c47423d38332f2a25201b16110c07020000000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2d29241e23282c2f323536383939393938373533312e2a26211c160f09010000000000000000000000000000000000000000000000000000000000000000000000010c17222d37424d58636d78838e999e93887d72685d52473c31271c110600000000000000101c2935404c565f65656058524b45403c393837383a3c3f4246494e52565a5e6266696d6f72737475747473716f6c68635e59524c453d352c22170c010000000000000000000000000000000000000000030c151c23282b2d2d2d2d2d2d2d2d2b27221b130b01000000000000000000000000000000000000000000000000000000000000000000050d141a20262b3034383b3e41424445464646454443413f3c3935302c26211b140d06000000000000000000000000000003101c2834404c58646f7b87929da8aca1978d837a7169635d585452504f4f505154575c61687079828c97a2ada99e92867a6e62564a3d3125180c00000000000000000000000000000000000000000f1b28343f4b555e6465656565656565656560584e43372b1f13060000000000000000000000000000000007131e28323b43484b4c4c4c4c4c4c4c4c4c4c4c4c4c4c55626f7b8895a2a09386796c5f534c4c4c4c4c4c4c4c4c4c4c4c4c4c4b47413930261b10050000000000000000000000000000000000000006131f2b36414c555e67717a838c959b948e87817a746d666a71787e858c939a978e857b72685f564c42372b1f1307000000000000000000000000000000000000000000000000000000000000000000000000000007131e2a36424e5965717d898d8d8d8d8d8d8d8d82766a5e52473b2f23170c0000000000000000000000000000000000000000000000000000000000000000000005101c28333f4b57636f7b87939faba3978b8073675b4f43372b1f1206000000000000000000000000000000000916222f3b47535e676c6c6c6c6c6c6c6c6c6c6961564b3f3226190d0000000000000000000000000000000000030b12181d20222222222222222222211e1a151a1e212427292a2c2c2c2c2c2b2a282623201c18130e08020000000000000000000000000013202c3946535f6c7986938b7e7170707070707070707070717e8b9386796c5f5346392c201300121e2b3844505c676f70707070707070768390908376695c4f4336291c10030000000000000000131f2c3946525f6b76797979797165584c3f3326190c00000000000000000000000000000001060b10151a1f24292e33383d42474b50555a5f64696e73787d82878c91969ba0a49d908376695d5043362a1d100013202c3946535f6c798693a0a39e9994908b86817c77726d68635e59544f4a45403b37322d28231e19140f0a05000000000000000000000000000000000000020a11181c20212222222222222222201d1813181c202326282a2b2c2c2c2c2b2a292724211e1a15100b04000000000000000000000000000000000000000000000000000000000000000000000000000005101b26313b46515c67717c87929d9a8f84796e63594e43382d23180d02000000000000121f2b3844515d6871716a635c56514c484644444546484b4e52565a5e62666a6e7276797c7e8081828181807e7b78746f6a645d564f473e33281d110500000000000000000000000000000000000000010b151e272e34383a3a3a3a3a3a3a3a37332d251d13090000000000000000000000000000000000000000000000000000000000000000000002090f151a1f24282c2f323436373839393939383634322f2c2925201b150f0903000000000000000000000000000000000c1824303b47535f6a75818c97a1aca99f958c837b746e6864615e5d5c5c5d5e6063676c737a828b949ea9aea3988d81766a5e52463a2e2115090000000000000000000000000000000000000000111e2b3744505c67707272727272727272716a6054473b2e22150900000000000000000000000000000000010c16202931383c3f3f3f3f3f3f3f3f3f3f3f3f3f3f4855626f7b8895a2a09386796c5f53463f3f3f3f3f3f3f3f3f3f3f3f3f3e3b362f271e140a0000000000000000000000000000000000000000020e1a25303a434c555f68717a838c959f99928c857e7871757c838990979e988e857c726960564d443a30261a0f030000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25313d4955606c788181818181818181817d71655a4e42362a1e1307000000000000000000000000000000000000000000000000000000000000000000000a16212d3844505c6873808b97a3aa9f93877b6f63574b3f33271b0f030000000000000000000000000000000007131f2b37424c555c5f5f5f5f5f5f5f5f5f5f5e584f453a2e22160a00000000000000000000000000000000000000070d111416161616161616161615120e090e1115181a1c1e1f202020201f1d1c1a1714100c070200000000000000000000000000000013202c3946535f6c7986938b7e7d7d7d7d7d7d7d7d7d7d7d7d7e8b9386796c5f5346392c20130013202c3946535f6c787d7d7d7d7d7d7d7d8390908376695c4f4336291c10030000000000000000111e2a37434f5a646b6c6c6c6c685f54493d3024170b00000000000000000000000000000000000004090e13181d22272c31363b40454a4f54585d62676c71767b80858a8f94999d908376695d5043362a1d100013202c3946535f6c7986939c98938e89847f7a75706b66615c57524d48433f3a35302b26211c17120d080300000000000000000000000000000000000000000000060c101315151515151515151513110c070c101317191b1d1e1f20201f1f1e1c1a1815120e0904000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2a353f4a55606b75818b96a0968b80756a5f554a3f34291e140900000000000013202c3946535f6c797c756e68625c5855525151515355585b5e62666a6e72767a7e8285888b8d8e8e8e8d8c8a8884807b756f6861595045392e2215090000000000000000000000000000000000000007121d2730393f444747474747474746443e372f251b1005000000000000000000000000000000000000000000000000000000000000000000000004090f13181c1f222527292b2c2c2c2c2c2b2a282623201c19140f0a0400000000000000000000000000000000000007131f2b37424e59646f7a85909aa4aea79e958d867f7974706d6b6a6969696b6d6f73787e848c949da6b0a69c92877b7065594d42362a1e12050000000000000000000000000000000000000000121f2c3845525f6b787e7e7e7e7e7e7e7e7c6f6356493c302316090000000000000000000000000000000000050e171f262c30323232323232323232323232323c4855626f7b8895a2a09386796c5f534639323232323232323232323232322f2b251e150c0200000000000000000000000000000000000000000008131e28313a434d565f68717a838d969f9d97908a837c80868d949ba2988f867c736a60574e443b32281e1409000000000000000000000000000000000000000000000000000000000000000000000000000000000915212c3844505c6771737373737373737373736c6155493d31251a0e0200000000000000000000000000000000000000000000000000000000000000000004101b26323e4955616c7884909ca8a59a8e82766b5f53473b2f23170b0000000000000000000000000000000000030e1a25303a434b5053535353535353535353514d463d33281d12060000000000000000000000000000000000000000010507090909090909090909080602000205080b0e1011121313131312110f0d0a070400000000000000000000000000000000000013202c3946535f6c7986938f8a8a8a8a8a8a8a8a8a8a8a8a8a8a8f9386796c5f5346392c20130013202c3946535f6c79868a8a8a8a8a8a8a8b93908376695c4f4336291c100300000000000000000e1a26323e48525a5f5f5f5f5f5d564d43382c201408000000000000000000000000000000000000000003080c11161b20252a2f34393e43484d52575c60656a6f74797e83888d92908376695d5043362a1d100013202c3946535f6c798693918c87827d78736e69645f5a55504b47423d38332e29241f1a15100b060100000000000000000000000000000000000000000000000000000407080808080808080808070401000004070a0d0f1012121313131211100e0b09050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d18232e39444e59646f7a848f9a9c91877c71665b50463b30251a1005000000000013202c3946535f6c79868079736d6864615f5e5d5e5f6164676a6e72767a7e82868a8e929597999b9b9b9a999794908c86807a736b61564a3e3125180b000000000000000000000000000000000000010d18242f39424a5053535353535353534f4941372d21160a0000000000000000000000000000000000000000000000000000000000000000000000000003080c101316191b1d1e1f1f201f1f1e1d1b191714100c08040000000000000000000000000000000000000000030e1a26313c48535e69747e88929ca5ada79f97918a85817d7a787676767677797c8084898f969ea6afa79e948a80756a5f54483d3125190d010000000000000000000000000000000000000000121f2c3845525f6b78858c8c8c8c8c8c897c6f6356493c30231609000000000000000000000000000000000000050d151b20242526262626262626262626262f3c4855626f7b8895a2a09386796c5f5346392c262626262626262626262625231f1a130c0300000000000000000000000000000000000000000000020c161f28313a434d565f68717a848d969fa29b948e878a91989fa29990867d746a61584e453c322920160d02000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25303b454d555f6567676767676767676766625a4f44382d211509000000000000000000000000000000000000000000000000000000000000000000000a15212c37434e5a66717d8995a0aca095897d71665a4e42362a1e130700000000000000000000000000000000000009141e28313940444646464646464646464645413b342b21170c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693939393939393939393939393939393939386796c5f5346392c20130013202c3946535f6c7986939393939393939393908376695c4f4336291c100300000000000000000a16212c3740484f5253535353514c443b31271b10040000000000000000000000000000000000000000000001060b1014191e23282d32373c41464b50555a5f63686d72777c81868b8376695d5043362a1d100013202c3946535f6c79868a85807b76716c67625d58544f4a45403b36312c27221d18130e090400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111c27323d48525d68737e89939e988d83786d62574c42372c21160b010000000013202c3946535f6c79868a847e7974706e6c6a6a6b6c6e7073777a7e82868a8f93969a9ea1a4a4a2a1a1a1a3a3a09c97928b857d7266594c3f3326190d00000000000000000000000000000000000005111d2935404b545c60606060606060605b53493e33271b0f0200000000000000000000000000000000000000000000000000000000000000000000000000000003070a0c0e1011121313131211100f0d0a07040000000000000000000000000000000000000000000000000914202b37424c57626c76808a939ba3aba9a29c96918c898684838383838486888c90959aa1a8ada69e958c82786e63594e43372c201509000000000000000000000000000000000000000000121f2c3845525f6b7885929898989896897c6f6356493c3023160900000000000000000000000000000000000000030a1014171919191919191919191919222f3c4855626f7b8895a2a09386796c5f5346392c20191919191919191919191817130e0802000000000000000000000000000000000000000000000000040d161f28313b444d565f68717a848d969fa69f9994959ca3a39a90877e746b62584f463c332a20170e040000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d575f636464646464625b5a5a5a5a5750483e33281c100400000000000000000000000000000000000000000000000000000000000000000005101b27323d49545f6b76828e9aa5a69b8f84786c6155493d32261a0e02000000000000000000000000000000000000020c161f282f3438393939393939393939393835302a22190f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0d0f0f0f0f0f0f0d0a0600000000000000000000000000000013202c3946535f6c798686868686868686868686868686868686868686796c5f5346392c20130013202c3946535f6c7986868686868686868686868376695c4f4336291c1003000000000000000005101a252e373e43464646464644403a322920150a000000000000000000000000000000000000000000000000000004090e13181c21262b30353a3f44494e53585d62676b70757a808376695d5043362a1d100013202c3946535f6c79837e79746f6a65605c57524d48433e39342f2a25201b16110c0803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000206090a0a0a0a0a0a0a0a0a08060407090a0a0a0a0a0a0a0a090704000000000000000000000000000000000000000000000000000000000000000000000000000b16202b36414c56616c77828d979f94897e74695e53483d33281d12070000000013202c3946535f6c7986938f8a85817d7a78777777797a7d8083868a8e92979b9fa3a4a09d9a979594949496989b9ea39d968c807366594c403326190d0000000000000000000000000000000000000714202d3945515d666d6d6d6d6d6d6d6c655a4f43372a1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1a25303b46505a646e7781899199a0a7ada7a19d9995939190909090919295989ca0a6aca9a39c948c837a70665c52473c31261b0f04000000000000000000000000000000000000000000121f2c3845525f6b7885929fa5a5a396897c6f6356493c3023160900000000000000000000000000000000000000000004080b0c0c0c0c0c0c0c0c0c0c15222f3c4855626f7b8895a2a09386796c5f5346392c20130c0c0c0c0c0c0c0c0c0c0a0703000000000000000000000000000000000000000000000000000000040d161f29323b444d565f68727b848d96a0a0a0a0a0a0a09a91887e756b625950463d342a21180e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000814212d3a46535e697071717171716d655e574f4d4b463e362c21160e060000000000000000000000000000000000000000000000000000000000000000010c17222d38434e5a65707c88939faaa1958a7e73675c5044392d2115090000000000000000000000000000000000000000040d161d23282b2c2c2c2c2c2c2c2c2c2c2c29251f18100700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b1116191c1c1c1c1c1c1a16110b0400000000000000000000000000131f2c3946525f6b767979797979797979797979797979797979797979766b5f5246392c1f1300131f2c3946525f6b7679797979797979797979797974685c4f4236291c100300000000000000000009131c252c3237393939393938352f2920170e030000000000000000000000000000000000000000000000000000000002070c11161b1f24292e33383d42474c51565b60656a6e737874685c4f4336291d1000131f2c3946525f6b7677726d68635f5a55504b46413c37322d28231e1914100b06010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080e1215171717171717171717151210141617171717171717171614100b050000000000000000000000000000000000000000000000000000000000000000000000040f1a242f3a45505a65707b86919b9b90857a70655a4f44392f24190e0300000013202c3946535f6c7986939b95918d8987858484848587898c8f93969a9ea3a4a09b9894918d8b89888788898b8e92979c998c807366594c403326190d0000000000000000000000000000000000000815222f3b4855616e787a7a7a7a7a7a776b5f5246392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000003070b0c0d0d0d0d0d0d0d0d0c0a060200000000000000000000000000000000000000000000000000000009141f29343e48525c656e7780878f969ca2a7aba9a5a2a09e9d9c9c9d9e9fa1a4a8aca8a39e98918a827a71685e554a40362b20150a00000000000000000000000000000000000000000000121f2c3845525f6b7885929facb0a396897c6f6356493c302316090000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8895a2a09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000040d172029323b444d576069727b848e9393939393939392887f756c635950473e342b22180f060000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626e7b7d7d7d7d7d777069615a534b443d352e271f18110a0200000000000000000000000000000000000000000000000000000000000007121d28333e4954606b76828d99a4a69a8f84786d62564b3f33281c1005000000000000000000000000000000000000000000040b12181c1f202020202020202020201f1d19140d0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d151c222628292929292826221d160e06000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b645a4f43372a1e1100111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6a62574c4033271b0e01000000000000000000010a131a21262a2c2c2c2c2c2b29241e170e050000000000000000000000000000000000000000000000000000000000000000050a0f14191e23272c31363b40454a4f54595e63686c6a62584c4034271b0e00111e2a37434f5a646b6b67625d58534e49443f3a35302b26211c18130e0904000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191e22232424242424242423211e1c2023242424242424242423201c160f08000000000000000000000000000000000000000000000000000000000000000000000008131e28333e49545f69747f8a959f978c81766b61564b40352b20150a00000013202c3946535f6c7986939ca19d99969392919091929496999c9fa3a4a09c98948f8b8884817e7c7b7a7b7d7f82868b90968c807366594c403326190d0000000000000000000000000000000000000915222f3c4855626f7b878787878786796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000001080e1317191a1a1a1a1a1a1a1a1916120d070000000000000000000000000000000000000000000000000000020d18222c36404a535c656d757d848b91969b9fa2a5a8a9aaa9a9a9a9aaaaa8a6a3a09c97928c86807870685f564c43392e24190e0300000000000000000000000000000000000000000000121f2c3845525f6b7885929facaca396897c6f6356493c302316090000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8895a2a09386796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000050e172029323b454e576069727b85868686868686868680766d635a51473e352c22191006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b868a8a8a89827a736c645d564e474039312a231b140d0500000000000000000000000000000000000000000000000000000000040e19242f39444f5b66717c87939eaa9f94897e73675c51453a2e23170b000000000000000000000000000000000000000000000001070c10121313131313131313131312100d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d171f272d32353636363635322e2820180f0500000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a52483e32261a0e000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5e5850463b2f23170b0000000000000000000000010910161a1e1f202020201f1c18130c05000000000000000000000000000000000000000000000000000000000000000000000003080d12171c21262b2f34393e43484d52575c5f5e5950463b3024180c000e1a26323e48525a5f5f5b56514c47423d38332e2924201b16110c070200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d161e252a2e3030303030303030302e2a272c2f30303030303030302f2c27211a110800000000000000000000000000000000000000000000000000000000000000000000010c17222d37424d58636d78838e999e93887d72675d52473c31261c1106000013202c3946535f6c79838b91979ca1a2a09e9e9d9e9fa0a2a5a39f9c9894908c88837f7b7875726f6e6e6e7073767a7f858b8c807366594c403326190d0000000000000000000000000000000000000915222f3c4855626f7b889494949386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000000030b131a1f2326262626262626262625221e181109000000000000000000000000000000000000000000000000000006101a242e38414a535c646b727980858a8f9396999b9d9e9f9f9f9f9e9d9b999793908b87817b746d665e564d443a31271d12080000000000000000000000000000000000000000000000121f2c3845525f6b7885929fa0a0a096897c6f6356493c302316090000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8895a2a09386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e172029333c454e57606972797979797979797979766d645b51483f352c231a100700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3a47535f6a747d869097938c857d766f686059524a433c342d261e1710080000000000000000000000000000000000000000000000000000010b15202b35404b56616c77828d99a4a4998e83786d61564b3f34291d120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151f2931393e4142424242423f39322a20160c01000000000000000000000a16212c3740484f525353535353535353535353535353535353535353524f4840372c21160a000a16212c3740484f52535353535353535353535353524d463e34291e130700000000000000000000000000050a0e11131313131312100c0701000000000000000000000000000000000000000000000000000000000000000000000000000001060b10151a1f24292e33383c41464b5053524e473e342a1f1307000a16212c3740484f52524f4a45403b36312c28231e19140f0a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151f282f363a3d3d3d3d3d3d3d3d3d3a3532383c3d3d3d3d3d3d3d3d3c38332b231a10050000000000000000000000000000000000000000000000000000000000000000000005101b26313b46515c67717c87929d998f84796e63584e43382d22170b0000121f2b3844515d68717980868c9195999b9d9fa0a09f9d9b9996938f8c8884807b77736f6c68656361616263666a6e73798087807366594c403326190d0000000000000000000000000000000000000915222f3c4855626f7b8895a0a09386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000020b151d252b30323333333333333333322f2a231b1209000000000000000000000000000000000000000000000000000009131c262f38414a525961686e74797e83868a8c8e90919292929291908f8d8a8784807b76706a635c544c443b32281f150b000000000000000000000000000000000000000000000000121f2c3845525f6b7885929393939393897c6f6356493c302316090000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8895a2a09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e17202a333c454e5760696c6c6c6c6c6c6c6c6c6b645b52493f362d231a110700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e58626b747d879099978f888179726b635c554d463f383029221a12080000000000000000000000000000000000000000000000000008121d27323c47525d67727d89949fa89d92887c71665b50453a2e23180c0100000000000000000000000000000000000000000000000000000000000000000004090b0d0d0d0d0d0d0d0d0d0b0804000000000000000000000004090b0d0d0d0d0d0d0d0d0d0b0804000000000000000000000000000005111c27313b434a4e4f4f4f4f4e4a443c32281d12060000000000000000000005101a252e373e4346464646464646464646464646464646464646464646433e372e251a10050005101a252e373e434646464646464646464646464645423c352c22180d02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004090e13181d22272c31363b40444645423c352c22180d020005101a252e373e434646433e3934302b26211c17120d0803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121d27313a41474a4a4a4a4a4a4a4a4946403d44484a4a4a4a4a4a4a4a48443d352c22170c000000000000000000000000000000000000000000000000000000000000000000000009141f2a353f4a55606b75808b96a0958b80756a5f544a3f33271b0f0300101c2935404c565f676e757a8085898c8f9192939392918f8d8a8783807c78746f6b67635f5c5956555455575a5e63686e757c807366594c403326190d0000000000000000000000000000000000000915222f3c4855626f7b8895a2a09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000009131d272f363c3f40404040404040403e3a352d241b110600000000000000000000000000000000000000000000000000010a141d262f3840484f565d63686e72767a7d8082838585868685858482807e7b77736f6a655f58514a423a322920160d03000000000000000000000000000000000000000000000000121f2c3845525f6b7885868686868686867c6f6356493c302316090000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8895a0a09386796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e18212a333c454e575d5f5f5f5f5f5f5f5f5f5f5a524940372d241b110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26323c475059626b757e8790999a928b847c756e665f585149423b332c241a1106000000000000000000000000000000000000000000000006101a242f39434e59636e79848f9aa5a1968c81766b60554a3f34281d12060000000000000000000000000000000000000000000000000000000000000000040b101518191a1a1a1a1a1a1a191815100a0400000000000000040b101518191a1a1a1a1a1a1a191815100a040000000000000000000000000916212d38434d555a5c5c5c5c5b564e443a2f23170b000000000000000000000009131c252c32373939393939393939393939393939393939393939393937322c251c130900000009131c252c3237393939393939393939393939393936312a231a1006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070c11161b20252a2f3438393936312b231a110600000009131c252c3237393937332e29241f1a15100b0601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e39434c52565757575757575756524b474f545757575757575757554f473e33281d110500000000000000000000000000000000000000000000000000000000000000000000030d18232e39434e59646f79848f939391877c71665b5044382b1f1206000c18242f3a444e555c63696f74797c808284858686858482807d7a77736f6b67635f5b5753504c4a4847484a4e52575d646b72797165584c3f3226190c0000000000000000000000000000000000000915222f3c4855626f7b8895a2a09386796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000040f1a252f3941474c4d4d4d4d4d4d4d4d4b463f372d23180c0100000000000000000000000000000000000000000000000000020b141d262e363d444b52575d62666a6e71737577787979797978777573716e6b67635e59534d474038302820170e0400000000000000000000000000000000000000000000000000121f2b3845515e6a767979797979797979786e6255493c2f2316090000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b889393939386796c5f5346392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f18212a333c454c51535353535353535353524f4940372e251b12090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202b343e475059626c757e87919a9d968e878078716a625b544c453e362c23180d02000000000000000000000000000000000000000000040e18222c36404b55606a75808b95a0a49a8f857a6f645a4f44392d22170c0100000000000000000000000000000000000000000000000000000000000000060e151c212426262626262626262624211c150e050000000000060e151c212426262626262626262624211c150e0500000000000000000000000d1925323e4a555f66696969696760564b3f33271b0e0200000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a26211a130a01000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c292520191108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0f14191e23282b2c2c2a252019110800000000010a131a21262a2c2c2a27221d18130e0904000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c28343f4b555d6363636363636363625d544f5960636363636363636360595045392d211509000000000000000000000000000000000000000000000000000000000000000000000007111c27323d48525d68737e868686868682776c6053463a2d2014070007131e29323c434b52585e63686d7073767779797979777673716e6b67635f5b57534f4b4743403d3b3b3c3e42464c525960686c685f54493d3024170b0000000000000000000000000000000000000915222f3c4855626f7b8895a2a09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000814202c37414b535859595959595959595751493f34291d11050000000000000000000000000000000000000000000000000000020b141c242b333a40464c51565a5e616466686a6b6c6c6c6c6b6a696765625f5b57534e48423c352e261e160e050000000000000000000000000000000000000000000000000000101d2936424e59646b6c6c6c6c6c6c6c6c6c665d52463a2d2114080000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b868686868686796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f18212a333b414546464646464646464646433e372e251c130900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f19222c353e47505a636c757e88919aa099918a837b746d655e574f483e34291e12070000000000000000000000000000000000000000020c161f29333e48525c67717c87919ca79d93887e73685e53483d32271c110600000000000000000000000000000000000000000000000000000000000000050f1820272d31333333333333333333312d2720170e05000000050f1820272d31333333333333333333312d2720170e05000000000000000000000e1b2835414e5a66717575757572685c4f4336291d10030000000000000000000000010910161a1e1f20202020202020202020202020202020202020201f1e1a161009010000000000010910161a1e1f2020202020202020202020201f1d19140e0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080d12171c1e201f1d1a140e07000000000000010910161a1e1f201e1b16110c0702000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121e2b3844505c676f707070707070706e665b55616b70707070707070706b61564a3d3124180b0000000000000000000000000000000000000000000000000000000000000000000000000b16202b36414c56616c76797979797979776c6053463a2d20140700010c17202a323940474d53585c606467696b6c6c6c6c6b696764625e5b57534f4b47433f3b3734312f2e2f32363b41474f565d5f5d564d43382c2014080000000000000000000000000000000000000915222f3c4855626f7b8895a2a09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000c1824313d48535d646666666666666666635b50453a2e211509000000000000000000000000000000000000000000000000000000020a121a21282f353b40454a4e5255585a5c5d5e5f5f5f5f5e5d5c5a5856534f4b47423d37312a231c140c040000000000000000000000000000000000000000000000000000000e1a26313d48525a5f5f5f5f5f5f5f5f5f5f5c544b4035291d11050000000000000000000000000000000000000000000000000000000000000000000815222f3b4855616d78797979797979766b5f5246392c1f13060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f1821293035383939393939393939393937322c251c130a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101a232c353e48515a636c767f88919ba39c958d867e777069615a50463b2f23170a00000000000000000000000000000000000000010a141e28313b454f5a646e79838e98a3a0958b81766c61574c41362c21160b00000000000000000000000000000000000000000000000000000000000000020d17212a32383d4040404040404040403d38322920170c0100020d17212a32383d4040404040404040403d38322920170c010000000000000000000f1c2835424f5b687582828282776a5d5044372a1d110400000000000000000000000000050a0e1113131313131313131313131313131313131313131313110e0a05000000000000000000050a0e111313131313131313131313131312110d090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070b0f121313110d0903000000000000000000050a0e111313110f0a0501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c787d7d7d7d7d7d7d776b5e5865727d7d7d7d7d7d7d7d7265594c3f3226190c000000000000000000000000000000000000000000000000000000000000000000000000040f1a242f3a45505a646b6c6c6c6c6c6c6b655b4f44372b1f12050000050e1720272e353c41474c5054585a5c5e5f5f5f5f5e5c5a5855524f4b47433f3b37332e2b2724222122252a2f363d444c5152504b443b31261b10040000000000000000000000000000000000000915222f3c4855626f7b8895a2a09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000e1b2734404d59656f73737373737373736d62564a3d3124170b0000000000000000000000000000000000000000000000000000000000080f161d242a2f353a3e4245484b4d4f51525253535252514f4e4c4946433f3b36312b261f19120a02000000000000000000000000000000000000000000000000000000000915202b3640484e52535353535353535353504a42392f24190d010000000000000000000000000000000000000000000000000000000000000000000714202d3945515c666c6c6c6c6c6c6c6b645a4f43372a1e1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f171e24292c2c2c2c2c2c2c2c2c2c2c2a27211b130a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a232c363f48515a646d767f89929ba09f989089827a736c62574b3f33261a0d0000000000000000000000000000000000000009131c263039434d57616c76808b959fa2988e84796f655a50453a30251a0f040000000000000000000000000000000000000000000000000000000000000008131e29333c43494c4d4d4d4d4d4d4d4c49433b32281e13070008131e29333c43494c4d4d4d4d4d4d4d4c49433b32281e13070000000000000000000f1c2835424f5b6875828f8f84776a5d5044372a1d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c79868a8a8a8a8a85786b5e5865727e8a8a8a8a8a8a7f7265594c3f3226190c0000000000000000000000000000000000000000000000000000000000000000000000000008131e28333e49525a5f5f5f5f5f5f5f5f5a53493e33271b0f03000000050e161d242a30363b4044484b4e50515253535251504e4b4946423f3b37332f2b27221f1b18151416191e242b333a40444644403a32291f150a000000000000000003060707070707070707070915222f3c4855626f7b8895a2a09386796c5f5346392c20130707070707070707070705020000000000000000000000000000000000000000000000000f1b2835424e5b6875808080808080807e7165584b3e3225180b000000000000000000000000000000000000000000000000000000000000050c12191e24292e3236393c3f4143444546464646454443413f3d3a37332f2a25201a140e07000000000000000000000000000000000000000000000000000000000000040f1a242e363d4345464646464646464646443f3830271d12070000000000000000000000000000000000000000000000000000000000000000000004111d2934404a545b5f5f5f5f5f5f5f5f5a52483e32261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d13191c1f2020202020202020201f1e1b1610090100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a242d363f48525b646d7680899293939393938c857d74675a4e4134281b0e01000000000000000000000000000000000004101a252e38424b555f69737d88929ca49a90867c72675d53483e33291e130900000000000000000000000000000000000000000000000000000000000000000c1824303a454e55595959595959595959554d443a2f24180c000c1824303a454e55595959595959595959554d443a2f24180c0000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000000000000000407080808080808080808080808080808080808080808080808080808080808080808080808080808070400000000000000000000000000000000000000000000000000000000000000000000000000000000000104070808080808080808080704000000000000000000000000000000000000000000000000000000000000000000000206080b0d0f101212131313131211100e0c0a0704000000000000000000000000000000000000000000000000000000000000000000000000000004070808080808080808080806030000000000000000000000000000000000000000000000000000000013202c3946535f6c7986939797979285786b5e5865727e8c979797978c7f7265594c3f3226190c00000000000000000000000000000000000000000000000000000000000000000000000000010c17222c3740494f52535353535353524f4941372d22160b0000000000040b12191f252a2f34383c3f414345464646464543413f3c3936332f2b27231f1b16120f0b0908090d131921282f34383938342f2820170d03000000000000060b0f121414141414141414141415222f3c4855626f7b8895a2a09386796c5f5346392c201414141414141414141414120f0a04000000000000000000000000000000000000000000000f1b2835424e5b6875828d8d8d8d8d8b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000000000000000001070d13181d2226292d303234363738393939393837363433302d2a27231e1a150f0903000000000000000000000000000000000000000000000000000000000000000008121b242c32363939393939393939393937332e271e150b0100000000000000000000000000000000000000000000000000000000000000000000000c18232e38424a5052535353535353524f4840372c21160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d101213131313131313131313110e0a0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121b242d364049525b646d778086868686868686868174675b4e4134281b0e0100000000000000000000000000000000000a16212c37404a545d67717b858f9aa49b92887e746a60564b41372c22170c020000000000000000000000000000000000000000000000000000000000000000101c2935414c57606566666666666666655f564c4034281c1000101c2935414c57606566666666666666655f564c4034281c100000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000000000060c101315151515151515151515151515151515151515151515151515151515151515151515151515151513100c070000000000000000000000000000000000000000000000000000000000000000000000000001070c111315151515151515151513100c07000000000000000000000000000000000000000000000000000000000002070b0f1215171a1c1d1e1f2020201f1f1e1c1b191613100d0904000000000000000000000000000000000000000000000000000000000000000000070c111315151515151515151515130f0b05000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0a49e9285786b5e5865727e8c98a4a4998c7f7265594c3f3226190c000000000000000000000000000000000000000000000000000000000000000000000000000005101b252e373e434646464646464646433e372f251b100500000000000000070e14191f24282c2f323537383939393938363532302d2a26231f1b17130f0a06030000000002080f171e24282b2c2b28241e160e050000000000020a11171c1f2121212121212121212121222f3c4855626f7b8895a2a09386796c5f5346392c2121212121212121212121201e1b160f080000000000000000000000000000000000000000000f1b2835424e5b6875828e9a9a9a988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000000000002070d11161a1d20232628292b2b2c2c2c2c2c2b29282624211e1b17130e0904000000000000000000000000000000000000000000000000000000000000000000000009121a21262a2c2c2c2c2c2c2c2c2c2c2b28231c150c0300000000000000000000000000000000000000000000000000000000000000000000000007121c2630383f434646464646464646433e372e251a1005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b242e374049525b656e7779797979797979797972675a4d4134271b0e0100000000000000000000000000000000000e1a26323d48525c666f79838d97a09d938980766c62584e44392f251a1005000000000000000000000000000000000000000000000000000000000000000000121f2b3845515d68717373737373737371685d5144382b1e1200121f2b3845515d68717373737373737371685d5144382b1e120000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000000020a11181c20212222222222222222222222222222222222222222222222222222222222222222222222222221201d18120b0300000000000000000000000000000000000000000000000000000000000000000000030b12181d20222222222222222221201c18120a020000000000000000000000000000000000000000000000000004090e13171b1e212426282a2b2c2c2c2c2c2b2a29272523201c1915100b060100000000000000000000000000000000000000000000000000000000030b12181d20222222222222222222211f1c1610090100000000000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000000000000000000000000000000000000000000000000000000000000000000000000000009131c252c3237393939393939393937332d251d130900000000000000000003080e13181c202326282a2b2c2c2c2c2b2a282623211d1a16130f0b0703000000000000000000050c13181c1e1f1e1c18130c040000000000010b141b22282b2d2e2e2e2e2e2e2e2e2e2e2e2f3c4855626f7b8895a2a09386796c5f5346392e2e2e2e2e2e2e2e2e2e2e2e2d2b27211a120900000000000000000000000000000000000000000f1b2835424e5b6875828e9ba6a5988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000000000000000105090d111417191b1d1e1f1f20201f1f1e1d1b191715120e0b07020000000000000000000000000000000000000000000000000000000000000000000000000000080f151a1e1f2020202020202020201e1b17110a0300000000000000000000000000000000000000000000000000000000000000000000000000000b141e262d3337393939393939393937322c251c13090000000000000000000000000000000000000000000000000000000000040708080808080808080808070502000000000000000000000000000000000000000000000000000000000000000000010407080808080808080808080704000000000000000000000000000000000000000000000000000000000000000000000000000009121b252e374049535c656b6c6c6c6c6c6c6c6c6c6961564a3e3226190d000000000000000000000000000000000000111d2a36434e5a646e78818b939393938b81776e645a50463c32281d13090000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7980808080808080796c5f5246392c1f130013202c3946535f6c7980808080808080796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2c29231d150c030000000000000000000000000000000000000000000000000000000000000000030d151d24292d2e2e2e2e2e2e2e2e2e2c28231c140c020000000000000000000000000000000000000000000003090f151a1f23272b2e3133353638383939393938373634322f2c2925211c17120c060000000000000000000000000000000000000000000000000000030c151d23292c2e2e2e2e2e2e2e2e2e2e2c27221b130a00000000000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c000000000000000000000000000000000000000000000000000000000000000000000000000000010a131b21272a2c2c2c2c2c2c2c2c2a27211b130b01000000000000000000000002070c101317191c1d1f2020201f1f1d1b191714110e0a07030000000000000000000000000001070c10121312100c070100000000000009131d262d33383a3a3a3a3a3a3a3a3a3a3a3a3a3c4855626f7b8895a2a09386796c5f53463a3a3a3a3a3a3a3a3a3a3a3a3a3a37322c241b1107000000000000000000000000000000000000000f1b2835424e5b6875828e9ba8a5988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000000000000000000000105080a0c0e101112131313131211100f0d0b080502000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0e1113131313131313131313120f0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000020c141c22272b2c2c2c2c2c2c2c2c2a26211a130a01000000000000000000000000000000000000000000000000000000060c10131515151515151515151514110e0802000000000000000000000000000000000000000000000000000000000001070d11141515151515151515151513100c070000000000000000000000000000000000000000000000000000000000000000000000000009131c252e37414a535b5f5f5f5f5f5f5f5f5f5f5d574f44392e22160a000000000000000000000000000000000000121f2c3945525e6b768086868686868682786f655c52483e342a20160c010000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c79868d8d8d8d8d86796c5f5246392c1f130013202c3946535f6c79868d8d8d8d8d86796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b39342e271e150a00000000000000000000000000000000000000000000000000000000000000010b151f272f35393b3b3b3b3b3b3b3b3b39342e261e140a000000000000000000000000000000000000000000070e141a20262b2f33373a3d3f4143444546464646454442403e3c3835312d28231d17110a030000000000000000000000000000000000000000000000000b151e272e35393b3b3b3b3b3b3b3b3b3b38332c251c1208000000000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000000000000000000000000000000000000000000000000000000000000000000000000000000010910161b1e1f202020202020201e1b1610090100000000000000000000000000000004070a0d0f11121313131312110f0d0a080501000000000000000000000000000000000000000000000000000000000000000005101b252f373f4447474747474747474747474747474855626f7b8895a2a09386796c5f53474747474747474747474747474746433d362d23190e030000000000000000000000000000000000000f1b2835424e5b6875828e9ba2a2988b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1e202020202020201f1e1a161009010000000000000000000000000000000000000000000000000000020a11171c2021222222222222222222201e19140d05000000000000000000000000000000000000000000000000000000030b12181d2022222222222222222221201c18120a020000000000000000000000000000000000000000000000000000000000000000000000010a131c252f3841494f52535353535353535353514d453d33281d1106000000000000000000000000000000000000121f2c3845525e6b76797979797979797870675d534a40362c22180e04000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986939a9a9a9286796c5f5246392c1f130013202c3946535f6c7986939a9a9a9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000006111c262f383f4548484848484848484848484848484848484848484848484848484848484848484848484848484845403930261c110600000000000000000000000000000000000000000000000000000000000007121d273139404548484848484848484845403830261c1106000000000000000000000000000000000000020a11181f262b31363b3f4347494c4e5051525253535252504f4d4b4845413d39342e28221c150d060000000000000000000000000000000000000000000007121d273039404548484848484848484847443e372e241a0f030000000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0e111313131313131313110f0a0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16222d3741495053545454545454545454545454545455626f7b8895a2a09386796c5f545454545454545454545454545454534f483f352a1f14080000000000000000000000000000000000000f1b2835424e5b6875828e959595958b7e7165584b3e3225180b0000000000000000000000000000000000000000000001070b0e0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0d0a06000000000000000000000000000000000000000000000000000205080a0c0e0f10111212121111100f0d0b0907040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f121313131313131313110e0a05000000000000000000000000000000000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2d2a251f170f0500000000000000000000000000000000000000000000000000030d151d24292d2e2e2e2e2e2e2e2e2e2e2c28231c140c020000000000000000000000000000000000000000000000000000000000000000000000010a131d262f373e434646464646464646464645413b342b21160c00000000000000000000000000000000000000111d2a36424e5a646b6c6c6c6c6c6c6c6c675e554b41382e241a100600000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0a69f9286796c5f5246392c1f130013202c3946535f6c798693a0a69f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000b17222d38424a51545555555555555555555555555555555555555555555555555555555555555555555555555554514a42382e23170c0000000000000000000000000000000000000000000000000000000000000c18232f39434b51545555555555555554514a42382d22170b0000000000000000000000000000000000030c141b232a31373d42474b4f5356585b5c5e5f5f5f5f5f5e5d5c5a5754514d49443f3a342d261f1810080000000000000000000000000000000000000000000c18232e39424b51545555555555555555544f4940362b2014090000000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b27333e49535b60616161616161616161616161616161626f7b8895a2a09386796c616161616161616161616161616161615f5a51473c3024180c0000000000000307090b0b0b0b0b0b0b0b0b0f1b2835424e5b6875828888888888887e7165584b3e3225180b0b0b0b0b0b0b0b0b0b090602000000000000000000060d12171a1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1a16110b04000000000000000000000000000000000000000003070b0e121417191b1c1d1e1e1e1e1e1e1d1b1a181613100d090500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d262e34383b3b3b3b3b3b3b3b3b3b3a36302921170d030000000000000000000000000000000000000000000000010b151f272f35393b3b3b3b3b3b3b3b3b3b39342e261e140a000000000000000000000000000000000000000000000000000000000000000000000000010b141d252d3337393939393939393939393835302922190f05000000000000000000000000000000000000000e1a26323d48525a5f5f5f5f5f5f5f5f5f5c554c43392f261c12080000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000f1b27333f4a545c6161616161616161616161616161616161616161616161616161616161616161616161616161615c544a3f34281c10030000000000000000000000000000000000000000000000000000000004101d2934404b555d6161616161616161615c544a3f33281b0f03000000000000000000000000000000040d151e262d353c42484e53575b5f626567696a6b6c6c6c6c6b6a686664615d5955504b453f38312a221a11090000000000000000000000000000000000000004101c2834404b545c616161616161616161605a52483c3125190d0000000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c000000000000000000000000000000000000000000000106090b0c0c0c0c0c0c0c0c0c0c0b0905010000000000000000000000000000000000000000000000000000000003070a0c0c0c0c0c0c0c0c0c0c0a0804000000000000000000000000000000000005080b0c0c0c0c0c0c0c0c0c0c0a0804000000000000000000111e2a37434f5b656c6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6f7b8895a2a09386796d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6b63584d4034281b0f0000000002090e1316171818181818181818181b2835414e5b67747b7b7b7b7b7b7b7b7164584b3e3125181818181818181818181715120d07010000000000000710171e2327292929292929292929292929292929292929292929292929292929292929292929292929292929292929292826221d160e060000000000000000000000000000000000050a0f13171b1e21232627292a2b2b2b2b2b2a29282624221f1c1915110c07020000000000000000000000000000000000000000000000000000000000000000010407090b0d0f10111112121211100f0e0c0a080502000000000000000000000000000000000000000000000000000005101b262f383f454748484848484848484846413b33291f1409000000000000000000000000000000000000000000000007121d27313940454848484848484848484845403830261c1106000000000000000000000000000000000000000000000000000000000000000000000000020b131b22272a2c2c2c2c2c2c2c2c2c2c2c29251f18100700000000000000000000000000000000000000000a15212c3640484f525353535353535353504b433a31271d140a000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000121e2b37434f5b666d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d665c5044382b1f1206000000000000000000000000000000000000000000000000000000000713202c3945515c676d6e6e6e6e6e6e6e6d665b5044372b1f12050000000000000000000000000000030d161f2730383f464d53595e63686b6f72747677787979797978767573706d6965615c56504a433b342c231b120900000000000000000000000000000000000006131f2c3845515c666d6e6e6e6e6e6e6e6e6c64594d4135281c0f0300000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c000000000000000000000000000000000000000000060c121518191919191919191919191815110c0600000000000000000000000000000000000000000000000000030a0f1417181919191919191919181714100a0400000000000000000000000000050c111517181919191919191919181714100a030000000000000013202c3946525f6b777a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7b8895a2a093867a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a75695c504336291d10000000040c141a1f22242424242424242424242426333f4b57626b6e6e6e6e6e6e6e6e696054483c30242424242424242424242424221e19120b020000000006101922292f333536363636363636363636363636363636363636363636363636363636363636363636363636363636363635322e2820180e040000000000000000000000000000040b10161b1f23272a2d3032343537373838383837363533312f2c2925211d18130d07010000000000000000000000000000000000000000000000000000000005090d101316181a1b1d1e1e1e1e1e1e1d1c1b191714110e0b070300000000000000000000000000000000000000000000000a16222d37414a5054555555555555555555524c453b31261b0f03000000000000000000000000000000000000000000010d18242f39434b5154555555555555555554514a42382d22170b00000000000000000000000000000000000000000000000000000000000000000000000000010910161b1e202020202020202020201f1d19140d06000000000000000000000000000000000000000000040f1a242e363d43464646464646464646443f3931281f150b02000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000013202c3946525f6c777b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b786c6053473a2d201407000000000000000000000000000000000000000000000000000000000814212e3b4754616d797b7b7b7b7b7b7b786c5f5346392d20130600000000000000000000000000010b151f283139414951585e656a6f74787b7e81828485868686858483827f7c7976716d67615b544d463e352d241b110800000000000000000000000000000000000714212d3a4754606d787b7b7b7b7b7b7b7b75695d5043372a1d100400000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000000000000000000000000000000000000000911181d22242525252525252525252524221d1811090000000000000000000000000000000000000000000000050d141b20232525252525252525252524201c160e0600000000000000000000000810171d21242525252525252525252523201b150e0600000000000013202c3946535f6c798687878787878787878787878787878787878b97a3a1948a87878787878787878787878787878787878376695d5043362a1d100000040d161e252b2f313131313131313131313131313b4650595f61616161616161615e574e4338313131313131313131313131312e2a241d140b020000030e18222c343a3f42424242424242424242424242424242424242424242424242424242424242424242424242424242424242423e39322a20160b00000000000000000000000002090f161c21262b2f33373a3c3f4142434445454544444341403e3b3835312d29241e18120c0500000000000000000000000000000000000000000000000002070c1115191c2022252728292a2b2b2b2b2b2a29272523211e1b17130e0a040000000000000000000000000000000000000000000e1b27333e49535c616161616161616161615e574d42372b1f140800000000000000000000000000000000000000000006111d2935404b555d616161616161616161615c544a3f33281b0f030000000000000000000000000000000000000000000000000000000000000000000000000000050a0f111313131313131313131312100d0802000000000000000000000000000000000000000000000008121c242c323639393939393939393938342e271f160d0300000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000013202c3946535f6c79868888888888888888888888888888888888888888888888888888888888888888888888877a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b88888888888886796d6053463a2d2013070000000000000000000000000009131d27313a434b535b626970767b8084878b8d8f91929293939291908e8c8986827d78736d665f5750473f362d231a1006000000000000000000000000000000000714212e3a4754616d7a8788888888888884776a5d5044372a1d110400000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c0000000000000000000000000000000000000009121b23292e3132323232323232323232312e29221b1209000000000000000000000000000000000000000000040e171f262c3032323232323232323232302c2720180f0600000000000000000008111a22282d3132323232323232323232302c2720180f05000000000013202c3946535f6c79869394949494949494949494949494949494969da8a69c9594949494949494949494949494949494908376695d5043362a1d1000010b161f2830373b3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e474f535555555555555555524d453e3e3e3e3e3e3e3e3e3e3e3e3e3e3d3a352e261d1309000009141f2a343e454b4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4e4a443c32281d120600000000000000000000050c131a21272d32373b3f4346494b4d4f505151515151504f4e4c4a4845413d39342f2a241d160f0800000000000000000000000000000000000000000001070d13181d2125292c2f3133353637383838383737353432302d2a27231f1a15100a0400000000000000000000000000000000000000111e2a37434f5b656d6e6e6e6e6e6e6e6e6e695f54483c3024180c0000000000000000000000000000000000000000000a16222e3a46515d676e6e6e6e6e6e6e6e6e6d665b5044372b1f12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a121a21262a2c2c2c2c2c2c2c2c2c2b28231d150d040000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000013202c3946535f6c79869395959595959595959595959595959595959595959595959595959595959595959594877a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b88949595959386796d6053463a2d20130700000000000000000000000006101b252f39434c555d656d747b81878c9094979a9c9d9e9fa09f9f9e9d9b9895928e89847e777169625951483f352c22180d030000000000000000000000000000000714202d3a4753606d7a8794959595959184776a5d5144372a1e110400000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000000000000000000000000000000000007111b242d343a3d3f3f3f3f3f3f3f3f3f3f3d3a342d241b110600000000000000000000000000000000000000010c16202931373c3e3f3f3f3f3f3f3f3f3f3c38322a21180e030000000000000005101a232c33393d3f3f3f3f3f3f3f3f3f3f3c38312a21170d020000000013202c3946535f6c798693a0a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a2a7afaea6a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a19d908376695d5043362a1d100007121d28313a42474a4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4a4640382f251b1004000d1925313c4650575b5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5b564e44392e23170b000000000000000000070f171e252c32383e43474c4f5355585a5b5d5d5e5e5e5e5d5c5b595754514d4945403b352f282119120a01000000000000000000000000000000000000050c13191e24292d3135383b3e4041434444454545444342413f3c3a37332f2b26211b150f08010000000000000000000000000000000000121f2c3945525f6b777b7b7b7b7b7b7b7b7a7064584c4035291d110500000000000000000000000000000000000000030f1b27323e4a56626e797b7b7b7b7b7b7b7b786c5f5346392d2013060000000000040a0e1112131313131313131313120f0b0600000000000000000000000000000000000000000000000000000000000000050a0e1112131313131313131312110e0a04000000000000000000000810161a1e1f20202020202020201e1c17120b03000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000013202c3946535f6c798693a0a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a094877a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8894a1a2a09386796d6053463a2d2013070000000000000000000000020d17222d37414b555e676f777f868c92979ca0a3a6a7a5a3a2a2a2a2a4a5a7a5a29e9a958f89827b736b635a51473e342a1f150a0000000000000000000000000000000713202d3a4653606d798693a0a2a29e9184776b5e5144382b1e110500000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c0000000000000000000000000000000000010d18232d373f454a4c4c4c4c4c4c4c4c4c4c4a453f362d23180c0100000000000000000000000000000000000007121d28323b42484b4c4c4c4c4c4c4c4c4b49433c332a1f150a000000000000010c17212c353e45494b4c4c4c4c4c4c4c4c4b48433c33291f14080000000013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a1a7afada5a1a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09d908376695d5043362a1d10000c18232f39434c535757575757575757575757575757575757575757575757575757575757575757575757575757575757575756524a41372c21150900111d2936424d5862686969696969696969696969696969696969696969696969696969696969696969696969696969696969696760564b3f33271a0e0000000000000000071019212830373d44494e53585c5f62646668696a6b6b6b6b6a69676563605d5a55514c46403a332b241c130a01000000000000000000000000000000000810171e242a2f35393d4145484a4c4e4f505151515151504f4d4b4946433f3b37322c26201a130b0400000000000000000000000000000000121f2c3845525e6a7682888888888888888175695d5145392d22160a0000000000000000000000000000000000000008141f2b37434f5b67737e8888888888888883776b5f5246392c20130600000000080f151a1d1f1f1f1f1f1f1f1f1f1f1e1b17120b03000000000000000000000000000000000000000000000000000000020910161b1e1f1f1f1f1f1f1f1f1f1f1d1a16100901000000000000000000040a0e11131313131313131313120f0b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000013202c3946535f6c798693a0a3a3a3a3a3a3a3a3a3a3a3a3a4a8aeaeaeada6a3a3a3a3a3a3a3a3a3a3a3a3a094877a6d6053473a2d201407000000000000000001030303030303030303030303030303030303030815212e3b4854616e7b8894a1ada09386796d6053463a2d201307000000000000000000000008131e29343e49535d677079818991979ea3a8a7a29e9b98979695959697999c9fa4a9a5a09a948d857d756c635950463b31261c110600000000000000000000000000000613202c3946525f6c7985929facab9e9285786b5e5245382c1f120500000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c000000000000000000000000000000000006121e29343f495156585858585858585858585650483f34291d12060000000000000000000000000000000000000c18242f3a444d5458585858585858585858554e453c31261c1106000000000008131e28333d474f5658585858585858585858544e453b3025190d0100000013202c3946535f6c79869393939393939393939393939393939393959da7a59b9493939393939393939393939393939393908376695d5043362a1d1000101c2834404b555e63646464646464646464646464646464646464646464646464646464646464646464646464646464646464635c53493d3125190d00121f2c3845525e6a7375757575757575757575757575757575757575757575757575757575757575757575757575757575757572675b4f4236291c100000000000000007101a222b333a41484f555a5f64686b6e71737576777778787777757472706d6a66615d57514b443d352d251c130a0100000000000000000000000000020a121a21282f353b40454a4d515457595b5c5d5e5e5e5e5d5d5b5a5855524f4b47423d38322b241d150d05000000000000000000000000000000111d2a36424e5a66717d8995959595959185796d62564a3e32261a0e030000000000000000000000000000000000000c1824303c48545f6b77838f95959595958a7e72665a4f43372a1e110500000009121a21262a2c2c2c2c2c2c2c2c2c2c2b28231d150d0400000000000000000000000000000000000000000000000000020b141b22272a2c2c2c2c2c2c2c2c2c2c2a26211a130a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000013202c3946535f6c79869396969696969696969696969696979da6b1aea39b9796969696969696969696969694877a6d6053473a2d201407000000000002070b0e101010101010101010101010101010101010101015212e3b4854616e7b8894a1ada09386796d6053463a2d20130f0c090400000000000000020e1924303b45505b656f78828b939ba2a9a8a19b96928f8c8a898888898a8c8f93989da3aaa59f978f877e756b62574d43382d22170c010000000000000000000000000005121f2b3845515e6b7884919eaaac9f9286796c5f5346392c20130600000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000000000000000000000000000000000a16222e3a46515b6265656565656565656565625a50453a2e22160a000000000000000000000000000000000000101c2834404b565f6465656565656565656560574d43382d23180d03000000050f1a252f3a454f5961656565656565656565645f574c4135291d110400000013202c3946535f6c798686868686868686868686868686868686868b96a3a0948986868686868686868686868686868686868376695d5043362a1d1000121f2b3844505c67707171717171717171717171717171717171717171717171717171717171717171717171717171717171716e655a4e4135281c0f0013202c3946535f6c7982828282828282828282828282828282828282828282828282828282828282828282828282828282828276695d5043362a1d10000000000000061019232c343c444c535a60666b7074787b7d80828384848585848382817e7c7976726d68635d564f473f372e251c1309000000000000000000000000020b141c242c333a40464c51565a5d61636667696a6b6b6b6b6a69686664625f5b57534e49433d362f271f170f0600000000000000000000000000000e1a26323d4955616d7884909ca2a2a2968a7e72665a4e43372b1f1307000000000000000000000000000000000005111d2935404c5864707c8894a0a2a29d9185796d61564a3e32261a0e02000008121b242c32363839393939393939393937342e271f160c020000000000000000000000000000000000000000000000000a141d262d33373939393939393939393936322c251c13090000000000000000000000000000000000000000000000000000000001060a0d0e0e0e0e0e0e0e0d0a06010000000000000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000013202c3946535f6c79868a8a8a8a8a8a8a8a8a8a8a8a8a8a8b95a0ada99d928a8a8a8a8a8a8a8a8a8a8a8a8a8a877a6d6053473a2d20140700000000060d13171b1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c212e3b4854616e7b8894a1ada09386796d6053463a2d201c1b19150f0901000000000007131f2a35414c57626c77818b949da5ada59e96908a8682807d7c7b7b7c7e8083878c9298a0a8a9a19990877d73695f544a3f34281d12060000000000000000000000000002111e2a3744505d6a7683909da9ada093867a6d6054473a2d21140700000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000000000000000000000000000000030f1b27333f4b57626d727272727272727272726c62564a3f33271b0f030000000000000000000000000000000000121f2b3844515d6870727272727272727271695f544a3f342a1f140a0000010c16212c36414c56616b72727272727272727271695e5245392c201307000000131f2c3946525f6b7679797979797979797979797979797979797b8895a2a0938679797979797979797979797979797979797974695c4f4336291d100013202c3946535f6c797e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e76695d5043362a1d100013202c3946535f6c79868f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8376695d5043362a1d100000000000040e18222b353e464e565e656b71777c8084878a8c8e909191929191908f8d8b8986827e79746e686159514940372e251b110700000000000000000000020b141d262e363e454b52575d62666a6d70727475777778787777767573716e6b68645f5a544e484139312921180f05000000000000000000000000000915212d3944505c6874808b97a3aea69a8f83776b5f53473b3024180c00000000000000000000000000000000000a16212d3945515d6975818c98a4aea4988c8174695d5145392d22160a0000040f1a242e363d4245464646464646464645443f3931281e1308000000000000000000000000000000000000000000000006111c262f373e4345464646464646464645433d362e251b10050000000000000000000000000000000000000000000000000000060d1217191b1b1b1b1b1b1b1916120c0500000000000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000013202c3946535f6c787d7d7d7d7d7d7d7d7d7d7d7d7d7d7d85929faca89b8e827d7d7d7d7d7d7d7d7d7d7d7d7d7d796d6053473a2d2014070000000810181e2327292929292929292929292929292929292929292929292e3b4854616e7b8894a1ada09386796d6053463a2d29292825201a130b02000000000c18242f3b47525d68737e89939da6aea59c938c857f7a7673716f6f6f6f7173777b81878e969ea7aba2998f857b71665b50453a2e23170b0000000000000000000000000000101c2936424f5c6875828e9ba8aea194887b6e6155483b2f22150900000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c0000000000000000000000000000000007131f2b37434f5b67737e7e7e7e7e7e7e7e7e7e73675b4f43372b1f1307000000000000000000000000000000000013202c3946535f6c797e7e7e7e7e7e7e7e7b71665b51463b31261b11060008131d28333d48535d68737d7e7e7e7e7e7e7e7e7a6d6154473a2e211407000000111e2a37434f5a646b6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6f7b8895a2a09386796d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6a62584c4034281b0f0013202c3946535f6c79868b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8376695d5043362a1d100013202c3946535f6c7986939c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c908376695d5043362a1d1000000000010b16202a343d47505860686f767c82878c909497999b9c9d9e9e9e9e9d9c9a9895928e8a857f79726b635b524940372d23190e030000000000000000010a141d262f3840484f565d63686d7276797c7e81828484858584848382807d7b77746f6b656059524b433b332a21170e0400000000000000000000000005101c2834404b57636f7b87929eaaab9f93877b7064584c4034281c1105000000000000000000000000000000020e1a26323e4a56616d7985919da9ab9f93877b7064584c4035291d110500000a15212c3640484e52525252525252525252504a433a3025190e02000000000000000000000000000000000000000000000c17232e3841494f525252525252525252524e4840372c21160a000000000000000000000000000000000000000000000000000810181e23262828282828282726221d170f07000000000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000121e2b3744505c676e70707070707070707070707070707885929faca89b8e8275707070707070707070707070706f675c5145382c1f1306000007111a22292f3336363636363636363636363636363636363636363636363b4854616e7b8894a1ada09386796d6053463a36363634312c251d140a00000004101c2834404c58636e7a85909aa5afa69c938a817a736e6a66646362626364676b70757c848c959ea8aba1978d82786d61564b3f33281c1004000000000000000000000000000e1b2834414e5a6773808d99a6afa296897c6f6356493d3023170a00000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c000000000000000000000000000000000c18242f3b47535f6b77838c8c8c8c8c8c8c8c83776b5f53473c3024180c0000000000000000000000000000000000121f2c3845515d69737e898c8c8c8c8c8c82786d62584d42382d23180d040f1a242f3a444f5a646f7a848c8c8c8c8c8c8a7f746a5e5246392d2013070000000e1b27323e49525a5f606060606060606060606060606060626f7b8895a2a09386796c606060606060606060606060606060605e5950463b3024180c0013202c3946535f6c7986939898989898989898989898989898989898989898989898989898989898989898989898989898908376695d5043362a1d100013202c3946535f6c798693a0a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69d908376695d5043362a1d100000000008121d28323c464f59626a727a81888e93989ca0a3a5a7a7a5a4a4a4a5a6a8a7a4a19e9a96908a847d756d645b52493f352a20150a000000000000000008131c262f39424a525a61686e74797e8286898b8d8f909192929190908e8c8a8784807b76716b645d554d453c332920160c010000000000000000000000000c17232f3b47525e6a76828d99a5b0a4988c8074685c5145392d21150900000000000000000000000000000007131f2b37424e5a66727e8a96a2ada69a8e83776b5f53473c3024180c0000000e1a26323d48525a5e5f5f5f5f5f5f5f5f5f5c554c41362a1f130700000000000000000000000000000000000000000005111c28343f4a535b5f5f5f5f5f5f5f5f5f5e5a52483e32271b0f02000000000000000000000000000000000000000000000008111a22292f3334343434343434322e28211910060000000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000f1c28343f4a555d62636363636363636363636363636b7885929faca89b8e827568636363636363636363636363625e554b4034281c100400030e19232c343b404243434343434343434343434343434343434343434343434854616e7b8894a1ada09386796d60534643434343413d372f261c120700000814202d3945515d6874808b96a1aca99e948a81776f68625d5a5756555556585b5f646a727a838c96a0aba99f94897e73675c5044382c201408000000000000000000000000000d1926333f4c5865727e8b98a4b0a4978a7e7164584b3e3225190c00000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000000000000000000000000000004101c2834404c5864707c889498989898989894887c7064584c4034281c100400000000000000000000000000000000101d2935414c57626c77818c9698989894897f74695f54493f34291f140b16212b36414b56616b76818b96989898978d82786d63584d42362a1e11050000000a16212c3740494f53535353535353535353535353535355626f7b8895a2a09386796c5f535353535353535353535353535353524e473e352a1f13080013202c3946535f6c798693a0a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49d908376695d5043362a1d100013202c3946535f6c7986939999999999999999999999999999999999999999999999999999999999999999999999999999908376695d5043362a1d10000000030e19242f39444e58616b747c848c93999fa4a8a7a29f9c9a9898979898999b9ea1a5aaa6a19c968f877f766d645b51463c31261b100500000000000005101a242e38424b545c646c737980858a8e9295989a9c9d9e9e9e9e9d9c9b999693908c87827c756f675f574e453b32281e130900000000000000000000000007131e2a36424e5965717d8994a0aca89d9185796d6155493e32261a0e0200000000000000000000000000000c18232f3b47535f6b77838e9aa6ada1968a7e72665a4f43372b1f1308000000111d2a36424e5a646b6c6c6c6c6c6c6c6c6c675e53473b2f23170b0000000000000000000000000000000000000000000915212d3945505c656b6c6c6c6c6c6c6c6c6b645a4f43372b1e120500000000000000000000000000000000000000000000040f1a232c343a3f414141414141413e3a332b22180e0300000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000b17232e39434b52565656565656565656565656565f6b7885929faca89b8e8275685b565656565656565656565656524c43392f23180c00000914202a353e464c4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f54616e7b8894a1ada09386796d60534f4f4f4f4f4d4841382e23180d01000c1824303d4955616d7985919ca8aea2978c82786e665e57524e4b494848494b4f53596068717a848e99a4afa69a8f84786c6155493d3125180c000000000000000000000000000b1824313d4a5763707c8995a2afa5998c8073665a4d4034271b0e01000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c0000000000000000000000000000000814202c3844505c6874808c98a4a5a5a5a5a4988c8074685c5044382d211509000000000000000000000000000000000d1924303b46505a656f7a858f99a4a59b90867b70665b50463b31261b121d28323d48525d68727d88929da5a59a90857b70665b51473c31261a0e0200000005101b252e373e4346464646464646464646464646464855626f7b8895a2a09386796c5f53464646464646464646464646464646423d352c23180e020013202c3946535f6c7986939c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c908376695d5043362a1d100013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8376695d5043362a1d1000000009141f2b35404b56606a737d868e969da4aaa6a09b9692908d8c8b8a8b8b8d8f92959a9fa5aba7a099918980766d63584e43382d21160b0000000000010c17212c36404a545d666e767d848b91969a9ea2a4a3a09e9d9d9d9d9e9fa1a4a3a09c98938d878079716960574d443a2f251a0f040000000000000000000000020e1a25313d4955606c7884909ba7ada195897d72665a4e42362a1f13070404040404040404040404040404101c2834404c58636f7b87939faba89d9185796d61564a3e32261a0f03000000121f2c3845525e6b767979797979797979786f63574b4034281c100400000000000000000000000000000000000000020e1a26323d4955616d777979797979797979766b5f5346392d201306000000000000000000000000000000000000000000000a16212b353e464b4e4e4e4e4e4e4e4a453d342a1f140800000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000006121c2731394146494a4a4a4a4a4a4a4a4a4a4a525f6b7885929faca89b8e8275685b4e4a4a4a4a4a4a4a4a4a4a4946413a31271d120700000d1925313c4650575c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c616e7b8894a1ada09386796d605c5c5c5c5c5c59534a4035291d1205000f1b2734404c5965717d8995a1a7a89d91867b70665c544c46413e3c3c3c3d3f42484e565f68727d88939ea9aca095897d7165594d4134281c10030000000000000000000000000916222f3b4854616e7a8793a0aca79b8e8175685b4f4236291d1004000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c0000000000000000000000000000010d1925313d4955616c7885919ca8a09a9aa0a99d9185796d6155493d3125190d0100000000000000000000000000000008131f29343e49535e68737d88929da7a2978d82776d62574d42382d2219242f39444f59646f79848f99a4a89d93897e74695f544a3f352a201409000000000009131c252c3337393a3a3a3a3a3a3a3a3a3a3a3a3c4855626f7b8895a2a09386796c5f53463a3a3a3a3a3a3a3a3a3a3a3a3a3936312b231a1107000013202c3946535f6c7986909090909090909090909090909090909090909090909090909090909090909090909090909090908376695d5043362a1d100013202c3946535f6c7980808080808080808080808080808080808080808080808080808080808080808080808080808080808076695d5043362a1d100000020e1a25303c47525d67727c868f98a0a8aaa39b958f8a8683817f7e7d7e7e808285898e939aa1a9aba39b92897e746a5f54493e33271b10040000000007121d28333e48525c666f7880888f969ca1a6a29e9996949290909090919295989ba0a5a49e99928b837b72695f564b41372c21160b0000000000000000000000000915212c3844505c67737f8b97a2aea69a8e82766a5f53473b2f231711111111111111111111111111111115212d3944505c6874808c98a4afa4988c8074695d5145392d21160a00000000121f2c3945525f6b7783868686868686868074685c5044382d2115090000000000000000000000000000000000000007131f2a36424e5a66727d8686868686868684786c5f5346392d201306000000000000000000000000000000000000000000030f1b27323d4750575a5b5b5b5b5b5a564f463b3025190d01000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000b151f272f353a3c3d3d3d3d3d3d3d3d3d3d45525f6b7885929faca89b8e8275685b4e423d3d3d3d3d3d3d3d3d3d3a3630281f160b010000111d2936424d58626869696969696969696969696969696969696969696969696969696e7b8894a1ada09386796d69696969696969645c51463a2e21150800111e2a3743505c6875818d97999a9b978c8075695e544a423a3532302f2f3033373c444d56606b76818d98a4b0a5998d8175695d5044382b1f13060000000000000000000000000713202d3946525f6b7884919daaa99d9083776a5e5145382c1f1306000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c000000000000000000000000000005111d2935414d5965717d8995a1a2968e8e97a2a195897d7165594d41352a1e1206000000000000000000000000000000020d18222c37414c56616b76818b95a0a99e94897e74695f54493f3429202b36404b56606b75808b96a0aba1968c81776c62574d42382e23190e030000000000010a131b21272b2d2d2d2d2d2d2d2d2d2d2d2d2f3c4855626f7b8895a2a09386796c5f5346392d2d2d2d2d2d2d2d2d2d2d2d2c2a262019110800000013202c3946535f6c7983838383838383838383838383838383838383838383838383838383838383838383838383838383838376695d5043362a1d1000121f2b3844515d687173737373737373737373737373737373737373737373737373737373737373737373737373737373737370665a4e4235291c0f000007131f2b36424d58636e79848e98a1aaaaa198918a847e7a777472717171727376797d82888f979fa8ada49a91867c71665a4f44382c201408000000010d18242f3a454f5a646e78818a929aa1a7a49d97928d8a8785848383838486888b8f949aa0a7a49d958d847b71675d53483d32271c1005000000000000000000000004101c27333f4b57636e7a86929ea9ab9f93877b6f63574c4034281e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e25313d4955616d7985919ca8ab9f93877b7064584c4034291d110500000000111e2a37434f5b67727e8a92929292929084786d6155493d3125190e020000000000000000000000000000000000000b17232f3b47535f6a76828e92929292928b7f73675b5044372b1e120500000000000000000000000000000000000000000006131f2b37434f59626767676767676761584d4136291d1104000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000030d151d242a2e303030303030303030303845525f6b7885929faca89b8e8275685b4e42353030303030303030302e2a251e160d04000000121f2c3945525e6a747676767676767676767676767676767676767676767676767676767b8894a1ada093867976767676767676756e6256493d3024170a00131f2c3946525f6b7884898a8c8d8f90877b6f63584d423830292523222223262b323b444f5a65707c8894a0acaa9e9185796c6054473b2e22150900000000000000000000000005111e2a3743505c6975828e9ba7ab9f9286796d6054473b2e221509000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000000000000000000000000000915212d3945515d6975818d99a59e918586929ea59a8e82766a5e52463a2e22160a0000000000000000000000000000000006101b25303a454f5a646f79848e99a3a59b90867b70655b50463b3027323d47525d67727c87929da7a4998f847a6f655a50463b31261c110700000000000000010910161b1e2020202020202020202020222f3c4855626f7b8895a2a09386796c5f5346392c2020202020202020202020201e1a150f0700000000121f2c3945525e6a7476767676767676767676767676767676767676767676767676767676767676767676767676767676767672675b4f4236291c1000101c2935404c565f65666666666666666666666666666666666666666666666666666666666666666666666666666666666666645e54493e32261a0d00000c1824303b47535e6975808b95a0aaaba1988f877f78736e6a67666564646567696d71777d858d969fa9aca2988d82776c6054493d3125190d00000006121e2935404b56616c76808a939ca4aaa299928c86817d7a787776767777797c7f83898f969da6a79f968d83796f645a4f44382d21160a0000000000000000000000000b17232f3a46525e6975818d99a5afa3978c8074685c5044382d2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a36424e5a66717d8995a1ada69a8e83776b5f53473c3024180c00000000000e1b27333e4a56626e7985919d9f9f9f95897d7165594e42362a1e1206000000000000000000000000000000000004101c2834404b57636f7b87939f9f9f9e92867a6e62574b3f33271b0f0300000000000000000000000000000000000003070a0e15212e3b4754606b73747474747473695e5245392c1f130c090500000000000000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000000030c13191e212323232323232323232c3845525f6b7885929faca89b8e8275685b4e4235282323232323232323211e19130c040000000013202c3946535f6c79838383838383838383838383838383838383838383838383838383838895a1ada0948783838383838383837d7164574a3e3124170b0013202c3946525f6b777b7c7e7f81828483776b5f53473c31261e19161516171a2029323d48545f6b7784909ca9ada195887c6f63564a3d3124180b000000000000000000000000020f1b2834414d5966727e8b98a4aea195887c6f63564a3d3125180c000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000000000000000000000000020e1a26323e4a56626d7a86929ea69a8e82828f9ba79e92867a6e62564a3e32261b0f030000000000000000000000000000000009131e28333d48525d67727c87919ca6a2978d82776d62574d42372e39444e59636e79848e99a4a79c92887d73685e53493e34291f140a00000000000000000000050a0f121313131313131313131315222f3c4855626f7b8895a2a09386796c5f5346392c201313131313131313131313110e09040000000000111d2936424d5862686969696969696969696969696969696969696969696969696969696969696969696969696969696969696760564b3f33271a0e000c18242f3a444d545859595959595959595959595959595959595959595959595959595959595959595959595959595959595958534c42382d21160a0004101c2834404c58636f7b86919ca7afa4998f867d756d67625e5b59585757595a5d61666c737b848d97a2adaa9f94887c7165594d4135291c100400000b17232f3a46515d68737d88929ca5aba2989088817a75716e6c6a69696a6b6d6f73777d848b949da7a89f958b81766b6055493e32261b0f03000000000000000000000006121e2a35414d5965717c8894a0aca89c9084786d6155493d373737373737373737373737373737373737373b47525e6a76828e9aa6ada1968a7e72665a4e43372b1f130700000000000a16222e3945515d6975818c98a4aca59a8e82766a5e52463b2f23170b00000000000000000000000000000000000915212c3844505c6874808c97a3aca5998d8175695e52463a2e23170b0000000000000000000000000000000000050a0f13161a1d222f3c4855626f7b8181818181796d6053463a2d201c1815110c080300000000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000000001080d121516171717171717171f2c3845525f6b7885929faca89b8e8275685b4e4235281b1717171717171615120e0802000000000013202c3946535f6c7986909090909090909090909090909090909090909090909090909090929aa5b0a49991909090909090908a7d7164574a3e3124170b00111e2a37434f5a656c6e7071727475777872675b4e42362a1f140d0a09090a0f17212c37434f5b6874818d99a6b0a4978b7e7265584c3f3326190d000000000000000000000000000c1825313e4a57636f7c8895a1ada4978b7e7265594d4034281b0f030000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c0000000000000000000000000006121e2a36424e5a66727e8a96a2a3978a7e7e8b97a3a2978b7e73675b4f43372b1f130700000000000000000000000000000000020c17212c36414b56606b75808a959fa99e94897e74695e54493e35404b55606a75808b95a0aaa0958b80766b61564c41372c22180d0300000000000000000000000002050607070707070707070915222f3c4855626f7b8895a2a09386796c5f5346392c2013070707070707070707060502000000000000000d1925313c4650575c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5b564e443a2e23170b0007131e29323b43494c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b48423a30261c1005000713202c3844505c6874808c97a3aea89d92887d746b635c56524e4c4b4b4b4c4e51555a6169727b86909ba7b0a5998d8275695d5145382c20130700030f1b27333f4b57626e79848f9aa4aea49990867d766f6965615f5e5d5d5d5e6063676c7279828b959faaa79d93887d71665a4f43372b1f13070000000000000000000000010d1925313c4854606c77838f9ba7ada195897d71655a4e4444444444444444444444444444444444444444444b57636f7b87929eaaa89d9185796d61564a3e32261a0e03000000000005111d2935404c5864707b87939fabaa9e92877a6f63574b3f33271c1004000000000000000000000000000000020d1925313d4955616c7884909ca8aca094887c7165594d41352a1e1206000000000000000000000000000000060c11161b1f2326292c2f3c4855626f7b888e8e8e86796d6053463a2e2b2825211d18140e09030000000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000000000000205080a0a0a0a0a0a0a121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f0a0a0a0a0a0a0806020000000000000013202c3946535f6c7986939c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9ea3acb5aba29d9c9c9c9c9c9c978a7d7164574a3e3124170b000f1b27333e49535b606163646667696a6b6960564a3e32261a0e0300000000050f1b27333f4c5865717e8a97a3b0a6998d8073675a4e4134271b0e000000000000000000000000000916222e3b4753606c7985919eaaa79a8e8175685c5043372b1e12060000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c000000000000000000000000000a16222e3a46525e6a76828e9aa69f93877b7b8793a0a79b8f83776b5f53473b2f23180c0000000000000000000000000000000000050f1a242f39444e59636e78838d98a2a59b90857b70655b50453c47515c67727c87929ca7a3988e83796e64594f453a30251b10060000000000000000000000000000000000000000000000000915222f3c4855626f7b8895a2a09386796c5f5346392c2013060000000000000000000000000000000000000914202a353e464c4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4b443c32281d120600010c17202931383d3f4040404040404040404040404040404040404040404040404040404040404040404040404040404040403f3c3730281e140a00000a17232f3c4854606c7985919ca8aea3978c81766b6259514a4642403e3e3e3f4145494f576069747f8a96a1adaa9e9286796d6154483b2f23160a0007131f2b3744505c67737f8a96a1aba89d92887d746b645e595553515050505254575b61687079838d98a4afa4998e83776b5f53473b2f23170a0000000000000000000000000814202c38434f5b67737e8a96a2aea59a8e82766a5e52515151515151515151515151515151515151515151515c6873808b97a3afa4988c8074685d5145392d21160a000000000000010c1824303c47535f6b77838e9aa6afa3978b7f73675c5044382c20140900000000000000000000000000000006121e2a36424d5965717d8995a1ada79b8f84786c6054483d3125190d0100000000000000000000000000040b11171d22262b2f3236393b3d4855626f7b88959b9386796d6053463c3a3734312d29241f1a140e0701000000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f0200000000000000000000000000000013202c3946535f6c798693a0a9a9a7a3a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a3a8b0b8afa7a3a2a2a2a2a2a2978a7d7164574a3e3124170b000a16212d3741494f53555658595b5c5e5f5d574e44392e22160a0000000000000b1724303d4956626f7c8995a2afa89b8e8275685b4f4235291c0f0000000000000000000000000006131f2b3844505d6975828e9aa6a99d9184786c5f53473a2e2216090000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c000000000000000000000000030f1b27333f4b57636f7b87939fa89c9083777784909ca89f94887b7064584c4034281c1004000000000000000000000000000000000008131d28323d47525c67717b86919ba5a2978c82776c62574c434e58636e78838e99a3a69b91877c72675d52483d33281e1309000000000000000000000000000000000000000000000000000915222f3c4855626f7b8895a2a09386796c5f5346392c201306000000000000000000000000000000000000030e19232c343b4042434343434343434343434343434343494d4f4f4f4f4f4f4f4f4d48434343434343434343434343434343423f39322a20160c010000050e1720272c303333333333333333333333333333333333333333333333333333333333333333333333333333333333333332302b251e160c0300000d1926323f4b5864707c8995a1ada99e92867a6f645a50473f3a36333231313335383e454e58626e7985919da9aea295897c7064574b3e3125180c000a16222f3b4754606c7884909ba7aea2978b80766b625a524d49464443434445474a4f565e67717c87929eaaaa9f93887c7064574b3f33261a0e010000000000000000000000040f1b27333f4a56626e7a86919da9aa9e92877b6f635d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d606c7884909ca8ab9f93877b6f64584c4034291d11050000000000000008131f2b37434e5a66727e8a95a1ada79c9084786c6054493d3125190d0100000000000000000000000000000b17232e3a46525e6a76828e99a5aea2968b7f73675b4f44382c20140800000000000000000000000001080f161c22282d32373b3f4245484a4c55626f7b8895a09386796d60534b494744413d3935302b251f19120b040000000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f0200000000000000000000000000000013202c3946535f6c798693a0aca69c96959595959595959595959595959595959595959595979ea8b2a79d96959595959595958a7d7164574a3e3124170b0005101b252f373e4447484a4b4c4e4f5152514c453c33281d11060000000000000815222e3b4855616e7b8894a1aea99c8f8376695c4f4336291c1000000000000000000000000000030f1c2834414d5966727e8a97a3ada094887b6f63564a3e3225190d0100000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000000000000000000000007131f2b37434f5b67737f8b97a3a5988c807474808c98a4a4988c8074685c5044382c2014090000000000000000000000000000000000010b16202b35404a555f6a747f89949ea99e93897e73695e534a55606a75808a95a0a99e948a7f756a60554b40362b21170c02000000000000000000000000000000000000000000000000000915222f3c4855626f7b8895a2a09386796c5f5346392c2013060000000000000000000000000000000000000007111a22292f333636363636363636363636363638424c545a5b5b5b5b5b5b5b5b59534a403636363636363636363636363635332e2820180e0500000000050e151b20242626262626262626262626262626262626262626262626262626262626262626262626262626262626262626231f1a140c040000000f1c2835424e5a6773808c99a5a6a5998d8175695e53483e352e292625242526282d333c46515d6975818d9aa6b1a5988c7f7266594d4033271a0d000c1925323e4b5763707c8894a0aca99d91867a6f645a5048413d3938373637383b3f444c555f6a76828d99a5b0a4988c8073675b4e4236291d10040000000000000000000000000b16222e3a46515d6975818c98a4afa3978b80736a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a717d8995a0aca69a8e83776b5f53473b3024180c0000000000000000030f1a26323e4a55616d7985919ca8aca094897d7165594d41352a1e12060202020202020202020202020204101b27333f4b57636e7a86929eaaa99e92867a6e62564b3f33271b10040000000000000000000000030b121a21272e34393e43474b4e515456585a626f7b8895a09386796d605a585653504d4945413c36312a241d160e0600000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f0200000000000000000000000000000013202c3946535f6c7986939ea9a0948a8888888888888888888888888888888888888888888c96a2aea1958b88888888888888887d7164574a3e3124170b000009131d252d33383a3b3d3e404143444544403b332a21160c000000000000000714212e3a4754616d7a8794a0ada99d908376695d5043362a1d1000000000000000000000000000000c1825313d4a56626e7a87939faba4978b7e72665a4e4235291d110500000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c0000000000000000000000000b17232f3b47535f6b77838f9ba7a195897c70707c8894a0a89c9185786d6155493d3125190d010000000000000000000000000000000000040f19242e39434d58626d77828c97a1a59a90857a70655a515c66717c87919ca7a2978d82786d63584e44392f241a0f0500000000000000000000000000000000000000000000000000000915222f3c4855626f7b8895a2a09386796c5f5346392c20130600000000000000000000000000000000000000000810181e2327292929292929292929292929313d49545e666868686868686868645c52463a2e29292929292929292929292926221d160e060000000000030b12181d202222222222222222222222222222222222222222222222222222222222222222222222222222222222222222201c17110901000000111e2b3744505d6976838f97989a9b96897d7165594d41362c231d1a181818191c212a35404c5965717e8a97a4b0a79a8e8174675b4e4135281b0f000f1b2834414d5a66737f8c98a4b0a6998d8175695e52483e36312d2b2a2a2a2c2e333a434e5965717d8995a2aea89c9083776a5e5145382c1f130600000000000000000000000006121d2935414d5864707c88949faba89c9084787777777777777777777777777777777777777777777777777777828d99a5ada1958a7e72665a4e42372b1f13070000000000000000000a16212d3945515c6874808c98a3afa5998d81756a5e52463a2e22170f0f0f0f0f0f0f0f0f0f0f0f0f0f0f14202c3844505b67737f8b97a3afa5998d8175695e52463a2e22170b0000000000000000000000040c151d242b32393f454a4f53575b5e61636567686f7b8895a09386796d686664625f5c5955514c47423c352f2720181007000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f0200000000000000000000000000000013202c3946525f6c77828d97a29f93877d7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b8894a1ada093867b7b7b7b7b7b7b7b7b7063574a3d3124170a0000010b131b22272b2d2f303233353638383835302921180f05000000000000000814212e3a4754616d7a8794a0adaa9d908376695d5043362a1d1000000000000000000000000000000915212d3a46525e6a77838f9ba7a79b8f82766a5e5245392d21150900000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c000000000000000000000004101c2834404c5864707c8894a0aa9e9185796c6c7884909ca8a195897d7165594d4135291d110600000000000000000000000000000000000007121c27313c46515b66707b85909aa5a1978c82776c6158636d78838e98a3a59a90857b70665c51473c32271d12080000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8895a2a09386796c5f5346392c201306000000000000000000000000000000000000000000060d13171b1c1c1c1c1c1c1c1c1c1c1c2734414d5a667075757575757575756e63564a3e31241c1c1c1c1c1c1c1c1c1c1c1a17120c040000000000020c151d24292d2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2c28221b130a000000131f2c3946525f6b7885898b8c8d8e8f867a6d6155493c31251a110d0c0b0b0d101824303d4956626f7c8895a2aea89c8f8275695c4f4236291c1000101d2a36434f5c6975828e9ba7afa3968a7d7165594d41362c25211e1d1d1d1f2228323d4955616d7986929fabab9f9286796d6053473a2e211408000000000000000000000000010d1924303c48545f6b77838f9aa6aca0958984848484848484848484848484848484848484848484848484848487929eaaa89c9185796d61554a3e32261a0e0300000000000000000005111d2834404c58636f7b87939faaaa9e92867a6e62574b3f33271b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b25313c4854606c7884909ba7aca094887c7065594d4135291e120600000000000000000000040d161e262e363d444a50565b5f63676a6d70727375767b8895a0938679757473716f6c6965615d58534d474039322a221910070000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f02000000000000000000000000000000111e2b37434f5b66707b85909ba3998f857a706f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f7b8894a1ada09386796f6f6f6f6f6f6f6e695f54483b2f231609000000010910161b2125292a2a2a2a2a2b2c2b2a2825201a120a020000000000000a16232f3c4855626e7b8894a1aea99c8f8376695c4f4336291d10000000000000000000000000000005111e2a36424e5a66737e8b97a3ab9e92867a6e6256493d3125190d01000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000000000000000000000814202c3844505c6874808c98a4a69a8e8275696874808c98a4a5998d82756a5e52463a2e22160a000000000000000000000000000000000000000b15202a353f4a545e69737e89939da89e93897e73685f6a747f8a959fa89e93897e74695f544a3f352a20160b010000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8895a0a09386796c5f5346392c2013060000000000000000000000000000000000000000000002070b0e101010101010101010101b2835424e5b6875828282828282827e7165584b3e3225181010101010101010100f0e0a06000000000000000a141e272e35393c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3b38332d251c1208000013202c3946525f6c777b7d7e7f80818284776b5e5245392d20140801000000000815222e3b4854616e7b8794a1aea99c908376695c504336291d1000121e2b3844515e6a7784909daaada094877a6e6155493c30251a14121010111316202c3845515e6a7783909ca9aea194887b6f6255483c2f221609000000000000000000000000000814202b37434f5b66727e8a96a2ada59b939191919191919191919191919191919191919191919191919191919299a3aea4988c8074685c5145392d21160a00000000000000000000000c18242f3b47535f6a76828e9aa5aea2978b7f73675b4f43382c28282828282828282828282828282828282935414d5965717c8894a0aca79b8f84786c6054483c3125190d01000000000000000000030d161f28303840484f555b61666b6f73777a7c7e808283848996a09488838281807d7b7875726d69645e58524b433c342b2219100600000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f020000000000000000000000000000000f1b27333e49545f69747e89939ea1968c82776d6362626262626262626262626262626e7b8894a1ada09386796d626262626262625e574d43372b1f1307000000000a141d252c313537373737373737373735312b241c140d070301010207101a26323e4b5764707d8996a3afa89b8e8275685b4f4235291c0f0000000000000000000000000000010e1a26323e4a56626e7a87939faba2968a7e72665a4e42362a1e1206000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000000000000000000010d1925303c4854606c7884909ca8a2968a7e726564707c8894a0aa9e92867a6e62564a3e32261a0e02000000000000000000000000000000000000030e18232d38424d57626c77818c96a1a59a90857a7066717b86919ca6a1968c81776c62574d43382e23190e04000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b889393939386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000f1b2835424e5b6875828e8f8f8f8f8b7e7165584b3e3225180b00000000000000000000000000000000000006111c26303940454849494949494949494949494949494949494949494949494949494949494949494949494949494949494948443f372e241a0f0300121e2b37434f5b666d6f7071727375767773685c5043362a1d110400000000020714212e3a4754616d7a8794a1aea99c908376695d5043362a1d1000131f2c3945525f6c7885929fabab9e9285786c5f5346392d2014080503010406101d2936424f5b6875828e9ba8afa396897c7063564a3d3023170a00000000000000000000000000030f1b27323e4a56626d7985919da8ada49f9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea3abab9f93877b6f64584c4034281d1105000000000000000000000007131f2b36424e5a66717d8995a1ada79b8f84786c6054483c353535353535353535353535353535353535353a46525d6975818d99a5aea2968b7e73675b4f43382c201408000000000000000000010b151f28313a424a525960676d72777b808386898b8d8e8f90939ba49992908f8e8c8a8885827e79756f69635d554e463d342b22180f04000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f020000000000000000000000000000000b16222d38424d57626c77828c97a19e94897f746a60555555555555555555555555616e7b8894a1ada09386796d60555555555555534d453b31261b0f0300000007111c262f373d42434444444444444443413c362e261e1813100e0e0f1219222c37424e5a67737f8c98a5b1a6998d8073675a4d4134271b0e0000000000000000000000000000000a16222e3a46525e6a76828e9aa6a69a8e82766a5e52463a2e22160b000000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c0000000000000000000005111d2935414d5965717d8995a1aa9e92867a6e62606c7884909ca8a2968a7e72675b4f43372b1f13070000000000000000000000000000000000000007111c26313b45505a656f7a848f99a4a1978c81766d78838d98a2a4998f847a6f655b50463b31261c110700000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b868686868686796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000f1b2835424e5b6875828e9b9c9c988b7e7165584b3e3225180b0000000000000000000000000000000000000b17222e38424b515555555555555555555555555555555555555555555555555555555555555555555555555555555555555554504940362b201408000f1b27333f4a545c61626364666768696a6861574c4034271b0f09090a0a0c0f1219232f3b4855616e7b8894a1aea89c8f8275695c4f4336291c100013202c3946535f6c798693a0acaa9d9184776a5e5144382b1e120500000000010e1b2734414d5a6773818d9aa7b0a4978a7d7064574a3e3124170b00000000000000000000000000000a16222e3945515d6974808c98a4afafabaaa7a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a6aaabaeb2a69a8e82766b5f53473b2f24180c000000000000000000000000020e1a26323d4955616d7884909ca8aca094887c7065594d4242424242424242424242424242424242424242424a56626e7a86929ea9a99d92867a6e62564b3f33271b0f0400000000000000000009131d27313a434c545c646b72787e83888c8f929598999b9c9d9fa4aba39e9d9c9a999794918e8a85817b756e675f584f463d342a20160c010000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0a29f9286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f0200000000000000000000000000000005111b26313b46505b65707a85909aa59b91867c71675c5248484848484848484854616e7b8894a1ada09386796d6053484848484846423b332a1f150a000000010c18232e3841484e5050505050505050504d4840383029231f1c1b1a1c1e232b343d48535f6b77838f9ba7b0a3978a7e7165584c3f3226190d00000000000000000000000000000006121e2a36424e5a66727e8a96a2aa9e92867a6e62564b3f33271b0f040000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c000000000000000000000915212d3945515d6975818d99a5a69a8e82766a5e5c6874808c98a4a79b8f83776b5f53473b2f23170b00000000000000000000000000000000000000000a141f29343e49535e68737d88929da79e93887e747f8a949fa79d92887d73685e53493e34291f150a0000000000000000000000000000000000000000000000000000000000000815222f3b4855616d78797979797979766b5f5246392c1f130600000000000000000000000000000000000000000000000000000000000000000000000f1b2835424e5b6875828e9ba8a5988b7e7165584b3e3225180b0000000000000000000000000000000000000f1b27333f4a545c61626262626262626262626262626262626262626262626262626262626262626262626262626262626262615b52483c3125190c000b17222d38424a5154555758595a5b5c5d5c574f453b2f23181616161617191b1e232b343f4b5763707c8996a2afa79a8e8174685b4e4235281c0f0013202c3946535f6c798693a0acaa9d9084776a5d5044372a1d110400000000000d1a2633404d596673808d99a6b1a4978a7d7164574a3e3124170b000000000000000000000000000005111d2935404c5864707b87939fabb6aea49c98989898989898989898989898989898989898989898989aa1abb6ada195897d72665a4e42372b1f1307000000000000000000000000000915212d3944505c6874808b97a3afa5998d8175695d514e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4f5b67737e8a96a2aea5998d8175695d52463a2e22160b00000000000000000005101b252f39434c555e666e767d83898f94989c9fa2a4a6a7a6a5a6abb0a9a5a4a5a7a5a3a19e9a96918c868079716a61584f463c32281e13080000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c7986939595959286796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f02000000000000000000000000000000000a141f29343e49545e69737e88939ea3988e83786e63594e443c3c3c3c3c3c4854616e7b8894a1ada09386796d6053463c3c3c3c3a36302921180e0300000005111d29343f4a535a5d5d5d5d5d5d5d5d5d59524a423b342f2b292727282b2f353d454f5a65707b87939fabaca094877b6f6256493d3024170b000000000000000000000000000000020e1a26323e4a55616d7985919da9a3978b7f73675b4f43382c2014090000000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c000000000000000000020e1a26323e4a56626d7986929da9a2968a7e72665a57646f7c8894a0ab9f93877b6f63584c4034281c100400000000000000000000000000000000000000030d18222c37414c56616b76818b95a0a59a8f857b86909ba6a0958b80766b61564c42372d22180d030000000000000000000000000000000000000000000000000000000000000714202d3945515c666c6c6c6c6c6c6c6b645a4f43372a1e110500000000000000000000000000000000000000000000000000000000000000000000000f1b2835424e5b6875828e9ba8a5988b7e7165584b3e3225180b000000000000000000000000000000000000121e2b3744505b666e6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6c64594d4135281c0f0006111c262f383f4548494a4b4c4d4f5051504c453d33292222222223232425272b2f353d46505c6773808c98a5b0a4988b7e7266594d4033271a0e0013202c3946535f6c7986929facaa9d9084776a5d5044372a1d110400000000000d1a2633404d596673808c99a6b0a3978a7d7063574a3d3124170a0000000000000000000000000000000c1824303c47535f6b76828e9aa6b2a89c928b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8f9aa5b2a89c9185796d6155493e32261a0e020000000000000000000000000004101c2834404b57636f7b86929eaaa99d92867a6e625b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5f6b77838f9ba7aca094887c7065594d4135291e12060000000000000000010c17222c37414b555e67707880878e959a9fa4a8a6a29f9c9b99989aa0a89e9898999a9c9fa2a6a6a29d97918b837b736a61584e443a2f251a0f0300000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c7986888888888886796c5f5246392c1f130000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f0200000000000000000000000000000000030d18222d37424c57616c77818c96a19f958a80756a60554b40362f2f2f3b4854616e7b8894a1ada09386796d6053463a2f2f2f2d2a251f170f06000000000814212d3945515c656a6a6a6a6a6a6a6a69645c544c46403b3835343435373b40474f57616b76818c98a4afa89c9084786b5f53463a2e211508000000000000000000000000000000000915212d3945515d6974808c98a4a79b8f83776c6054483c3125190e0200000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000000000000000006121e2a36424e5a66727e8a96a2aa9e92867a6e6256535f6b7784909ca8a4988c8074685c5044382c201408000000000000000000000000000000000000000006101b25303a454f5a646f79848e99a3a1968c848d97a2a3988e83796e645a4f453a30251b10060000000000000000000000000000000000000000000000000000000000000004111d2934404a545b5f5f5f5f5f5f5f5f5a52483e32261a0e0200000000000000000000000000000000000000000000000000000000000000000000000f1b2835424e5b6875828e9ba0a0988b7e7165584b3e3225180b00000000000000000000000000000000000013202c3946535f6c787c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c75695c5043362a1d1000000a141d262e34383b3c3d3e3f4142434443403b332c2f2f2f2f2f2f30313234373b40474e58626d7884909ca8aca094887b6f63564a3e3125180c00121f2c3845525e6b7885919eaaaa9e9184776b5e5145382c1f130905030304070f1b2834414e5a6774818d9aa6afa296897c6f6356493d3023160a00000000000000000000000000000007131f2b37424e5a66727d8995a1ada79a8d817e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e8a97a4afa3988c8074685c5145392d21150a0000000000000000000000000000000c17232f3b47525e6a76828d99a5aea2968a7e7368686868686868686868686868686868686868686868686868707c8894a0aba79b8f83776c6054483c3025190d01000000000000000007121e29333e49535d677079828a9299a0a6a9a39e999693908e8c8b8e98a2968c8b8c8e9092969a9ea4a8a39c958d857c736a60564c41362b20140900000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946525f6c787b7b7b7b7b7b7b776b5f5245392c1f120000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f02000000000000000000000000000000000006101b26303b45505a656f7a858f9aa49c91877c72675d52473d32282e3b4854616e7b8894a1ada09386796d6053463a2d2222211e1a140d050000000000091623303c4955626d7677777777777777756d665e57514b47444241414243474b5158616a737d88939ea9aea3978c8074685b4f43372b1e12050000000000000000000000000000000005111d2934404c5864707b87939eaaa094887c7065594d42362a1f130700000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c0000000000000000000a16222e3a46525e6a76828e9aa6a69a8e82766a5e524f5b6773808b97a3a89c9084786c6055493d3125190d01000000000000000000000000000000000000000009131e28333d48525d67727c87919ca69d9490959ea69c91877c72675d52483d33281e14090000000000000000000000000000000000000000000000000000000000000000000c18232e38424a5052535353535353524f4840372c21160a0000000000000000000000000000000000000000000000000000000000000000000000000f1b2835424e5b6875828e939393938b7e7165584b3e3225180b00000000000000000000000000000000000013202c3946535f6c7986898989898989898989898989898989898989898989898989898989898989898989898989898989898376695d5043362a1d100000020b141c23282c2e2f3032333435363737342f34393b3c3c3c3c3c3c3d3e4043474b5158616a747e8995a0aca69b8f83776b5f53473b2e22160900111e2a3744505d6976838f9ca8ac9f9286796d6054473b2f241a141110101113171f2b3743505c6975828e9ba8ada094877a6e6155483b2f221509000000000000000000000000000000030e1a26323e4955616d7985909ca8a99d9185797171717171717171717171717171717171717176828e9aa6ab9f93877b6f63584c4034281c110500000000000000000000000000000007121e2a36424e5965717d8994a0aca79b8f83777575757575757575757575757575757575757575757575757575818c98a4aea2968a7e73675b4f43382c2014080000000000000000010d18242f3a45505a656f78828b949ca4aba49d97928d89868381807e8895a093867e808183868a8e93989ea5a79f978f867c72685d53483c31261a0e03000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f1300121e2b3743505b666d6f6f6f6f6f6f6f6d665b4f43372a1e110000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f0200000000000000000000000000000000000009141e29343e49535e68737d88939da3998e83796e64594f44392f2e3b4854616e7b8894a1ada09386796d6053463a2d201514120e09030000000000000a1623303d495663707c8484848484848480777069625c5753514f4e4d4e5053575c636a737c858f99a4afa89d92867b6f63574b3f33271b0f0200000000000000000000000000000000000c1824303c47535f6b76828e99a5a5998d81756a5e52473b2f24180d01000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c0000000000000000030f1b27333f4b57636e7a87939faba2968a7e7266594d4b57636f7b87939faba195897d7165594d4135291d11050000000000000000000000000000000000000000020c17212c36414b56606b75808a959fa6a09da0a79f948a80756a60554b41362c21170c0200000000000000000000000000000000000000000000000000000000000000000007121c2630383f434646464646464646433e372e251a10050000000000000000000000000000000000000000000000000000000000000000000000000f1b2835424e5b6875828686868686867e7165584b3e3225180b00000000000000000000000000000000000013202c3946535f6c7986939696969696969696969696969696969696969696969696969696969696969696969696969696908376695d5043362a1d10000000020a11181c20212324252627282a2a2a2e373f45484949494949494a4b4d4f53575c636a737c86909ba6a99f94897e73675b4f43372b1f1206000f1c2835424e5b6773808c99a5aea195887c7064584c41362c25211e1d1d1e202329313c47535f6b7884919daaaa9d9185786c5f53463a2d201407000000000000000000000000000000000a15212d3945505c6874808c97a3aea2968a7e7266656565656565656565656565656565656f7b87939faba69a8e82766b5f53473b2f24180c00000000000000000000000000000000020e1925313d4954606c7884909ba7aba0948882828282828282828282828282828282828282828282828282828285919da9a99d92867a6e62564a3f33271b0f03000000000000000007121e2935404b56616c76818b949da6aaa19a938c86827d7a7775737b8895a09386797374777a7d82878d949ba3a9a1988e847a6f64594e42372b1f1307000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f13000f1b27333f4a545c6162626262626262615c54493e33271b0f0000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f02000000000000000000000000000000000000020d17222c37414c57616c76818b96a0a0958b80756b60564b41362e3b4854616e7b8894a1ada09386796d6053463a2d201308050200000000000000000916222f3c4955626f7b8890909090909089827a736d6863605d5b5a5a5b5d5f63686e747c858e97a1abaca1978c81756a5e53473b2f23170b00000000000000000000000000000000000008131f2b37424e5a65717d8994a0a99e92867a6f63584c4035291e1207000000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c000000000000000007131f2b37434f5b67737f8b97a3aa9e92867a6e62554947535f6b77838f9ba7a5998d8175695d51463a2e22160a000000000000000000000000000000000000000000050f1a242f39444e59636e78838d98a2acaaaca2978d82786d63594e44392f241a0f0500000000000000000000000000000000000000000000000000000000000000000000000b141e262d3337393939393939393937322c251c1309000000000000000000000000000000000000000000000000000000000000000000000000000e1b2835414e5a677379797979797979797064574b3e3125180b00000000000000000000000000000000000013202c3946535f6c798693a0a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a29d908376695d5043362a1d100000000000060c101315161718191b1c1d202c364049505555555555565657585a5c5f63686e747c858e98a2aaa1988d83786d61564a3f33271b0f03000d1a26333f4b5864707c8995a0aca4988c8074685d52483e37312d2b2a2a2a2c2f343b434d58646f7b8894a0aca59a8d8175695c5044372b1e12050000000000000000000000000000000005111c2834404c57636f7b87939eaaa69a8f83776b5f585858585858585858585858585c6874808c97a3ada195897d72665a4e42362b1f130700000000000000000000000000000000000915202c3844505c67737f8b97a2aea499918e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8f97a2ada4998d8175695d52463a2e22160b0000000000000000000b17232f3a46515d68737e88939da6aaa1988f88817b76716d6a686f7b8895a09386796d686a6d71767b8289919aa4aaa0968b81756a5f53473c3024170b000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f13000b17222d38424a51555555555555555554514a41382d22160b0000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f020000000000000000000000000000000000000006101b25303a454f5a646f7a848f99a49c92877d72675d52483d333b4854616e7b8894a1ada09386796d6053463a2d201307000000000000000000000815222e3b4855616e7b88949d9d9d9d9b938c857e79746f6c6a68676768696c6f73797f868e97a0a9ada49a8f857a6f64594d42362a1f1307000000000000000000000000000000000000030e1a26323d4955606c77838f9aa6a3978b8074685d51463a2f23180d020000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000000000000000b17232f3b47535f6b77838f9ba7a69a8e8276695d5145434e5b67737e8b97a3aa9e92867a6e62564a3e32261a0e0200000000000000000000000000000000000000000008131d28323d47525c67717b86929eabb6aa9d91867b71665c51473c32271d1308000000000000000000000000000000000000000000000000000000000000000000000000020c141c22272b2c2c2c2c2c2c2c2c2a26211a130a01000000000000000000000000000000000000000000000000000000000000000000000000000d1926323f4b5661696c6c6c6c6c6c6c6c685e53483c2f23160a00000000000000000000000000000000000013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09d908376695d5043362a1d1000000000000000040708090a0c0d0e0f1925313d48525b61626262626263636466686b6f73797f868e97a0a9a1988f867b71665b50453a2e22160b00000a17232f3c4854606c7884909ba6a89c91857a6e645a5048423d3937363637393b40454c555f6a75808c98a4aca095897d7165594d4034281b0f0300000000000000000000000000000000000c18232f3b47535e6a76828e9aa5ab9f93877b6f64584c4b4b4b4b4b4b4b4b4b4b55616c7884909ca8a89c9085796d6155493e32261a0e02000000000000000000000000000000000004101c27333f4b57626e7a86929ea9aba29c9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9ca1a9aba094887c7064594d4135291d1206000000000000000004101c28343f4b57626e79848f9aa4aca2988f867d76706a65615e626f7b8895a09386796d605e61656a70778088929ca6a89d92877b7064584c4034281b0f030013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130006111c2630384045484848484848484848453f382f261b11050000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f02000000000000000000000000000000000000000009141e29333e48535d68727d88929da3998e84796f645a4f443a3b4854616e7b8894a1ada09386796d6053463a2d201307000000000000000000000714212e3a4754616d7a8794a0aaaaaaa59e97908a84807c79767574747476787b80848a9198a0a9ada49b92887e73685e53473c31251a0e02000000000000000000000000000000000000000915212d38444f5b66727d8995a0a89c9185796e62574b4035291e13070000000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c0000000000000004101c2834404c5864707c8894a0aca2968a7d7265594d413e4a56626e7a87939faba2968a7e72665a4e43372b1f13070000000000000000000000000000000000000000000a141f29343e49535d68727d87929eabb1aa9d91867b71665c51473c32281d130800000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1e202020202020201f1e1a1610090100000000000000000000000000000000000000000000000000000000000000000000000000000a16222e3a454f585e5f5f5f5f5f5f5f5f5c564d42372b1f130700000000000000000000000000000000000013202c3946535f6c7986939393939393939393939393939393939393939393939393939393939393939393939393939393908376695d5043362a1d100000000000000000000000000000000f1c2835414d59646d6f6f6f6f6f6f70717375787b80848a9198a0a59e978f867d746a5f554a3f34281d110600000713202c3844505c67737e8a95a0aaa1968b80766c625a534d49464443434445484b50575e67717b86919da8a59a8f84786d6155493d3124180c00000000000000000000000000000000000007131f2a36424e5a65717d8995a1aca4988c8074685c50453e3e3e3e3e3e3e424d5965717d8995a1ada3988c8074685c5045392d211509000000000000000000000000000000000000000b17232e3a46525e6975818d99a5b0ada9a8a8a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a8a8a8acb2a79b8f83776c6054483c3025190d0100000000000000000814202c3844505c68737f8a96a1aca59a90867c746c645e595555626f7b8895a09386796d6053555a5f666d76808a949faba3988c8074685c5044372b1e12060013202c3946535f6c798693a0ac9f9286796c5f5246392c1f1300000a141e262e34393b3c3c3c3c3c3c3c3b39342e261d140a000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f020000000000000000000000000000000000000000020c17212c37414c56616b76818b96a0a0968b81766b61564c413b4854616e7b8894a1ada09386796d6053463a2d201307000000000000000000000713202d3a4653606c798693a0acb0a7a09ea09b95908c888583828181818285878b90959ca2aaaba39b928980766c61574c41362b201409000000000000000000000000000000000000000004101c27333e4a56616d78848f9aa6a2968a7f73685c51463b2f24190e0200000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c000000000000000814202c3844505c6874808c98a4aa9e9286796d6155493d3a46525e6a76828e9aa7a79b8f83776b5f53473b2f23170b000000000000000000000000000000000000000007111c26303b45505a656f7a848f99a4a6a4a6a2978d83786e63594e44392f241a10050000000000000000000000000000000000000000000000000000000000000000000000000000060b0f121313131313131313110e0a050000000000000000000000000000000000000000000000000000000000000000000000000000000006121d28333d464d515353535353535353504b443b30261a0f0300000000000000000000000000000000000013202c3946535f6c7986868686868686868686868686868686868686868686868686868686868686868686868686868686868376695d5043362a1d10000000000000000000000000000000101d2a3743505d69767c7c7c7c7c7c7d7e808284878b90969ca29f99938c857d746b62584e43382e23170c010000030f1c28333f4b57626d78838e98a2a79c92887e756c655e595552515050515254575c62697079838d98a3a79e93897e73675c5044382d201408000000000000000000000000000000000000020e1a26313d4955616c7884909ca7a89c9185796d6155493d32323232323a46525e6a76828e99a5aa9f93877b6f63584c4034281c11050000000000000000000000000000000000000006121e2a35414d5965707c8894a0acb7afa59e9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9ca3acb7aea2968a7e73675b4f43372c2014080000000000000000000b1724303c4854606c7884909ca7aa9e93897e746a625a534d4955626f7b8895a09386796d6053494e545b646e78838e9aa6a99d9184786c5f53473a2e2115080013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000020c141c23292d2f2f2f2f2f2f2f2f2f2c29231c140b02000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000000000000000020302010000121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f0200000000000000000000000000000000000000000005101a252f3a444f5a646f79848e99a39d92887d72685d53483e4854616e7b8894a1ada09386796d6053463a2d2013070000000000000000000006131f2c3945525f6c7885929faba99e9591959ca19c989492908e8e8e8e8f9194979ca1a7aca7a099918980776d645a50453b30251a0e030000000000000000000000000000000000000000000b16222d3944505b67727e8995a0a79c9085796e62574c41352a1f140900000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c000000000000000c1824303c4854606c7884909ca8a69a8e8275695d51453936424e5a66727e8a96a2ab9f93877b6f63574b3f34281c1004000000000000000000000000000000000000040e18232d38424d57626c76818b96a0a29a979ba39f948a80756a60564b41362c21170c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c17212b343b4145464646464646464644403a32291f140900000000000000000000000000000000000000131f2c3946525f6b7679797979797979797979797979797979797979797979797979797979797979797979797979797979797974685c4f4336291d10000000000000000000000000000000111d2a3744505d6a778489898989898a8b8c8e9194979c9d9a97938e88827b736b625950463c31271c1106000000000b17232f3a45515c67727c869099a2a49990877e766f6a65615f5d5d5d5d5f6164686d737a838b959fa79f958c82776c61564b3f34281c1004000000000000000000000000000000000000000915212d3844505c6873808b97a3ada195897d71665a4e42362a2527333f4b57636e7a86929eaaa69a8e82766a5f53473b2f23180c0000000000000000000000000000000000000000010d1925313c4854606c77838f9ba7b3a99e938e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e919ba6b2a99d91867a6e62564a3f33271b0f030000000000000000000e1b2733404c5864717d8995a1aca4998d82776c62585048424855626f7b8895a09386796d605346434a525c66727d8995a2ada094887b6f6256493c3023170a0013202c3946535f6c798693a0ac9f9286796c5f5246392c1f13000000020b12181d20222222222222222222201d18120a0200000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000000000000003080c0e0f0f0d0a06121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f020000000000000000000000000000000000000000000009131e28333d48525d67727d87929ca4998f84796f645a4f454854616e7b8894a1ada09386796d6053463a2d2013070000000000000000000004121e2b3845515e6b7784919eaba6998d848b92989ea3a19e9c9b9a9a9b9c9ea0a4a8aaa6a19b958e877f776e655c52483e33291e13080000000000000000000000000000000000000000000005111d28343f4a56616d78838f9aa5a1968a7f73685d52473b30251a0f04000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000000000005111d2935414d5965717d8995a1ada2968a7d7165594d4135323e4a56626e7a86929eaaa4988c8074685c5044382c2014080000000000000000000000000000000000000b15202a353f4a545e69737e88939da59a908a919ba69c91877c72675d52483e33291e140900000000000000000000000000000000000000000000000000000000000000000000000000000000050a0c0e0e0e0e0e0e0e0e0e0e0c08040000000000000000000000000000000000000000000000000000000000000000000000000000050f19222a303538393939393939393938342f2820170d0200000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a62584c4034271b0e000000000000000000000000000000111d2a3744505d6a778490969696969697999b9d9a9593918e8b87827d777069615950473e342a20150b000000000006121e2934404b55606a747e879099a0a2999088817b75716e6b6a69696a6b6d7074787e858c959da49d958d837a70655b50453a2e23170b000000000000000000000000000000000000000004101c28343f4b57636f7a86929eaaa69a8e82766a5e52473b2f232c38444f5b67737f8b97a3ada195897d71665a4e42362b1f13070000000000000000000000000000000000000000000814202c38434f5b67737e8a96a2aea79a8d81818181818181818181818181818181818181818181818a97a4b0a4988d8175695d51463a2e22160a00000000000000000000111d2a36434f5c6874818d999fa29f93887c70655a50463e3c4855626f7b8895a09386796d6053463a404a55616d7986929faba3978a7d7164574b3e3125180b0013202c3946535f6c798693a0ac9f9286796c5f5246392c1f13000000070f171d222628282828282828282826221d170f0700000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000000000000080e14181b1c1c1a1611121f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f0200000000000000000000000000000000000000000000010c17212c36414b56606b75808b95a0a0968b81766c61564c4854616e7b8894a1ada09386796d6053463a2d2013070000000000000000000001111e2a3744515d6a7784909daaa6998c8080878d93989c9fa2a4a6a7a7a7a6a5a3a19d9a95908a847d756d655c534a40362c22170d0200000000000000000000000000000000000000000000000b17222e3945505b67727d89949fa79c90857a6e63584d42362b20150a000000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c0000000000000915212d3945515d6975818d99a5aa9e9285796d6155493d312d3a46525e6a76828e9aa6a89c9084786c6054483d3125190d010000000000000000000000000000000008121d27313c46515b66707b85909aa59e93897f8a949fa3988e84796f645a4f453a30251b110600000000000000000000000000000000000000000000000000000000000000000000000000050b1116191b1b1b1b1b1b1b1b1b1a18140f0902000000000000000000000000000000000000000000000000000000000000000000000000000710181f25292c2c2c2c2c2c2c2c2c2b28231d160e0500000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5e5950463b3024180c000000000000000000000000000000111d2a3744505d6a7784909da2a2a3a3a4a5a79e92888684827e7b76716b655e574f473e352c22180e030000000000010c18232e39444e58626c757e878f969ca19a938c86817d7a7877767677787a7c80848a90979e9f99938b837a71685e54493e33281d12060000000000000000000000000000000000000000000b17232f3b46525e6a76828d99a5aa9e93877b6f63574b3f3328303c4854606c7884909ba7a89c9085796d6155493d32261a0e02000000000000000000000000000000000000000000040f1b27333f4a56626e7a85919da9a89c9085797474747474747474747474747474747474747475828d99a5aba094887c7064594d4135291d120600000000000000000000131f2c3945525e6b77848d909295988f83776b5f54493e343c4855626f7b8895a09386796d6053463a3945515e6a7784909da9a5988c7e7265594c3f3226190c0013202c3946535f6c798693a0ac9f9286796c5f5246392c1f13000006101921282e32353535353535353534322e2821190f06000000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000000010a1219202427292826221d161f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f020000000000000000000000000000000000000000000000050f1a242f3a444f59646e79848e99a39d92887d73685e534954616e7b8894a1ada09386796d6053463a2d2013070000000000000000000000101d2a3643505d697683909ca9a69a8d81757c82878c90939698999a9a9a99989794918e89847f79726b635b534a41382e241a100500000000000000000000000000000000000000000000000006111d28343f4a56616c77838e99a4a1968b8074695e53483d32271c11060000000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c0000000000020e1a26323d4955616d7985919da9a69a8d8175695d5145392d2935414d5966727e8a96a2aca195897d7165594d4135291d1105000000000000000000000000000000040f19242e39434e58636d77828c97a1a2978c8278838e98a3a0958b81766b61574c42372d22180d030000000000000000000000000000000000000000000000000000000000000000000000060f161d22252728282828282828282724201a140c0300000000000000000000000000000000000000000000000000000000000000000000000000060d14191d1f20202020202020201f1c18120c040000000000000000000000000000000000000000000a16212c3740484f52535353535353535353535353535353535353535353535353535353535353535353535353535353535353524e473e342a1f1307000000000000000000000000000000111d2a3744505d6a7784909da4a4a4a5a6a8a99d9084807d7975706a66605a544d453d352c231a10060000000000000007121d27323c47505a636c757d848b91969a9d97928d8a8785848383848586898c90959b9b98938e88817971685f564c42372d22170c0100000000000000000000000000000000000000000006121e2a36424d5965717d8894a0aca3978b8073685c5044382c35414d5965707c8894a0aca3978c8074685c5044392d21150900000000000000000000000000000000000000000000000b16222e3a46515d6975818c98a4ada195897d7167676767676767676767676767676767676e7a86929eaaa79b8f83776b6054483c3024190d010000000000000000000013202c3946535f6c787e818386898b8b7f73675b4f43372f3c4855626f7b8895a09386796d6053463a36434f5c6975828f9ca9a6998c807366594c403326190d0013202c3946535f6c798693a0ac9f9286796c5f5246392c1f1300020d18222b333a3f4142424242424242413e3a332b21180d020000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000000009131c242b30343635322e28201f2c3845525f6b7885929faca89b8e8275685b4e4235281b0f0200000000000000000000000000000000000000000000000008131d28323d48525d67727c87919ca49a8f857a6f655a5054616e7b8894a1ada09386796d6053463a2d20130700000000000000000000000f1c2936424f5c6975828f9ca8a79a8e817470767b808386898b8c8d8e8d8d8c8a8885827d79736e676059514941382f261c120800000000000000000000000000000000000000000000000000000c17222e3944505b66717d88939ea79c91867a6f64594e43382d22170c0100000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c000000000006121e2a36424e5a66727e8a96a2aea295897d7165594d41352925313d4955616d7986929eaaa5998d8175695d5145392e22160a0000000000000000000000000000010c16212b36404b555f6a747f89949ea69b90857b717c87919ca79d92887d73685e53493f342a1f150a00000000000000000000000000000000000000000000000000000000000000000000050f1821282e3234343434343434343433302c251e150c020000000000000000000000000000000000000000000000000000000000000000000000000002080d1012131313131313131312100c07010000000000000000000000000000000000000000000005101a252e373e434646464646464646464646464646464646464646464646464646464646464646464646464646464646464645423c352c22180d02000000000000000000000000000000111d2a3744505d6a7784909797979798999b9da0968f8c8985817b767069615951483f362c22170d0200000000000000000b16202b353e48515a636b727980858a8d90949c9996939190909090919395989c96928f8c87837d766f675f564d443a30261b100500000000000000000000000000000000000000000000020e1925313d4854606c78848f9ba7a89c9084786c6054493d313a46515d6975818d99a5aa9e93877b6f63574c4034281c1005000000000000000000000000000000000000000000000006121d2935414d5864707c88939faba59a8e82766a5e5a5a5a5a5a5a5a5a5a5a5a5a5a5b67737f8b97a2aea2968a7e73675b4f43372b2014080000000000000000000000121e2b3744505c666e7174777a7c7f827c6f63574a3e322f3c4855626f7b8895a09386796d6053463a36434f5c6976828f9ca9a6998c807366594c403326190d0013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130008141f2a343d454b4e4e4e4e4e4e4e4e4e4a453d33291f13080000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000006111b252e363c4042423e39322b232c3845525f6b7885929faca89b8e8275685b4e4235281b0f02000000000000000000000000000000000000000000000000010c16212b36404b55606b75808a959fa1968c81766c615754616e7b8894a1ada09386796d6053463a2d20130700000000000000000000000f1b2835424e5b6874818e9ba7a89b8f8275686a6f73777a7c7e80818181807f7d7b7875716d68625c564f473f372f261d140a00000000000000000000000000000000000000000000000000000006111d28333e4a55606b76828d98a3a2978c81766b5f54493e33281e130800000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000000000a16222e3a46525e6a76828e9aa6aa9d9185796d6155493d3125212d3945515d6975818d99a5a99e92867a6e62564a3e32261a0e020000000000000000000000000009131e28323d47525c67717c86919ba59f94897e746a75808b95a0a49a8f857a70655b50463b31271c12070000000000000000000000000000000000000000000000000000000000000000020d17212a32393e414141414141414141403d3730271e130900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131c252c3237393939393939393939393939393939393939393939393939393939393939393939393939393939393939393936312b231a110600000000000000000000000000000000111d2a3744505d6a77848a8a8a8a8a8b8c8e9194989c9995918c87817a736b635a51483e34291f14090000000000000000040e19232c363f48515961686e74797d81848a96a3a2a09e9d9d9c9d9ea0a2a5988c8583807b77716b655d564d443b32281e14090000000000000000000000000000000000000000000000000914202c3844505b67737f8b96a2aca095897d7165594d41353e4a56626e7a86929da9a69a8e82766a5f53473b2f23180c000000000000000000000000000000000000000000000000010d1924303c48545f6b77838f9aa6aa9e92877a6f63574d4d4d4d4d4d4d4d4d4d4d54606c77848f9ba7a99d91857a6e62564a3e33271b0f0300000000000000000000000f1b28333f4a545d6265686a6d707375756c6054473b2e2f3c4855626f7b8895a09386796d6053463a3945515e6a7784909daaa5988c7f7265594c3f3226190c0013202c3946535f6c798693a0ac9f9286796c5f5246392c1f13000d1925303b464f565a5b5b5b5b5b5b5b5a564f453b3024190d0000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d110400000000000000000000000c17222d3740474d4f4e4a443c352e2c3845525f6b7885929faca89b8e8275685b4e4235281b0f0200000000000000000000000000000000000000000000000000040f1a242f39444e59636e78838e98a39d93887e73695e54616e7b8894a1ada09386796d6053463a2d20130700000000000000000000000e1b2734414d5a6774818d9aa7a99c8f8376695f63676b6d7072737374747372716f6c6965615c57514b443d352d251d140b02000000000000000000000000000000000000000000000000000000000b17222d38444f5a65707b86919ca89d92877c71665b50453a2f24190e03000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000000030f1b27333f4b57636e7a87939eaaa5998d8175695d5145392d201d2935414d5965717d8995a1ada2968a7e72665a4e42362b1f130700000000000000000000000005101a252f3a444f59636e78838d98a2a3988d82786d636e79848e99a4a1968c82776d62584d43382e23190f040000000000000000000000000000000000000000000000000000000000000008131e29333c444a4d4e4e4e4e4e4e4e4e4d48413930251a0f03000000000000000000000000000000000000000000000000000000000000000205080a0c0d0e0f1010100f0f0e0c0b090604010000000000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a25201911080000000000000000000000000000000000111d2a3743505d6a767d7d7d7d7d7d7e808285888c91979e9d98928c857d756c635a50453b30251a0f03000000000000000007111a242e37414a535b636a71777c81848b96a3a5a2a09f9e9e9fa0a2a4a5988c84817d78726c655d554d443b322920160c0200000000000000000000000000000000000000000000000004101c27333f4b56626e7a86929da9a5998d81756a5e52463a434f5b67727e8a96a2ada195897d71665a4e42362a1f13070000000000000000000000000000000000000000000000000008141f2b37434f5b66727e8a96a1ada3978b7f73675c504441414141414141414d5864707c8894a0aca4988d8175695d51463a2e22160a0000000000000000000000000b17232e38424b5256585b5e6163666969635a4f44382b2f3c4855626f7b8895a09386796d6053463a424b56616d7a86929faba4978a7e7164584b3e3225180b0013202c3946535f6c798693a0ac9f9286796c5f5246392c1f1300101d2935414d586167686868686868686761574c4135291c100000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d11040000000000000000000004111d28343f4952595c5b564e473f38313845525f6b7885929faca89b8e8275685b4e4235281b0f02000000000000000000000000000000000000000000000000000008121d27323d47525c67717c87919ca59a8f857a70655b616e7b8894a1ada09386796d6053463a2d20130700000000000000000000000d1a2733404d596673808c99a6aa9d9083776a5d575b5e6163656667676766656462605d5955504b464039322b231b130b02000000000000000000000000000000000000000000000000000000000005111c27323d49545f6a75808b96a1a4998d82776c61564b40362b20150a000000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c0000000007131f2b37434f5b67737f8b97a3ada195897d7165594d4135281c1925313d4955616d7985919da9a69b8f83776b5f53473b2f23170b0000000000000000000000020d17222c37414b56606b75808a959fa69c91867b71665d67727d88929da89e93897e74695f554a40352b20160b010000000000000000000000000000000000000000000000000000000000000c1824303b454e565a5b5b5b5b5b5b5b5b59534b41372b2014080000000000000000000000000000000000000000000000000000000003070b0e111416181a1b1c1c1c1c1c1b1a19171513100d090501000000000000000000000000000000000000000000000000010910161a1e1f2020202020202020202020202020202020202020202020202020202020202020202020202020202020201f1d1a140e070000000000000000000000000000000102030f1c2935424e5a656e707070707071727375787c81868c939ba49e978f877e756b61574c42372b20140900000000000000000b16202b353f49535c656d757c82888d91949c9c999694929292929395989b9d94908d89847e776f675f564c42382e23190e03000000000000000000000000000000000000000000000000000b17222e3a46525d6975818d99a4aa9e92867a6e62564b3f48535f6b77838f9ba7a89c9084786d6155493d31261a0e0200000000000000000000000000000000000000000000000000030f1b27323e4a56616d7985919da8a79c9084786c6054483d34343434343945515d6975818d99a4aba094887c7064584d4135291d110600000000000000000000000006111c2730394046494c4f5154575a5c5d5951483e33272f3c4855626f7b8895a09386796d605346464c545d67727e8a96a2aea195887c6f6356493d3023170a0013202c3946535f6c798693a0ac9f9286796c5f5246392c1f1300121f2c3845515e69737575757575757573695d5145382b1f120000000000000000000f1c2835424f5b6875828f9084776a5d5044372a1d1104000000000000000000000814202d3945505b6468676059514a423b3845525f6b7885929faca89b8e8275685b4e4235281b0f020000000000000000000000000000000000000000000000000000010b16202b35404b55606a75808a949fa1978c82776c62616e7b8894a1ada09386796d6053463a2d20130700000000000000000000000c1926323f4c5965727e8c98a5aa9e9184776b5e514f52545758595a5a5a5a59575553504d4945403a352e282119120a01000000000000000000000000000000000000000000000000000000000000000b16212c37424d58636f7a85909ba59f94897e73685d52473c31261c11060000000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c000000000b17232f3b47535f6b77838f9ba7a99d9185796d6155493d30241814202c3845515d6975818d99a5ab9f93877b6f63574b3f33271c1004000000000000000000000a141f29333e48535d68727d87929ca6a0958a80746a5f56606b76818c96a1a59b90867b71665c51473d32281d1308000000000000000000000000000000000000000000000000000000000000101c2935414c5760666767676767676767655d53483c3024180b0000000000000000000000000000000000000000000000000000040a0e13171b1e2123252728292929292928272624221f1c1916120d0803000000000000000000000000000000000000000000000000050a0e111313131313131313131313131313131313131313131313131313131313131313131313131313131313131313110d0903000000000000000000000003070a0c0d0e0f10111926323d49535c626363636363646567696c70757b8289929ba4a19991877d73695e53483c3125190e0200000000000006111c27323d47515b656e777f878e94999d9b96918c89878685858586888b8f93999d99958f89817971685e544a40352a1f14090000000000000000000000000000000000000000000000000006121e2935414d5964707c8894a0aba2978b7f73675b4f434c5864707c88949faba3978b8074685c5044392d2115090000000000000000000000000000000000000000000000000000000a16222d3945515d6974808c98a4aca094897c7165594d4135292727323e4a56626e7985919da9a79b8f83776b5f54483c3024180d01000000000000000000000000000a151e272f353a3d404245484a4d50504d473f362c222f3c4855626f7b8895a09386796d60534d51575e666f79848f9aa6aa9e9286796d6054473b2e2215080013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c7982828282828282796c5f5246392c1f13000000000000000005101c2835424f5b6875828f9084776a5d5044372a1d1106000000000000000000000916232f3c4955616d75726a635c544d453e45525f6b7885929faca89b8e8275685b4e4235281b0f02000000000000000000000000000000000000000000000000000000040f19242e39434e58636e78838d98a29e93897e7469616e7b8894a1ada09386796d6053463a2d20130700000000000000000000000b1825323e4b5865717e8b98a4ab9e9285786b5f524545484a4c4d4d4d4d4d4c4b494744413d39342f29231d160f0700000000000000000000000000000000000000000000000000000000000000000004101b26313c47525d68737e89949fa59a8f84796e63594e43382d22170d0200000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000004101c2834404c5864707b8894a0aca5998d8175695d5145382c2014101c2834404c5864707c8995a1ada3988c8074685c5044382c20140800000000000000000006111b26303b45505a646f79848e99a3a3998e83786e63584f5a646f7a858f9aa5a2978d83786e63594e44392f241a10050000000000000000000000000000000000000000000000000000000000121f2b3844515d697274747474747474746f64594c4033271a0d000000000000000000000000000000000000000000000000040a10151a1f23272a2d2f3233343536363636353432312e2c2926221d19140e08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f141718191a1b1c1d1e212c37414a5156575757575757585a5c60646970778089929ca7a3998f857a6f64594d42362a1e12060000000000000c17222e39444e59636d77808991989fa098908a85807d7a797878797a7c7e83888e949ca09a938b837a70665c51473c31251a0f03000000000000000000000000000000000000000000000000010d1925303c4854606b77838f9ba7a79b8f83776c605448515d6974818c98a4aa9e93877b6f63574c4034281c100400000000000000000000000000000000000000000000000000000005111d2934404c58646f7b87939faba5998d8175695d52463a2e222b37434f5a66727e8a96a2aea2968a7e72675b4f43372b2014080000000000000000000000000000030c151d242a2e303336393b3e414343413c362d24222f3c4855626f7b8895a09386796d6054595d62686f78818b95a0aba59a8e8276695d5145382c1f13060013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c79868e8e8e8e8e86796c5f5246392c1f1300000000000000000b16212c38434f5b6875828f9084776a5d5044392e23170c010000000000000000000a1723303d4a5663707d7c756d665f57504845525f6b7885929faca89b8e8275685b4e4235281b0f020000000000000000000000000000000000000000000000000000000007121d27323c47515c66717b86919ba59a90857b70666e7b8894a1ada09386796d6053463a2d20130700000000000000000000000b1724313e4a5764707d8a97a4ac9f9286796c5f5346393b3d3f40414141403f3e3c3a3734312d28231e18120b0400000000000000000000000000000000000000000000000000000000000000000000000914202b36414c57626c77828d98a3a1968b80756a5f544a3f34291e130900000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c0000000814202c3844505c6874808c98a4ada195897d7165594d4034281c100c1824303c4854606c7884919ca9a89c9084786c6054483c3024190d0100000000000000030e18232d38424c57616c76818b96a0a79d92877c72675c5148535e68737e89939ea99f948a80756a60564b41362c21170c0200000000000000000000000000000000000000000000000000000000131f2c3946525f6c79818181818181818174675a4d4134271a0e0100000000000000000000000000000000000000000001080f151b21262b2f3336393c3e4041424343434242403f3d3b3835322e29251f1a140d0600000000000000000000000000000000000000000000000000000000000000000306090b0c0e0f0f1010100f0e0d0b09070401000000000000000000000000000000000000000000000000000000000000050d141b202325262728292a2b2c2c2f384046494a4a4a4a4a4b4c4d5054585e656d76808b95a0aba1978c81756a5e52463a2e221609000000000005111c28343f4a55606b758089929ba3a0978e867f7974706e6c6b6b6c6d6f72777c838a939ca59d958c82786e63584d42372b201408000000000000000000000000000000000000000000000000000814202c37434f5b67727e8a96a2aca094887c7064584c55616d7985919da9a59a8e82766a5e53473b2f23170c00000000000000000000000000000000000000000000000000000000000c1824303b47535f6b76828e9aa6a99e92867a6e62564a3e3327303b47535f6b77838f9ba6a99d9185796e62564a3e33271b0f03000000000000000000000000000000030b13191e212427292c2f3234363735312b25292d303c4855626f7b8895a09386796d606165696e737a818a939da7aa9f94897d7165594d4135291c10040013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c7986939b9b9b9286796c5f5246392c1f130000000000000006111c27323e49545f6a76828f9084776c61554a3f34291d12070000000000000000000a1723303d4a5663707d877f787069615a534b525f6b7885929faca89b8e8275685b4e4235281b0f0200000000000000000000000000000000000000000000000000000000000b15202a35404a555f6a747f8a949fa2978c82776d6e7b8894a1ada09386796d6053463a2d20130700000000000000000000000a1723303d4a5663707c8996a3ada09386796d6053473a2f313233343434343331302e2b2825211c18120d0b0b0a080500000000000000000000000000000003070a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0e19242f3a45505b66717c87919ca79c91877c71665b50453b30251a0f05000000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c0000000c1824303c4854606c7884909ca8a99d9185796d6155483c3024180c0814202c3844505c6874808c98a4aca094897c7165594d4135291d1105000000000000000b151f2a343f49545e69737e88939da7a0968b80756b60554a414c57616c77828d97a2a69c91877c72675d52483e33291e140900000000000000000000000000000000000000000000000000000000131f2c3946525f6c79868e8e8e8e8e8e8174675a4d4134271a0e010000000000000000000000000000000000000000040b131a20262c32373b3f4346494b4d4e4f4f4f4f4f4e4d4c4a4745423e3a35302b251f1811090200000000000000000000000000000000000000000000000000000004080c0f121517191a1c1c1c1c1c1c1b19181613110d0a06010000000000000000000000000000000000000000000000000000040e171f262c303233343536373839393835353a3d3d3d3d3d3d3e3f4144484d545c646e79848f9ba6a89d92867a6f63564a3e3225190d00000000000915212d3944505b67727c87919ba4a2988e857c746d6864615f5f5e5f6063666b7178818a949ea79e948a80756a5e53483c3024190d00000000000000000000000000000000000000000000000000030f1b27333e4a56626e7985919da9a4988d8175695d515a66727e8a96a1ada195897d71655a4e42362a1e1307000000000000000000000000000000000000000000000000000000000007131f2b37424e5a66727d8995a1ada2968a7e73675b4f43372b34404c5864707b87939faba4988c8175695d51453a2e22160a000000000000000000000000000000000001080d1215171a1d202225282a2a28282d3135393d404855626f7b8895a09386796d696d7175797e858c939ca5aca3988e83786c6155493d3125190d000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0a89f9286796c5f5246392c1f13000000000000000c17222d38444f5a65717c879294897d72675c50453a2f23180d0200000000000000000a1723303d4a5663707d8a8a827b736c645d56525f6b7885929faca89b8e8275685b4e4235281b0f020000000000000000000000000000000000000000000000000000000000040e19232e38434d58636d78828d97a29e94897e746e7b8894a1ada09386796d6053463a2d20130700000000000000000000000916232f3c4955626f7c8895a2ada194877a6e6154473b2e24262727272727262523211f1c18181818181818181714100b05000000000000000000000002090f13161818181818181818181818181818181818181e29343f4a545f6a75808b95a0a3988d82776d62574c41372c21160c010000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c000005111d2935414d5965717d8995a1ada5998d8175695d5144382c20140804101c2834404c5864707c8894a0aca5998d8175695d5145392d21150a00000000000007121c27313c46515b65707a858f9aa4a49a8f84796e64594e443a45505b65707b86909ba6a3998e84796f645a4f453a30261b1106000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929b9b9b9a8e8174675a4d4134271a0e0100000000000000000000000000000000000000050e151d242b32383d42474b4f525557595b5b5c5c5c5c5b5a585654514e4a46413c36302a231b130b03000000000000000000000000000000000000000000000000060b1014181c1f2224262728292929292827262422201d1a16120d08030000000000000000000000000000000000000000000000010c16202931373c3e3f4041424344454645413b33303030303031313234373c424a525d67737e8a96a2aea3978b7f73665a4e4135281c0f03000000010d1a26323e4a55616d78838e99a3a79b90867c726a625c58555352525254565a60666f78828d98a3a69c91867b7064584d4135291d1104000000000000000000000000000000000000000000000000000a16222e3a45515d6975818c98a4a99d9185796d62565f6b76828e9aa6a89c9084786d6155493d31261a0e020000000000000000000000000000000000000000000000000000000000030e1a26323e4955616d7985909ca8a79b8f83776b5f54483c303945515c6874808c98a4ab9f94887c7064584c4135291d1106000000000000000000000000000000000000000105080b0e101316191d23292f34393d4145494c5055626f7b8895a09386797275797d81858a90969da5aca39a91877c71665b5044382d211509000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f1300000000000006121d28333f4a55606b77828d989a8f83786d62564b40352a1e130800000000000000000a1723303d4a5663707d8a948d857e766f6760595f6b7885929faca89b8e8275685b4e4235281b0f0200000000000000000000000000000000000000000000000000000000000007121c27313c46515b66717b86909ba59b90867b707b8894a1ada09386796d6053463a2d20130700000000000000000000000815222e3b4855616e7b8894a1aea195887b6e6255483c2f25252525252525252525252525252525252525252524211c160f07000000000000000000050d141a1f2325252525252525252525252525252525252525252d38434e59636e79848f99a49f94897e73695e53483d33281d12080000000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00000915212d3945515d6975818d99a5ada195897d7165584c4034281c1004000b17242f3c4854606c7884909ca8a99d9186796e62564a3e32261a0e0200000000040f19242e38434d58626d77828c97a1a89d93887d72685d52473d333e49545f69747f8a949faaa0958b81766c61574c42372d22180e030000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929fa8a79a8e8174675a4d4134271a0e01000000000000000000000000000000000000060f171f272f363d43494e53575b5f62646667686969696968676563605d5a56524d47413b342d251d150c03000000000000000000000000000000000000000000060c11171c2024282b2e3032343536363636353433312f2c2926221e19140e090200000000000000000000000000000000000000000007121d28323b42484b4c4d4e4f50515253514c453c3228242424242426282b3038414b56626e7a86929faba79b8f8276695d5044372b1e110500000005111d2936424e5a66727d8994a0aaa1968a7f746a6058514c4846454546474a4f555d66707b87939eaaa3988c8175695d5145392d2014080000000000000000000000000000000000000000000000000006111d2935414c5864707c87939faba2968a7e72665a636f7b87939faba3978b8074685c5044392d211509000000000000000000000000000000000000000000000000000000000000000a15212d3945505c6874808c97a3aba094887c7064584c40353d4955616d7985919da8a69b8f83776b5f54483c3024180d010000000000000000000000000000000000000000000000020a121a21282e343a4044494d5155595c60636f7b8895a093867b7e8285898d91969ba1a8a9a19a91897f756a60554a3f33281c1004000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000010d18232e3945505b66717d88939ea095897e73685c51463b3024190e03000000000000000a1723303d4a5663707d8a96978f888179726a635f6b7885929faca89b8e8275685b4e4235281b0f02000000000000000000000000000000000000000000000000000000000000000a15202a353f4a545f69747e89949ea2978d82777b8894a1ada09386796d6053463a2d20130700000000000000000000000814212e3a4754616d7a8794a0ada296897c6f6256493c32323232323232323232323232323232323232323232302d282119110700000000000000040e171f262b2f313232323232323232323232323232323232323232323c47525d67727d88929da59b90857a6f655a4f443a2f24190f0400000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c00020e1925313d4955616d7985919da9a99d9185796c6054483c3024180c000007131f2b37434f5b6874808c98a4aea2968a7e72665a4e42362a1e1207000000010c16202b35404a555f6a747e89949ea8a1968c81766b61564b41362d37424d58626d78838e98a3a79d92887d73685e53493f342a1f150a0000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e010000000000000000000000000000000000060f182129313941484e545a5f63686b6e70727475757676757473726f6d6a66625d58534d463f372f271e150c03000000000000000000000000000000000000030a11171d23282c3034383b3d3f41424243434242413f3e3b3936322e2a25201a140d0600000000000000000000000000000000000000000c18242f3a444d5458595a5b5c5d5e5f5f5d574e44392e2217171718191b1f262f3a45525e6a7783909da9aa9e9185786b5f5246392c2013060000000714202d3945525e6a76828e9aa6a99d9185796e62584e46403c393838393b3e434b545f6a76828e9aa7a99d9186796d6155493c3024170b00000000000000000000000000000000000000000000000000010d1824303c48535f6b77838e9aa6a69a8e82766a5e6874808c98a3aa9e92877b6f63574b4034281c10040000000000000000000000000000000000000000000000000000000000000005111c2834404c57636f7b87929eaaa4988c8175695d514539424e5a66727d8995a1ada2968a7e72665b4f43372b1f14080000000000000000000000000000000000000000000000020b141c242b323940464b5055595d6165686c6f727b8895a19489878a8e9195999da2a7aaa49e97908880766d63594e43382d22170b00000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f13000000000007131e29343f4b56616c78838e99a4a69b8f84796e63574c41362a1f1409000000000000000a1723303d4a5663707d8a96a19a928b847c756d666b7885929faca89b8e8275685b4e4235281b0f0200000000000000000000000000000000000000000000000000000000000000030e18232d38434d58626d77828c97a29e93887d7b8894a1ada09386796d6053463a2d20130700000000000000000000000713202d3a4653606d798693a0aca3968a7d7063574a3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3d39332b23190f050000000000010c16202930373c3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e404b56616b76818b96a1a1978c81766b61564b40362b20160b00000013202c3946535f6c798693a0ab9e9285786b5e5865727e8c98a5a6998c7f7265594c3f3226190c0006121e2a36424e5a66727e8a96a2aea5998d8175685c5044382c2014080000030f1b27333f4b57636f7b8894a0aca69a8e83766b5f53473b2f23170b00000008131d28323d47525c66717b86909ba5a59a90857a6f655a4f443a2f26313b46515c66717c87919ca7a49a8f857a70655b50463b31271c110600000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e0100000000000000000000000000000000040e18212a333b434b52595f656b6f74777a7d7f81828283838281807e7c7976726e69645e575049413930271e150b0100000000000000000000000000000000050d141b22282e33383d414447494c4d4e4f4f4f4f4f4e4c4a4845423e3a35302b251f18110902000000000000000000000000000000000003101c2834404b565f6466676769696b6b6c6960564a3e3225190c0a0b0c0f141d2936424f5c6875828f9ba8aca093867a6d6054473a2d2114070000000a16232f3c4855616e7a86939faba6998d8175685d51463c35302d2c2c2c2e3239424e5a66727e8b97a4aea2968a7d7165584c3f33261a0d000000000000000000000000000000000000000000000000000008141f2b37434f5a66727e8a95a1ab9f93877b6f636c7884909ca8a59a8e82766a5e52473b2f23170b0000000000000000000000000000000000000000000000000000000000000000000c18232f3b47535e6a76828e9aa5a99d9185796d61564a3e47535e6a76828e9aa6a99d9185796e62564a3e32271b0f0300000000000000000000000000000000000000000000020b141d262e363d444b51575c6165696d7175787b7f828996a29b9493979a9ea1a5a9a7a39e99938c857e766d645b51473c32271c110600000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f1300000000020d19242f3a45515c67727e89949fabaca1968a7f74695d52473c31251a0f040000000000000a1723303d4a5663707d8a969da49d958e877f78706b7885929faca89b8e8275685b4e4235281b0f02000000000000000000000000000000000000000000000000000000000000000007111c26313b46505b66707b85909aa59a8f837b8894a1ada09386796d6053463a2d201307000000000000000000000006131f2c3946525f6c7985929faca4978a7d7164574b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b49443d352b21160b000000000007121d28323b42484b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4f5a646f7a858f9aa49d93887d72675d52473d32271d1207000013202c3946535f6c798693a0a09e9285786b5e5865727e8c98a0a0998c7f7265594c3f3226190c000a16222e3a46525e6a76828e9aa6aca195897c7064584c4034281c10040000000b17232f3b47535f6b77838f9ba7ab9f93877b6f63574b3f33271b0f0300010d19242f39444e59636e78838d98a2a99e93897e73685e53483d33281f2a343f4a55606a75808b95a0aba1968c82776d62584d43382e23170c00000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e01000000000000000000000000000000020c16202a333c454d555d646b71767b8084878a8c8d8e8f908f8f8e8d8b8986827e7a756f69625b534b423930271d1309000000000000000000000000000000070f171f262d33393f44494d505356585a5b5c5c5c5c5b5a595754524e4a46413c36302a231b140c030000000000000000000000000000000005121f2b3844515d6870727374757677787972665a4d4134271b0e020000030f1b2835414e5b6874818e9ba8aea194877b6e6154483b2e2115080000000c1825323e4b5764707d8a96a2afa3978a7e7165584c40352a23201f1f202227313d4a56636f7c8895a2aea6998d8174675b4e4135281c0f0200000000000000000000000000000000000000000000000000030f1b26323e4a56616d7985919ca8a3978b7f7367717c8995a1aca195897d71655a4e42362a1e130700000000000000000000000000000000000000000000000000000000000000000007131f2a36424e5a65717d8995a0aca2968a7e72665a4e424b57636f7b87939faaa4988c8175695d5145392e22160a00000000000000000000000000000000000000000000000a141d262f3840484f565c62686d7176797d8185888b8e929ba6a5a0a0a3a6aaa7a39f9b97928d87817b746c645b52493f352b20150b0000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000008141f2a35404c57626d78848f9aa5b1b2a79c90857a6f63584d42372b20150a0000000000000a1723303d495663707c848b939aa1a098918a827b737885929faca89b8e8275685b4e4235281b0f020000000000000000000000000000000000000000000000000000000000000000000a151f2a343f49545e69747e89939ea0958a7e8894a1ada09386796d6053463a2d201307000000000000000000000005121f2b3845515e6b7884919eaba4988b7e716558585858585858585858585858585858585858585858585858554f473d33271c1004000000000c18232f3a444d535758585858585858585858585858585858585858585858585858585d68737d88939da4998f84796e64594e44392e23180c000013202c3946535f6c7986939393939285786b5e5865727e8c939393938c7f7265594c3f3226190c000e1a27333f4a56626e7a87929ea0a09d9185786c6054483c3024180c0000000007131f2b37434f5b67737f8b97a0a0a0978b8073675c5044382c2014070005111e2a35414b56606b75808a959fa0a0978d82776c61574c41372c2118232e38434e59636e79848e99a0a09e93897e74695f554a3f34281c1004000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e010000000000000000000000000000000a141e28323c454e575f676f757c82878c909396989a9b9c9c9c9c9b999795928f8a86817a746d655d544b42392f251b100600000000000000000000000000071019212931383e454a5055595d60636567686969696968676563615e5a56524d47423b342d251e150d040000000000000000000000000000000613202c3946535f6c797f8081828384858275685c4f43362a1e130c0a090a101c2935424f5b6875828e9ba8aea194887b6e6154483b2e2115080000000d1a2633404c5966727f8c98a5aea295887c6f6256493d3024181412121316222e3b4754616d7a8793a0ada89c8f8276695c5043362a1d100400000000000000000000000000000000000000000000000000000a16212d3945515d6874808c98a3a79b8f83776b75818d99a5a89c9084786c6155493d31251a0e02000000000000000000000000000000000000000000000000000000000000000000020e1a26313d4955616c7884909ca7a69a8e83776b5f5347505c6874808b97a3ab9f93887c7064584c4135291d11050000000000000000000000000000000000000000000008121c262f38414a525960676d73787d82868a8d9194989b9ea4adaeaaa7a4a19e9a97938f8b87827c767069625a524940372d23190f040000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f13000000030e1a25303b46525d68737e8a95a0abb7b8ada2968b8075695e53483d31261b100500000000000916222f3b4854606a727a81888f979ea39b948d857e7885929faca89b8e8275685b4e4235281b0f02000000000000000000000000000000000000000000000000000000000000000000030d18232d38424d57626c77828c97a19b90848894a1ada09386796d6053463a2d201307000000000000000000000002111e2b3744515d6a7784909daaa5988c7f72656565656565656565656565656565656565656565656565656561594f44382c20140800000000101c2834404b565e64656565656565656565656565656565656565656565656565656565656c76818b96a1a0968b80756b60554b4034281c10040013202c3946535f6c7986868686868685786b5e5865727e8686868686867f7265594c3f3226190c00111e2a36434f5b67737f8b93939393938d8174685c5044382c20140800000000020e1b27333f4b57636f7b8793939393939084786c6054483c3023170a000814212d3a46525d67727c87919393939390867b70655b50453a30251a111c27323c47525d67727d88929393939390867b71665c5045382c1f1306000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e01000000000000000000000000000006111b26303a444e576069717980878d93989ca0a3a4a2a09f9f9f9fa1a3a4a19e9b96918c857e776f665d544b41372c22170c01000000000000000000000007101a222b333b424950565b6065696c6f71737475767675757472706d6a67625e59534d463f372f271f160d03000000000000000000000000000006121f2c3845525e6b78848d8e8f90919084776b5f52463a2f251d1816161719202c3844515d6a7683909ca9ada194877a6d6154473b2e2114080000000e1b2734414d5a6774818d9aa7aea194887b6e6154483b2e22150805050713202d3946535f6c798693a0acaa9d9084776a5d5144372a1e1104000000000000000000000000000000000000000000000000000005111d2834404c58636f7b87939faaa094887b6f7985919da9a3978b8074685c5044382d21150900000000000000000000000000000000000000000000000000000000000000000000000915212d3844505c68737f8b97a3ab9f93877b6f63584c55606c7884909ca8a69b8f83776b5f53483c3024180c01000000000000000000000000000000000000000000050f1a242e38414b535c646b72797f84898e9296999da1a4a7aaafaba39e9b9895918e8b87837f7b76706b655e57504840372e251b1107000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000914202b36414d58636e7985909ba6b2bdbeb3a89c91867b7064594e43382c21160b000000000007131f2c38434e5861686f767d858c939ba29e9790888185929faca89b8e8275685b4e4235281b0f020000000000000000000000000000000000000000000000000000000000000000000006111b26303b46505b65707a858f9aa1968e9099a4ada09386796d6053463a2d201307000000000000000000000000101d2a3643505d697683909ca9a6998d807371717171717171717171717171717171717171717171717171716b6055483c3023160a00000000121f2b3844505c68707171717171717171717171717171717171717171717171717171717171717a848f99a59c92877c72675c5145382c1f130600131f2c3946525f6b7679797979797979756a5e58647079797979797979797165584b3f3225190c00121f2c3945525f6b7783868686868686867c7064584c4034281c100400000000000a16222e3a47535f6b7783868686868686867c7064574b3e3125180b000916232f3c4955626e7984868686868686867f74695f54493e34291e130a15202b35404b56606b76818686868686868683786d6054473b2e211408000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e0100000000000000000000000000020d18222d38424c566069727b838b92999ea4a5a09b989593929292939496999ca0a5a29d97908981786f665d53493e34291e130700000000000000000000061019232c343d454d545b61676c7175797c7e80818283838282817e7c7a76736e69645e585149413931281f150c020000000000000000000000000004111d2a3743505c6975828e9a9c9c9d93877b6f63574c41372e2825232324262a323d4854606c7985929eabac9f9386796d6053473a2d2014070000000e1b2834414e5b6774818e9ba8aea194877a6d6154473b2e21140802020613202c3946535f6c7986929facab9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000c18242f3b47535f6b76828e9aa6a4988c80737d8995a1aa9e92877b6f63574b3f34281c1004000000000000000000000000000000000000000000000000000000000000000000000004101c28343f4b57636e7a86929eaaa3988c8074685c505965717d8995a1aca2968a7e72665b4f43372b1f1408000000000000000000000000000000000000000000000b16212c36404a535d656e757d848a90959a9ea2a6a8a5a19fa0a5a499928e8b8885827e7b77736f6a655f5a534d463e362e251c130900000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000040f1b26313c47535e6974808b96a1acb8c3c4b9aea3978c81766a5f54493e32271c110600000000030f1b27323d464f565d656c737a828990979ea19a938b8b94a0ada89b8e8275685b4e4235281b0f0200000000000000000000000000000000000000000000000000000000000000000000000a141f29343e49535e69737e88939d9f9b9ca2abada09386796d6053463a2d201307000000000000000000000000101c2936424f5c6975828f9ca8a79a8d817e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7d7064574a3e3124170b0000000013202c3946535f6c797e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e8996a2a3998e83786d6054473a2d21140700111e2a37434f5a646b6c6c6c6c6c6c6c6b6359545f686c6c6c6c6c6c6c6c685f54483c3024170b00121f2c3845525e6b767979797979797979776c6054483c3024180c00000000000006121e2a36424e5a66727979797979797979797064574b3e3125180b000916232f3c4955626e787979797979797979776d62584d42372d22170d040e19242f39444f5a646f787979797979797979776d6054473a2e211408000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e010000000000000000000000000007131e29343f49545e68727b848d959da4a7a09a948f8c89878585858687898c90959aa0a7a29b938b82786f655a50453a2f24190d020000000000000000040e18222b353e464f575f666c72787d8185888b8d8e8f90908f8e8d8b8986837f7a756f69625b534b433a31271e140a00000000000000000000000000010f1b2834414d5a66737f8b97a4a9a3978b7f73685d52494039343130303032363c444e5965707c8995a1adaa9d9184786b5e5245392c1f13060000000e1b2834414e5b6774818e9aa7aea194887b6e6155483b2f2216100f0f1014212d3a4753606d798693a0acaa9e9184776b5e5144382b1e110500000000000000000000000000000000000000000000000000000007131f2b36424e5a66717d8995a1a89c908477818d99a5a5998e82766a5e52473b2f23170b000000000000000000000000000000000000000000000000000000000000000000000000000b17232f3b46525e6a76818d99a5a89c9085786d61555e6a76828d99a5a99d9185796d62564a3e32261b0f0300000000000000000000000000000000000000000006121d28333d48525c656f7780878e959ba1a6a9a4a09c989592949ca09488827f7c7975726e6b67635e59544e48423b342c241c130a0100000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f1300000a15212c37424d59646f7a86919ca7b2bec6c6bfb4a99d92877c70655a4f44382d22170c00000000000a15202b343d444c535a616870777e868d949ba29d97969ca6b1a89b8e8275685b4e4235281b0f020000000000000000000000000000000000000000000000000000000000000000000000020d18222d37424c57616c76818c96a1a7a8acb4ada09386796d6053463a2d2013070000000000000000000000000f1b2835424e5b6875818e9ba8a99d928b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8a7d7164574a3e3124170b0000000013202c3946535f6c79868b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8f99a4aaa094877a6d6154473a2e211407000e1a26323e48525a5f5f5f5f5f5f5f5f5e59514d565d5f5f5f5f5f5f5f5f5d564d43382c20140800111d2a36424e5a646b6c6c6c6c6c6c6c6c6b655b5044382c201407000000000000020e1a26323e4a5660696c6c6c6c6c6c6c6c6c685e53483c2f23160a000814212d3a46525d666c6c6c6c6c6c6c6c6c6c655b51463b31261b10060007121d28333d48535e676c6c6c6c6c6c6c6c6c6c655b5044382c1f1306000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e01000000000000000000000000020d19242f3a45505b66707a848d969fa7a69d968f89847f7c7a797878797b7d8084898f969da5a59d948a81766c61574c41352a1e130700000000000000000b15202a343d475058616970777e84898d919597999b9c9c9c9c9b9a9895938f8b86817a746d655d554c433930261c1107000000000000000000000000000c1925323e4a57636f7b87939faba79c9085796f645b524b45413e3d3c3d3f42464d56606b76818d99a5b1a79a8e8275695c5043372a1d11040000000e1a2734414d5a6773808d99a6afa296897c7063574a3e32261f1c1b1b1c1f24303c4955626e7b8794a1ada99d9083766a5d5044372a1d1104000000000000000000000000000000000000000000000000000000020e1a26323d4955616d7884909ca8a094877b85919da9a195897d7165594e42362a1e12070000000000000000000000000000000000000000000000000000000000000000000000000006121e2a36414d5965717c8894a0aca195897d716559636e7a86929eaaa4988c8175695d5145392e22160a000000000000000000000000000000000000000000000c17232e39444f5a646e7781899299a0a7a8a29d9894908c89868a96a0938679736f6c6966625e5b57524e48433d373029221a120a010000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130005101b27323d48545f6a75818c97a2adb9b9b9b9b9b9afa4988d82766b60554a3f33281d120600000000040f19222b333a414850575e656c747b828991989fa3a3a7aeb5a89b8e8275685b4e4235281b0f0200000000000000000000000000000000000000000000000000000000000000000000000006101b25303b45505a656f7a858f9aa4afb8b9ada09386796d6053463a2d2013070000000000000000000000000e1b2734414d5a6774818d9aa7aea49c98989898989898989898989898989898989898989898989898978a7d7164574a3e3124170b0000000013202c3946535f6c7986939898989898989898989898989898989898989898989898989898989898989aa1aaaea194877a6d6154473a2e211407000a16212c3740484f5253535353535353524e48444b515353535353535353514c443b31261b1004000e1a26323d48525a5f5f5f5f5f5f5f5f5f5f5b53493f33281c0f03000000000000000a16222e39444e575d5f5f5f5f5f5f5f5f5f5c564d42372b1f13070005111d2935404b545c5f5f5f5f5f5f5f5f5f5f5b534a3f342a1f14090000010b16212c36414c555c5f5f5f5f5f5f5f5f5f5f5b534a3f34281c1004000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e0100000000000000000000000007121e2a35414c57626d77828c969fa8a69d948b847d7873706d6c6b6b6c6e7074787d848b939ba4a69c93887e73685d52463b2f23180c0000000000000007121d27313c464f59626a737b82898f95999da1a4a2a09e9e9e9e9fa1a4a29f9b97928c867e776f675e554b42382e23190e030000000000000000000000000916222e3b47535f6b77838f9aa6aca1968b81766d645c56514d4a49494a4b4e52585f68727c87929ea9aea3978b7e7266594d4134281b0f020000000d1926333f4c5965727e8b98a4b0a4988b7e72665a4e4238302b292828292b2f36414c5864717d8a96a3afa79b8e8275685c4f4236291c1003000000000000000000000000000000000000000000000000000000000915212d3944505c6874808b97a3a3978b7f8995a1a89c9084786c6155493d31251a0e0200000000000000000000000000000000000000000000000000000000000000000000000000020d1925313d4854606c78848f9ba7a59a8e82766a5e67737f8b97a3ab9f93887c7064584c4035291d110500000000000000000000000000000000000000000005111d28343f4b56616b76808a939ba3aba49d97918c8884807c7b8895a09386796d63605d5956524e4b46423d37322c251f18100800000000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f13000a16222d38434e5a65707b87929da8acacacacacacacacaa9e93887d71665b5045392e23170c000000000007101921282f373e454c535b626970787f868d959ca3aaacaca89b8e8275685b4e4235281b0f020000000000000000000000000000000000000000000000000000000000000000000000000009141e29333e49535e68737d88929da8acacaca09386796d6053463a2d2013070000000000000000000000000d1a2733404d596673808c99a6acaca7a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4978a7d7164574a3e3124170b0000000013202c3946535f6c798693a0a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a6abacaca194877a6d6154473a2e2114070005101a252e373e43464646464646464645423d3a4044464646464646464644403a32291f150a00000a15212c3640484f525353535353535353524f4941372d22170b000000000000000005111d28323c454c51535353535353535353504b443b30261a0f0300010d19242f39424a50535353535353535353524f4941382d23180d03000000050f1a25303a434b50535353535353535353524f4941382d23170c00000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e010000000000000000000000000c17232f3b46525d68737e89949ea8a79d948a8179726c6763615f5f5f606164686c72798189929ca6a49a8f85796e63574c4034281c10040000000000020e19232e39434d57616b747c858d949aa0a5a29d999593919191919395979b9fa5a29d979089817970675d544a3f352a20150a00000000000000000000000006121e2b37434f5b66727e89949faaa79d92887f766e67615d5957565656585a5e6369717a848e99a4afa99e92867a6e62564a3e3125190c000000000b1824313d4a56636f7c8895a1ada79b8e82766a5f544a413c3836353536373b4048525d6975818d99a5b0a4988b7f73665a4d4034271b0e010000000000000000000000000000000000000000000000000000000005101c2834404b57636f7b87929ea79b8f878d99a5a3978b8073685c5044382c2115090000000000000000000000000000000000000000000000000000000000000000000000000000000914202c38444f5b67737e8b96a2aa9e92867a6e626b77848f9ba7a69a8f83776b5f53483c3024180c010000000000000000000000000000000000000000000915212d3945505c67727d88929ba5aba29a928c86817c7774707b8895a09386796d6054504d4a46423e3a36312c26211a1614110e0a050000000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f13000f1b27333e4954606b76818d98a0a0a0a0a0a0a0a0a0a0a0a0998e83776c61564b3f34281c10040000000000070f161e252c333b424950575f666d747c838a9199a0a0a0a09b8e8275685b4e4235281b0f0200000000000000000000000000000000000000000000000000000000000000000000000000020d17222c37414c56616c76818b96a0a0a0a0a09386796d6053463a2d2013070000000000000000000000000c1926333f4c5965727f8c98a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0978a7d7164574a3e3124170b0000000013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a094877a6d6154473a2e211407000009131c252c323739393939393939393936322f3438393939393939393938342f2820170d030000040f1a242e363d4346464646464646464646433e372f261b11060000000000000000000b16212a333b414546464646464646464644403a32291f140900000007121d2730383f4446464646464646464646433e382f261c1106000000000008131e2831393f4446464646464646464646433e382f261c110600000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e01000000000000000000000004101c2834404b57636e7a85909ba5aba0968b82786f68615b57545252525355585c61676f77808a949ea29f968b8074685c5145382c1f1306000000000008141f2a35404b555f69737d868f979ea5a49d97918c89868584848586888b8f9499a0a7a29b938b82796f665c51473c31261b10040000000000000000000000020e1a26323e4a56616d78838e99a3ada49a91888079726d69666463636364676a6e747b838c96a0aaada2978c81756a5e52463a2e221509000000000915222e3b4754606c7885919da8ab9f93877b70665c534c48444242424244474b525a646f7a85919da9aca094887c6f63574a3e3225190c0000000000000000000000000000000000000000000000000000000000000c17232f3b47525e6a76828e99a5a19893969fa99e92867a6f63574b3f34281c100400000000000000000000000000000000000000000000000000000000000000000000000000000004101b27333f4b56626e7a86929da9a2968a7e7266707c8894a0aca2968a7e72665a4f43372b1f1308000000000000000000000000000000000000000000000d1925313d4a55616d78848f99a4aca2999088817a75706b676f7b8895a09386796d605346413d3a363230302e2c2a272522201e1a16100902000000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f1300111e2a37434f5b66717c8793939393939393939393939393939393897d72675c5045382c1f1306000000000000050c131a222930373e464d545b636a717880878e93939393938e8275685b4e4235281b0f02000000000000000000000000000000000000000000000000000000000000000000000000000005101b25303a454f5a646f79848f93939393939386796d6053463a2d2013070000000000000000000000000c1825323e4b5865717e8b939393939393939393939393939393939393939393939393939393939393938a7d7164574a3e3124170b0000000013202c3946535f6c798693939393939393939393939393939393939393939393939393939393939393939393939393877a6d6154473a2e2114070000010a131a21262a2c2c2c2c2c2c2c2c2c2a2624282b2c2c2c2c2c2c2c2c2b28241e160e050000000008121c242c32363939393939393939393937332d251d140a00000000000000000000050f18212930353839393939393939393938342f2820170d02000000010b151e272e33373939393939393939393937332d261d140a000000000000020c161f272e34383939393939393939393937332d261d140a0000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e0100000000000000000000000814202c3844505c68747f8b96a1aca59a8f84796f665d564f4b4846454546484b50565d656e78828d9896928f8b85796d6054473b2e21140800000000020e1925303b47515c67717b858f98a1a9a29a928b85817c7a78777778797b7e83888e959da6a59d948b81786d63584e43372c21150a0000000000000000000000000a16222e3945505b66717c87919ba4aca39a928a847e797572706f6f707173767a80868d959ea8aea49b90867b7064594d41362a1e12050000000006131f2b3844505c6874808c97a3aea3988d82776e655e5854514f4e4e4f5153575d646c76808b96a2ada69b8f84786c5f53473b2f22160900000000000000000000000000000000000000000000000000000000060b0e131e2a36424e5965717d8994a0aaa3a0a2a8a5998e82766a5e52463b2f23170f0b060000000000000000000000000000000000000000000000000000000000000000000000000000000b17222e3a46525d6975818d99a4a79b8f83766a74808c98a4a99d9185796d61564a3e32261b0f0300000000000000000000000000000000000000000003101c2935414d5a66727e8a95a0aba59b90877e766f69645f626f7b8895a09386796d6053463a3130363b3d3d3b383634312f2d2a27221b140b020000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946525f6b778286868686868686868686868686868686868684786d6054473b2e21140800000000000000010910171e252d343b424a51585f676e757c848686868686868275685b4e4235281b0f0200000000000000000000000000000000000000000000000000000000000000000000000000000009131e28333e48535d68727d8686868686868686796d6053463a2d2013070000000000000000000000000b1824313e4a5764717d8686868686868686868686868686868686868686868686868686868686868686867d7164574a3e3124170b0000000013202c3946535f6c798686868686868686868686868686868686868686868686868686868686868686868686868686867a6d6154473a2e211407000000010910161a1e1f202020202020201f1e1a181c1f20202020202020201f1c18130c050000000000000a121a21262a2c2c2c2c2c2c2c2c2c2c2a27221b130b020000000000000000000000060f171f24292c2c2c2c2c2c2c2c2c2c2b28231d160e050000000000030c151c23282b2c2c2c2c2c2c2c2c2c2c2b27221b140b0200000000000000040d151d23282b2c2c2c2c2c2c2c2c2c2c2b27221b140b020000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e0100000000000000000000000c1824303c4955616d7884909ca7ab9f94887d72685e544c443f3b3938393a3c3f444b535c66707b878d8a86837f7c776d6054473a2e2114080000000008131f2b36414d58636e78838d97a1aaa3999088817a75706d6b6a6a6b6d6f72777d848b949da6a69d938a7f756a5f54493d32261b0f03000000000000000000000005111d28343f4a55606a757f89929ba3aba49c958f8985827f7d7c7c7d7e8082868b91989fa8aca49c92897e74695e53483c3125190d0100000000030f1c2834404c58646f7b86919ca6a99e948980776f6964605d5c5b5b5c5d6063686e767e88929da8aa9f958a7e73675b4f43372b1f13060000000000000000000000000000000000000000000000000000030a11171b1d1e25313d4955606c7884909ca0a0a0a0a0a095897d7165594e42362a1e1e1b17110b030000000000000000000000000000000000000000000000000000000000000000000000000006121e2935414d5964707c8894a0ab9f93877b6f7884909ca8a4988c8174695d5145392d22160a0000000000000000000000000000000000000000000006121f2b3844515d6a76828e9aa6aa9f94897e756c645e5855626f7b8895a09386796d6053463a323a42474a4a474543403e3b3936322d251d140a0000000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f1300131f2c3946525f6b767979797979797979797979797979797979797979776d6054473a2e211408000000000000000000050d141b222931383f464e555c636a72797979797979797973675a4e4135281b0e02000000000000000000000000000000000000000000000000000000000000000000000000000000020c17212c36414c56616b767979797979797979766b5f5346392d2013060000000000000000000000000a1723303d4a56636f78797979797979797979797979797979797979797979797979797979797979797979796f63574a3d3124170a00000000131f2c3946525f6b76797979797979797979797979797979797979797979797979797979797979797979797979797979776c6053473a2d2114070000000000050a0e11131313131313131313110e0c1012131313131313131312100c070100000000000000000810161a1e1f2020202020202020201e1b1610090100000000000000000000000000060d13191d1f2020202020202020201f1c18120c0400000000000000030a11171b1e202020202020202020201e1b16110a02000000000000000000030b12171c1e202020202020202020201e1b16110a02000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e0100000000000000000000030f1b2834404c5965717d8995a1ada69a8e82776c61564c423a332f2c2c2c2d2f3339414a545f6a7581817d7a76736f6c655b5044382c1f1306000000000c1824303b47535e6974808a959fa9a59b91877e766f6964615f5e5d5e6063666b7279828b949ea9a59b91867b70655a4e43372c2014080000000000000000000000000c17222e39444e59636d7680899199a1a7a7a09a95918e8c8a8989898a8c8f92979ca2a9a9a29a928a81776d62584d42372b2014090000000000000c1824303c47535e6a75808a959ea8a59b9289817a74706c6a696868686a6c6f74798088909aa4aba2988e83786d61564a3f33271b0f0300000000000000000000000000000000000000000000000000030c151c22272a2b2b2c3844505c67737f8b939393939393939084786c6055493d312b2b2a27231c150d04000000000000000000000000000000000000000000000000000000000000000000000000010d1925303c4854606b77838f9ba7a3978b7f737c8894a0ab9f93877b7064584c4035291d1105000000000000000000000000000000000000000000000814212d3a4753606c7985929eaaa69a8e82776c635a534c55626f7b8895a09386796d6053463a3a444c53565654514f4d4a4846433e372f261c110600000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f1300111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c655b5044382c1f130600000000000000000000020910181f262d353c434a515960676c6c6c6c6c6c6c6c6961564b3f3226190d000000000000000000000000000000000000000000000000000000000000000000000000000000000005101a252f3a444f59646b6c6c6c6c6c6c6c6c6b645a4f43372b1e12050000000000000000000000000915222e3a47525d676c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c675e53473b2e22160900000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b655b5044382b1f1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0e1113131313131313131313110f0a050000000000000000000000000000000002080d101213131313131313131312100c070100000000000000000000060b0f1213131313131313131313110f0b0500000000000000000000000000060b0f1213131313131313131313110f0b050000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e010000000000000000000006121e2b3744505c6875818d99a5aea295897d72665a4f443a302822201f1f2023282f38424d5965707775716e6a6763605b534a3f34281c100400000005111d2935404c58646f7a86919ca7aa9f94897f756c645d58545251515253565b60676f78828d97a2ada3988d82766b5f54483c3024180c00000000000000000000000006111c27323c47515b656e7780878f969ca2a7a6a19d9a989796969697999b9ea3a8a8a39e97908980776e655b51463b31251a0f0300000000000007131f2b36424d58636e78838c969ea7a49b938c86807c79777575757576787b80858b929aa2aaa19990867c71665c50453a2e22160b00000000000000000000000000000000000000000000000000010c151e272e3337383838383f4b57636e7a8686868686868686867f73675c50443838383837332e271f160c020000000000000000000000000000000000000000000000000000000000000000000000000814202c37434f5b67727e8a96a2a79b8f8377808c98a4a69a8e83776b5f53473c3024180c00000000000000000000000000000000000000000000000916222f3c4855626e7b8894a1ada2968a7d71665b51484855626f7b8895a09386796d6053463a414c565e6363605e5c595754524f4941382e23180c00000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f13000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5b534a3f34281c1004000000000000000000000000060d141c232a313940474e555c5f5f5f5f5f5f5f5f5e584f453a2e22160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28333d48525a5f5f5f5f5f5f5f5f5f5f5a52493e33271b0f0200000000000000000000000006121e2a36414c555c5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5c554c41362b1f1206000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5b53493f33281c0f03000000000000010508090909090909070300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e01000000000000000000000815212e3a47535f6c7885919da9aa9e9285796d6155493e33281e1d1d1d1d1d1d1d26313d48545e676b6865615e5a5753504941382d23170c000000000915212d3945515d6974808c97a2ada4998d82776d635a534c4845444445474a4f555d66707b86919ca8a99e93887c7064594d4135291c10040000000000000000000000000b16202b353f49535c656d757d848b91979ba0a3a6a7a5a3a3a2a3a4a5a8a6a4a09c98928c867e776e655c53493f342a1f140900000000000000030e1a25313c47525c67717a848c959da4a59e97918c888583828282828385888b90969ca4a69f988f877d746a60554a3f34281d12060000000000000000000000000000000000000000000000000008131e2731383f43454545454546525e6a75797979797979797979786e63574b4545454545433f3931281e1409000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333e4a56626e7985919da99f93877a84909ca8a1968a7e72665a4e43372b1f130800000000000000000000000000000000000000000000000a1723303d495663707c8996a3aca093877a6e6155493f4855626f7b8895a09386796d6053463a45515d686f6f6d6a686663615f5b534a3f34281c1004000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f13000a16212c3740484f525353535353535353535353535353535353535353524f4941382d23170c0000000000000000000000000000030a111820272e353d444b505353535353535353514d463d33281d1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c16212c3640484e525353535353535353524f4940372c21160a00000000000000000000000000020e19252f3a434b505353535353535353535353535353535353535353535353535353535353535353535353504b433a30251a0e02000000000a16212c3740484f52535353535353535353535353535353535353535353535353535353535353535353535353535353524f4941372d22170b000000000001070d1114161616161615130f0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406080a0b0c0c0c0c0c0b0a090705030000000000000000000000000000000000000000000000000000000000000407090a0a0a0a0a0a0a0a0a090602000000000000000000000000000000000000000000000000000000000000000000000000030709090909090908050100000000000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e01000000000000000000000a1724303d4956626f7b8894a0ada79b8e8275695d5145392d2a2a2a2a2a2a2a2a2a2a2c37424c555b5e5c5955524e4b47443f382f261c1106000000000c1925313d4955616d7985919da8aa9f93877c71665b5148413c393737383a3e444b555f6974808b97a3aea4988d8175695d5145392c201408000000000000000000000000040f19232d37414a535b646b737980868b9093979a9c9d9e9f9f9f9e9d9c9a9794908c87817b746d655c534a41372d23180d03000000000000000009141f2a35404a555f68717a838b92999fa5a29d989592908f8e8e8f909294989ca1a6a19b958d867d756b62584e43392e23170c01000000000000000000000000000000000000000000000000020e19252f39424a4f5151515151514e58636a6c6c6c6c6c6c6c6c6c6c675d525151515151514f4a433a30251a0f030000000000000000000000000000000000000000000000000000000000000000000000000a16222e3a45515d6975818c98a4a3978a7e8894a0a89d9185796d61564a3e32261a0f0300000000000000000000000000000000000000000000000a1724303d4a5763707d8a97a4ab9e9285786b5f52463c4855626f7b8895a09386796d6053463c4855616e7a7c79777572706e6b655c5145392c201307000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130005101a252e373e4346464646464646464646464646464646464646464646433e382f261c110600000000000000000000000000000000070e151c242b32394044464646464646464645413b342b21170c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f1a242e363d4345464646464646464646433e372e251b1005000000000000000000000000000008131e2831393f44464646464646464646464646464646464646464646464646464646464646464646464644403931281e1308000000000005101a252e373e434646464646464646464646464646464646464646464646464646464646464646464646464646464646433e372f261b110600000000030b12191d212323232323221f1b150f07000000000000000000000000000000000000000000000000000000000000000000000000000003070b0e1113151617181919191818171614120f0d0a0602000000000000000000000000000000000000000000000000050b10141617171717171717171715120e08020000000000000000000000000000000000000000000000000000000000000000040a0f1315161616161614110d07010000000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e01000000000000000000000c1926323f4b5865717e8a97a3b0a5988c7f72665a4d4136363636363636363636363636363a434a4f51504c4945423e3b3735312c251d140a00000003101c2835414d5965727e8a96a2ada69a8e82766b5f54493f36302c2b2b2c2e3239434d58636f7a86929eaaa99d9185796d6155483c3024170b0000000000000000000000000007111b252f384149525961686e757a7f84878a8d8f919292929292918f8d8b8884807b767069625b534a41382f251b1106000000000000000000030e19242e39434d565f68717981888e94999ea1a4a19e9d9c9b9b9c9d9ea1a4a29f9a96908a837c746b625950463c32271c11060000000000000000000000000000000000000000000000000006131f2a36414b545b5e5e5e5e5e5e5953595e5f5f5f5f5f5f5f5f5f5f5c55595e5e5e5e5e5e5c554c42372b1f130700000000000000000000000000000000000000000000000000000000000000000000000006111d2935404c5864707b87939fa79a8e848c98a4a4988c8074695d5145392d21160a0000000000000000000000000000000000000000000000000a1724303d4a5763707d8a97a4ab9e9285786b5e51453c4855626f7b8895a09386796d605346414d5965717d888684817f7c7a776d6154483b2e221508000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f13000009131c252c32373939393939393939393939393939393939393939393937332d261d140a000000000000000000000000000000000000030b121920272e343839393939393939393835302a22190f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121b242c32363939393939393939393937322c251c1309000000000000000000000000000000010c161f272e3438393939393939393939393939393939393939393939393939393939393939393939393938342e271f160c0200000000000009131c252c3237393939393939393939393939393939393939393939393939393939393939393939393939393939393937332d251d140a00000000030c151d24292d2f303030302f2b27201910070000000000000000000000000000000000000000000000000000000000000000000001060b0f14171a1d1f2123242526262625252422201e1c1916120e0a050000000000000000000000000000000000000000000810171c2023242424242424242423221e19130c04000000000000000000000000000000000000000000000000000000000000070f151b1f222323232323211d19120b0300000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e01000000000000000000000e1b2734414d5a6773808c99a6afa396897d7063574a43434343434343434343434343434343434343444343434343434343413d372f261c1207000006131f2b3844505d6975828e9aa6aea2968a7d72665a4e43382d25201e1e1f2227313b47525e6a76828e9aa6aea295897d7164584c3f33271a0e010000000000000000000000000009131d262f3740484f565d63696e73777b7e81828485868686858482817e7b78746f6a655e58504941382f261d1309000000000000000000000007121d27313b444d565f676f767d83888d9295989b9d9e9f9f9f9f9e9d9b9996938e8a857f78716a625950473e342a20150b00000000000000000000000000000000000000000000000000000916222f3b47535d666b6b6b6b6b6a645e575253535353535353535353565d646a6b6b6b6b6b675e53483c2f23160a000000000000000000000000000000000000000000000000000000000000000000000000010c1824303c48535f6b77838e9aa69f9691949da89f93877b7064584c4034291d11050000000000000000000000000000000000000000000000000a1724303d4a5763707d8a96a3ac9f9285796c5f53473c4855626f7b8895a09386796d60534647525d6975818d93908e8b89877a6e6255483b2f221508000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b27221b140b020000000000000000000000000000000000000000070f161d23282b2c2c2c2c2c2c2c2c2c29251f181007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121a21262a2c2c2c2c2c2c2c2c2c2c2a27211b130a0100000000000000000000000000000000040d151d23282b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b28231d150d0400000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a27221b130b02000000000a151e272f353a3c3c3c3c3c3b37322b23190f050000000000000000000000000000000000000000000000000000000000000001070c12171b2023272a2c2e3031323232323231302f2d2b2825221e1a16110b0500000000000000000000000000000000000008121a22282c2f3030303030303030302e2a251e160d040000000000000000000000000000000000000000000000000000000007101920272b2f303030302f2d29241d150c03000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e0100000000000000000000101c2936424f5c6875828e9ba8aea194887b6e625550505050505050505050505050505050505050505050505050505050504e4841382e24180d01000915222e3b4754606c7985919eaaab9f92867a6d6155493d32261c13111112161f2a36414d5966727e8b97a3b0a5998d8174675b4f4236291d100400000000000000000000000000010b141d252e363d454c52585e63676b6f717476777879797978777674726f6c68645f59534d463f372f261d140b010000000000000000000000000b151f29323b444d555d646b72777d8185898c8e90919292929291908e8c8a86837e79736d675f5850473e352c22180e0400000000000000000000000000000000000000000000000000000b1724313d4a57636f7878787878766f69625b554e48464646464d535a61686f7678787878787064574b3e3225180b0000000000000000000000000000000000000000000000000000000000000000000000000008141f2b37434e5a66727e8a95a1a8a19ea0a6a69a8e83776b5f53473b3024180c000000000000000000000000000000000000000000000000000916232f3c4955626f7b8895a1ada094887b6f63574c434855626f7b8895a09386796d6053464f59646f7a86919d9d9a988f83776b5e5246392d211407000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f13000000010910161a1e1f2020202020202020202020202020202020202020201e1b16110a0200000000000000000000000000000000000000000000040b12171c1f20202020202020201f1d19140d0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f151a1e1f20202020202020201f1e1b16100901000000000000000000000000000000000000030b12171c1e20202020202020202020202020202020202020202020202020202020202020202020201f1c17120b04000000000000000000010910161a1e1f202020202020202020202020202020202020202020202020202020202020202020202020202020201e1b161009010000000006111c2730394046494949494947433d352b21160b000000000000000000000000000000000000000000000000000000000000050c12181e23272c303336383b3c3e3e3f3f3f3f3e3d3b3a3735322e2a26211c16100a0300000000000000000000000000000006101a242c33383c3d3d3d3d3d3d3d3d3d3b3630281f150b010000000000000000000000000000000000000000000000000000050f19232b32373b3c3c3c3c3c3a352f271e150a000000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e0100000000000000000000111d2a3744505d6a7683909da9ada093867a6d605d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5a534a4035291e1205000b1824313d4a56636f7c8895a1ada89c8f83766a5e5145392d21150a0404060e1925313d4a56626f7b8894a0ada99c9083776a5e5145382c1f12060000000000000000000000000000020b131c242c333a41474d52575b5f626567696b6b6c6c6c6b6a696765635f5c58534e48423b342d251d140b0200000000000000000000000000030d172029323b434b535a60666c7175797c7f82838485868685858482807d7a76726d68625c554e463e352c231a10060000000000000000000000000000000000000000000000000000000b1824313e4b5764717e85858585817a736d666059534c464a50575e656c737981858585857e7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000060d121a26323e4a56616d7985919ca2a2a2a2a2a1958a7e72665a4e43372b1f140f090100000000000000000000000000000000000000000000000815212e3a4754606d7986929faba3978b7f74685e554e4955626f7b8895a09386796d60535158616b75808b97a2a9a2978b7f73675b4e42362a1e1105000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000050a0e1113131313131313131313131313131313131313131313110f0b050000000000000000000000000000000000000000000000000001070c0f12131313131313131312100d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0e1113131313131313131313110e0a0500000000000000000000000000000000000000000000060b0f121313131313131313131313131313131313131313131313131313131313131313131313120f0c0700000000000000000000000000050a0e111313131313131313131313131313131313131313131313131313131313131313131313131313131313110f0a050000000000000b17232e38424b525556565656544e473d33281c1105000000000000000000000000000000000000000000000000000000010810171d23292e33383c3f424547494a4b4c4c4c4b4b4a484644413e3a36322d28221c150e0600000000000000000000000000010c18222c363e44484a4a4a4a4a4a4a4a4a47413a31271d120700000000000000000000000000000000000000000000000000000b16212b353d4347494949494946403930271c11060000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e0100000000000000000000121e2b3845515e6b7784919eaaac9f9286796c69696969696969696969696969696969696969696969696969696969696969655c51463a2e211508000d1a26333f4c5865727e8b97a4b0a6998d8074675b4e4235291d11050000000915212e3a46535f6c7885929eabab9f9286796d6053473a2e211408000000000000000000000000000000010a121a21282f363c41464b4f5356585b5d5e5f5f5f5f5f5e5c5b595653504c47423d37312a231b130b02000000000000000000000000000000050e172029313941484f555b6065696d70737576787879797978777573716e6a66625c57514a433c342c231a1108000000000000000000000000000000000000000000000000000000000b1724313e4a57636f79838c92928c857e78716b645e5751545b626970777d848b92928d837a7064584b3e3225180c00000000000000000000000000000000000000000000000000000000000000000000000710171e23272d3945515c6874808c959595959595959185796d61564a3e322825201a130b020000000000000000000000000000000000000000000006131f2c3845515e6a76838f9ba6a79c90857a7067605a5555626f7b8895a09386796d60575c626a737d87929da8a89d91867a6e62564a3e32261a0e02000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f13000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b28333f4a545d626363636360594f44392d2115090000000000000000000000000000000000000000000000000000030b131a21282f343a3f44484c4f52545657585959595857565553504e4a47423e39332d262018110900000000000000000000000006121e29343e484f55575757575757575756524c43392f23180c0000000000000000000000000000000000000000000000000005111c28333d474e545656565655524b42382e23170b0000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e0100000000000000000000121f2c3945525f6b7885929fabac9f92857876767676767676767676767676767676767676767676767676767676767676766e6256493d3024170a000f1b2835414e5a6774818d9aa6b0a4978b7e7165584c3f33261a0d0100000005121e2b3744515d6a7683909ca9aea194887b6f6255493c2f2316090000000000000000000000000000000000080f171e242a30353a3f4346494c4e5051525253525251504e4c4a47433f3b37312c261f181109010000000000000000000000000000000000050e171f272f363d444a4f54595d616466686a6b6c6c6c6c6b6a686764615e5a56514c463f39322a221a110800000000000000000000000000000000000000000000000000000000000916222f3b47535e677079838c9597908a837c766f69625b5f666d747a81888f96978d847a71685e53483c2f23170a0000000000000000000000000000000000000000000000000000000000000000000006101922292f333536404c58636f7b8788888888888888888074685d5145393634312c251d140b0000000000000000000000000000000000000000000004101d2935424e5a66727e8a96a1aca1978c8279716b65615e626f7b8895a09386796d6063676d747c858f99a3ada2978c8175695e52463a2e22160a00000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130000000000000000000000000000000000000000000000000000000000000000000000000000050a0d0f0f0f0f0f0f0d0a05000000000000000000000000000000000000000000000000000001070b0f1011111111110f0c070200000000000000000000000000000000000000000000000000000000000000000000000000020406070808080808070605030100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001030506070808080807070504020000000000000000000000000000000000000000000000000000000000000000000000000000000000020406070808080807070503010000000000000000000000000000000000000000000000000000121e2b3744505c666e6f6f6f6f6b6155493d3124180b00000000000000000000000000000000000000000000000000030c151d242c333a40454b5054585b5e60626465656565656463615f5d5a57534e49443e38312a221b120a01000000000000000000000a16222e3a45505a616363636363636363635e554b4034281c10030000000000000000000000000000000000000000000000000915212d39444f596063636363625d544a3f33281b0f0000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e010000000000000000000013202c3946535f6c7986929facac9f928683838383838383838383838383838383838383838383838383838383838383837d7164574a3e3124170b00101d2936434f5c6975828f9ba8afa295897c6f6356493d3024170b0000000003101c2935424f5b6874818e9ba7b0a3968a7d7063574a3d3124170b000000000000000000000000000000000000050c13191f252a2e33373a3d3f4243444546464645444342403d3a37332f2b26201a140d060000000000000000000000000000000000000000050d151d252c32383e44494d5154575a5c5d5e5f5f5f5f5e5d5c5a5855524e4a45403a342e272018100800000000000000000000000000000000000000000000000000000000000006131f2b36414c555e67717a838c959b948e87817a746d666a71787e858c939a978e857b72685f564c42372b1f1307000000000000000000000000000000000000000000000000000000000000000000030e18222c343a3f42424247535f6a767b7b7b7b7b7b7b7b7b7a6f64584c424242413d372f261c1207000000000000000000000000000000000000000000000d1926323e4a56626d79848f9aa5a89e948b837c76716d6a686f7b8895a09386796d6b6f73787f868e97a1aba59b90867a6f64584d41352a1e120600000013202c3946535f6c798693a0ac9f9286796c5f5246392c1f130013202c3946535f6c798693a0ac9f9286796c5f5246392c1f13000000000000000000000000000000000000000000000000000000000000000000000000040b11161a1c1c1c1c1c1c1a16110b040000000000000000000000000000000000000000000000050c12171b1d1e1e1e1e1d1b18130d05000000000000000000000000000000000000000000000000000000000000000003070a0d0f1112131415151515141312100e0c090602000000000000000000000000000000000000000000000000000000000000000000000000000105080b0e1012131415151515141312100e0c0906030000000000000000000000000000000000000000000000000000000000000000000105090c0f11121414151515141312100d0b0704000005080a0a0a0a0a0a0a0a0a0907040000000000000013202c3946535f6c787c7c7c7c7265594c3f3226190c000000000000000000000000000000000000000000000000030c151e262f363e454b51575c6064686a6d6f70717272727271706e6c6966635f5a554f49433c342d241c130a000000000000000000000c1925323e4a56626c70707070707070706f675c5144382b1f12060000000000000000000000000000000000000000000000000b1824313d4955616b6f6f6f6f6e665c5044372b1e120000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e010000000000000000000013202c3946535f6c798693a0acafa39891909090909090909090909090909090909090909090909090909090909090908a7d7164574a3e3124170b00111e2b3744515d6a7784909daaada194877b6e6155483b2f22150900000000000e1a2734404d5a6673808d99a6b1a4988b7e7165584b3f3225190c0000000000000000000000000000000000000001080e14191e22272a2e3033353638393939393838363533312e2b27231f1a150f090300000000000000000000000000000000000000000000030b131a21272d33383d4145484b4d4f50515253535252514f4d4b4945423e39342f29231c150e0600000000000000000000000000000000000000000000000000000000000000020e1a25303a434c555f68717a838c959f99928c857e7871757c838990979e988e857c726960564d443a30261a0f0300000000000000000000000000000000000000000000000000000000000000000009141f2a343e454b4f4f4f4f4f5a646d6f6f6f6f6f6f6f6f6f6e685e534f4f4f4f4d4841382e24190d020000000000000000000000000000000000000000000916222e3a45515c68737e89939ca5a69d958e87827d7a7775737b8895a093867975787b7f848a9198a0a9a69d93897e74695e53473c3025190d0100000013202c3946535f6c798693a0a09f9286796c5f5246392c1f130013202c3946535f6c798693a0a09f9286796c5f5246392c1f130000000000000000000000000000000000000000000000000000000000000000000000050e161c222628292929292826221c160e05000000000000000000000000000000000000000000060f171e23272a2a2a2a2a2a28241e170f070000000000000000000000000000000000000000000000000000000003070c101316191b1d1f20212222222121201e1c1a1815120e0a0601000000000000000000000000000000000000000000000000000000000000000004090d1114181a1c1e20212122222121201f1d1b1816120f0b06010000000000000000000000000000000000000000000000000000000004090d1215181b1d1f202122222221201e1c1a1714100b0c11141617171717171717171614100b05000000000013202c3946535f6c798689897f7265594c3f3226190c0000000000000000000000000000000000000000000000020c151e27303840484f565c62676c707477797b7d7e7e7f7f7e7d7c7b7876736f6b66615b544d463e362e251c12090000000000000000000d1a2633404d5966737d7d7d7d7d7d7d7d796c6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727c7c7c7c786c5f5346392c20130000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e010000000000000000000013202c3946535f6c798693a0acb4aaa29d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d978a7d7164574a3e3124170b00121f2c3845525e6b7885919eabaca09386796d6053473a2d21140700000000000c1926333f4c5965727f8c98a5b2a5998c7f7366594c403326190d00000000000000000000000000000000000000000003080d12161a1e212426282a2b2c2c2c2c2c2b2a282624221f1b17130e09040000000000000000000000000000000000000000000000000001080f161c22272c3135383b3e4042444546464646454443413f3c3936322d29231e18110b0400000000000000000000000000000000000000000000000000000000000000000008131e28313a434d565f68717a838d969f9d97908a837c80868d949ba2988f867c736a60574e443b32281e1409000000000000000000000000000000000000000000000000000000000000000000010d1925313c4650575b5c5c5c5c5c5c61626262626262626262625e5c5c5c5c5c5c59534a40352a1e120600000000000000000000000000000000000000000005111d2935404b57616c77818a939ca3a79f99938e89868381807e8895a09386818284878b90959ba2aaa59d948b81776d62584d41362b1f14080000000013202c3946535f6c7986939393939286796c5f5246392c1f130013202c3946535f6c7986939393939286796c5f5246392c1f1300000000000000000000000000000000000000000000000000000000000000000000040e1720272e32353636363635322e2720170e0400000000000000000000000000000000000000050f1821282f34363737373737342f2921190f050000000000000000000000000000000000000000000000000003090e13181c202326282a2c2d2e2e2e2e2e2d2c2b292724221e1b16120d070200000000000000000000000000000000000000000000000000000000050b1015191d212427292b2c2d2e2e2e2e2e2d2b2a2725221f1b17120d080200000000000000000000000000000000000000000000000003090f15191e2125282a2c2d2e2e2e2e2e2d2b292623201c17171d2123242424242424242423201c1710080000000013202c3946535f6c7986938c7f7265594c3f3226190c00000000000000000000000000000000000000000000000a141e273039424a525a61686d73787c808386888a8b8c8c8c8b8a898785827f7b77726c665f58504840372e241b110700000000000000000d1a2633404d596673808a8a8a8a8a8a86796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f898986796c5f5346392c20130000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e010000000000000000000013202c3946535f6c7986929facb7ada5a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a2a8aaaaa3978a7d7063574a3d3024170a00131f2c3946525f6c7985929facac9f9286796c5f5346392c20130600000000000c1825323e4b5865717e8b98a4b1a69a8d8073665a4d4034271a0d000000000000000000000000000000000000000000000002060a0e1215171a1c1d1e1f1f201f1f1e1d1c1a1815120f0b07020000000000000000000000000000000000000000000000000000000000040b11161c2025292c2f3234363738393939393837363432302d2926221d18130d070000000000000000000000000000000000000000000000000000000000000000000000020c161f28313a434d565f68717a848d969fa29b948e878a91989fa29990867d746a61584e453c322920160d0200000000000000000000000000000000000000000000000000000000000000000004111d2936424d58626869696969696969676157555555555c656969696969696969655c52463a2e221609000000000000000000000000000000000000000000010c18232f3a45505a656f78818a9299a0a6a49e9a9692908e8c8c8e98a2978e8d8f9194979ba0a6a8a29b938b83796f655b51463b30251a0e030000000013202c3946535f6c7986868686868686796c5f5246392c1f130013202c3946535f6c7986868686868686796c5f5246392c1f13000000000000000000000000000000000000000000000000000000000000000000000b16202932393e4242424242423e39322920160b000000000000000000000000000000000000010c16212a333a40434444444443403a332b21170c010000000000000000000000000000000000000000000002080f141a1f24282c2f323537383a3b3b3b3b3b3a39383634312e2a27221e19130d0700000000000000000000000000000000000000000000000000030a10161c2125292d30333637393a3b3b3b3b3a39383634312e2b27231e19130d0700000000000000000000000000000000000000000000070e141a20252a2e313436383a3b3b3b3b3a39383533302c282322282d3030303030303030302f2c28221a120800000013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000000000000008121c263039424b545c646c72797e84898c909395969898999898979694928f8b87837d77716a625a524940362d23190e04000000000000000d1a2633404d596673808d979797979386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e0100000000000000000000121f2c3945525f6c7885929fabb1a59b9493939393939393939393939393939393939393939393939393979faaafa396897c6f6356493d3023160a0013202c3946535f6c798693a0acac9f9285786b5f5245392c1f120600000000000b1824313e4b5764717e8b97a4b1a79a8d8174675a4d4134271a0e00000000000000000000000000000000000000000000000000000205080b0d0f1012121313131212100f0d0b09060300000000000000000000000000000000000000000000000000000000000000000000050b1014181c20232527292a2b2c2c2c2c2c2b29282623201d1a16110c070100000000000000000000000000000000000000000000000000000000000000000000000000040d161f28313b444d565f68717a848d969fa69f9994959ca3a39a90877e746b62584f463c332a20170e040000000000000000000000000000000000000000000000000000000000000000000006121f2c3845525e6a737575757575757573695d51484b57636e75757575757575756e63574a3e3124180b0000000000000000000000000000000000000000000007121e29343e49535d666f7880878e949a9fa3a6a29f9c9b99989aa0a9a09a9a9b9da0a3a7a5a19c969089817970675d54493f342a1f14080000000000131f2c3946525f6b7679797979797979766b5e5245382c1f1200131f2c3946525f6b7679797979797979766b5e5245382c1f1200000000000000000000000000000000000000000000000000000000000000000006111d27323b444a4e4f4f4f4f4e4a443b32271d1106000000000000000000000000000000000006121d28323c454b5051515151504c453d33291e1207000000000000000000000000000000000000000000050c131a20252b3034383b3f41434546474848484847464442403d3a37332e29241e18120b0300000000000000000000000000000000000000000000070e151b22272c3135393d40424446474848484847464543403e3b37332e2a241e18120b03000000000000000000000000000000000000010911181f262c31363a3e4143454647484848474644423f3c38342f2d34393c3d3d3d3d3d3d3d3d3c38332c241a1006000013202c3946535f6c7986938c7f7265594c3f3226190c000000000000000000000000000000000000000000040f19242e38424b545d666e767d848a9094999c9fa1a3a3a2a2a2a3a4a2a09e9b97938e89827b746c645b52483f352a20150a000000000000000d1a2633404d596673808d9aa4a4a09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e0100000000000000000000121e2b3845515e6b7784919eaaada19489868686868686868686868686868686868686868686868686868e9aa6aea295887b6f6255493c2f2216090013202c3946535f6c798693a0acac9f9285786b5f5245382c1f120500000000000b1724313e4a5764717d8a97a4b1a79a8e8174675a4d4134271a0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080c101316191b1c1e1f1f20201f1f1e1d1b191714110d09050000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161f29323b444d565f68727b848d96a0a0a0a0a0a0a09a91887e756b625950463d342a21180e0500000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7982828282828282786b5f52454c5865727e8282828282827e7165584b3e3225180b00000000000000000000000000000000000000000000010c17222d37414b545d666e757d83898e93979a9da0a2a4a5a5a6abb2aba7a5a4a3a19f9c9995908b857e776f675e554b42382d23180d020000000000111e2a37434f5a646b6c6c6c6c6c6c6c6b645a4e42362a1d1100111e2a37434f5a646b6c6c6c6c6c6c6c6b645a4e42362a1d110000000000000000000000000000000000000000000000000000000000000000000a16222e39444d555b5c5c5c5c5b554d44392e22160a00000000000000000000000000000000000a16222e39444e565c5d5d5d5d5c574f453a2f23170b0000000000000000000000000000000000000000080f171e252b31363b4044484b4e50525354555555545352514f4d4a47433f3a352f29231c150d06000000000000000000000000000000000000000109111920262d33383d4246494c4f515253545555545453514f4d4a47433f3a35302a231c150e0600000000000000000000000000000000010a131b232a31373d42464a4d505253545555545453514f4c48443f3a363e45494a4a4a4a4a4a4a4a48443e362c22180c010013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000000000000b16202b36404a545d666f7880888f959ba0a5a39f9b99979696969698999ca0a4a39f9a948d867e766d645a51463c32271c11060000000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e0100000000000000000000111e2a3744505d6a7683909ca9ada093867a7979797979797979797979797979797979797979797979808c99a6ada094877a6d6154473b2e2115080013202c3946535f6c798693a0acac9f9285786b5f5245382c1f120500000000000b1724313e4a5764717d8a97a4b1a79a8e8174675a4d4134271a0e000000000000000000000000000000000000000000000001030406070708080807060503010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004070a0c0e101112131313131211100e0c0a0805010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d172029323b444d576069727b848e9393939393939392887f756c635950473e342b22180f060000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c79868f8f8f8f8f85786b5f52454c5865727e8c8f8f8f8f8b7e7165584b3e3225180b000000000000000000000000000000000000000000000006101b252f39424b545c646b72787d82878b8e9193959798999ba1a9a09a9998969592908d8985807a746d655d554c433a30261b11060000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5a52483d32261a0e000e1a26323e48525a5f5f5f5f5f5f5f5f5f5a52483d32261a0e0000000000000000000000000000000000000000000000000000000000000000000d1a26333f4a555f6769696969675f554a3f33261a0d01000000000000000000000000000000000d1a26333f4b5660686a6a6a6a6861574b3f33271b0e0200000000000000000000000000000000000009111a212930363c42474c5054575a5c5e606161616161605f5d5b5956534f4b46413b352e271f170f070000000000000000000000000000000000020b131b232a31383e44494e5255595b5d5f6061616161615f5e5c5957534f4b46413b352e271f180f070000000000000000000000000000000a131c252d353c42484d5256595c5e6061616161615f5d5b5854504b453f4850555757575757575757554f483e34291e12060013202c3946535f6c7986938c7f7265594c3f3226190c000000000000000000000000000000000000000006111c27323d47525c666f78828a929aa0a7a39d97938f8c8a8989898a8b8d9093989da3a59f9890887f766c62584e43382d22170c0000000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e0100000000000000000000101c2936424f5c6875828e9ba7aea194877b6e6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c74818e9aa7ab9f9285796c5f5346392d2013070013202c3946535f6c7986939facac9f9285786c5f5245392c1f120600000000000b1824313e4b5764717e8b98a4b1a79a8d8173675a4d4134271a0e000000000000000000000000000000000000000104080b0d0f11131414151514141312100e0c090602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e172029323b454e576069727b85868686868686868680766d635a51473e352c22191006000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986939c9c9c9285786b5f52454c5865727e8c989c9c988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000009131d273039424a525960666c72767b7e828487898a8b8c8f99a2978e8c8b8a888683817d78746e69625b544b433a31271e140a000000000000000a16212c3740484f5253535353535353524f4840362c21150a000a16212c3740484f5253535353535353524f4840362c21150a0000000000000000000000000000000000000000000000000000000000000000000f1c2935424e5b67717575757571675b4e4235291c0f03000000000000000000000000000000000f1c2835424e5b67727777777773685c4f4336291d1003000000000000000000000000000000000009121b232b333a41484d53585c606467696b6c6d6e6e6e6e6d6c6a6865625f5b56514c463f38312921191007000000000000000000000000000000020b141d252d353c43494f55595e6265686a6c6d6e6e6e6e6d6c6a6866635f5b57524c464039312a211910070000000000000000000000000008121c252e373f464d53595e6266696b6c6d6e6e6e6d6c6a6764605c57514a515a616363636363636363615a50453a2e22160a0013202c3946535f6c7986938c7f7265594c3f3226190c00000000000000000000000000000000000000000c17222e39444e59646e78818b949ca4a8a099928c8783807d7c7c7c7d7e8184878c9299a0a8a29a91887e746a60554a3f34281d110600000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e01000000000000000000000e1b2734414d5a6673808c99a5afa296897c70635f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f6a7683909ca9a99d9084776a5e5144382b1e120500131f2c3945525f6c7885929facac9f9286796c5f5346392d20130600000000000c1825323f4b5865717e8b98a5b1a6998d807366594d4033271a0d000000000000000000000000000000000004090d1114171a1c1e1f202121212120201e1d1b1815120e0a060100000000000000000000000000000000000000000000000305070707070707070707070707070707070707070707070707070707070707070707070707070707070706030000000000000000000000000000000000000000000000000000000000000000000000000000000000050e172029333c454e57606972797979797979797979766d645b51483f352c231a100700000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c798693a0a99f9285786b5f52454c5865727e8c98a5a5988b7e7165584b3e3225180b000000000000000000000000000000000000000000000000010b151e27303840484f555b61666a6e7275787a7c7d7e808895a093867f7e7d7b797774706c68635d575049423a31281f160c020000000000000005101a252e373e43464646464646464646433d362e241a0f040005101a252e373e43464646464646464646433d362e241a0f04000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c69768282828276695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c69758284848376695d5043362a1d10030000000000000000000000000000000009121b242d353d454c53595e64686c70737678797a7b7b7b7a79787774726f6b67625d57514a433b332b2219100600000000000000000000000000010b141d262f373f474e545b60656a6e717476787a7b7b7b7b7a797775726f6b67635d57514a433b332b221a1007000000000000000000000005101a242e37404951585f656a6e727577797a7b7b7b7a797674706c68625c5558636c70707070707070706c62564a3e3225190c0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000000005111d28343f4a55606b75808a949da6a89f968e87817b7673716f6f6f707274777b81878e969ea7a39a90867c71665b5045392e22160b00000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e01000000000000000000000c1925323f4b5864717d8a96a3afa4988b7e7265595353535353535353535353535353535353606c7985929eaba79a8e8175685b4f4236291d100300121f2b3845515e6b7884919eaaada093877a6d6054473a2e21140700000000000d1926333f4c5966727f8c98a5b2a5998c7f7266594c3f3326190d000000000000000000000000000000050a1014191d202426292a2c2d2e2e2e2e2d2c2b292725221e1a16120d070200000000000000000000000000000000000000050b0f12141414141414141414141414141414141414141414141414141414141414141414141414141414141412100c0600000000000000000000000000000000000000000000000000000000000000000000000000000000050e17202a333c454e5760696c6c6c6c6c6c6c6c6c6b645b52493f362d231a11070000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c798693a0ac9f9285786b5f52454c5865727e8c98a5a5988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000030c151e262e363d444a50555a5e6266696b6e6f71727b8895a093867971706f6d6a6764605c57524c463f3830281f160d0400000000000000000009131c252c323739393939393939393936322c241c120800000009131c252c323739393939393939393936322c241c120800000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c6976838f8f8376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d100300000000000000000000000000000008121b242e373f474f575e646a6f74797c808284868788888887868583817e7b77736e68625c554d453d342b22180e0400000000000000000000000009131d262f38414951585f666c71767a7e8183858687888888878684827e7b78736e69635c554d453d342c22190f05000000000000000000010c17222c364049525b626a70767a7e82848687888888878583807d78736d675f5b67747d7d7d7d7d7d7d7d7366594d4033261a0d0013202c3946535f6c7986938c7f7265594c3f3226190c000000000000000000000000000000000000000a16222e3945505b67727c87929ca5aaa0968d847c756f6a67646362626365676b70757c848c959ea8a2988e83786d61564a3f33271b0f03000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e01000000000000000000000a1723303c4955626e7b8793a0aca69a8e8175695c5046464646464646464646464646464a57636f7b8894a1ada4978b7e7266594d4034271b0e0100111e2a3744505d6a7783909da9aea194887b6e6255483c2f22160900000000000e1b2734414d5a6773808d9aa6b1a4988b7e7165584b3f3225180c00000000000000000000000000030a10161b2025292d30333537393a3a3b3b3a3a39383634312e2a27221d18130d0600000000000000000000000000000000010910161b1f20202020202020202020202020202020202020202020202020202020202020202020202020202020201f1c17120b03000000000000000000000000000000000000000000000000000000000000000000000000000000050e18212a333c454e575d5f5f5f5f5f5f5f5f5f5f5a524940372d241b1108000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c798693a0a09f9285786b5f52454c5865727e8c98a0a0988b7e7165584b3e3225180b0000000000000000000000000000000000000000000000000000030c141c242b32393f444a4e5256595c5f6163646f7b8895a09386796d6462605e5b5854504c46413b342d261e160d0400000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2a26211a120a00000000010a131a21262a2c2c2c2c2c2c2c2c2c2a26211a120a0000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d1003000000000000000000000000000005101a242d374049515961686f757b8085898c8f919394949594949392908e8b87837f7a746d665f574f463d342a20160c010000000000000000000007111b252f38414a535b636a71777d82868a8d909293949595949392908e8b88847f7a746d675f574f473e342b21170d03000000000000000007121e29333e48525b646d747b81868b8e9192949495949392908d89847e78716a616875828a8a8a8a8a8a7e7265594c3f3326190d0013202c3946535f6c7986938c7f7265594c3f3226190c000000000000000000000000000000000000030f1b27333e4a56616d78838e99a3ada2988e847b726a645e5a5856555657585b5f646a727a838c96a0a69f94897e72675b4f43372b1f1206000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e01000000000000000000000814212d3a46525f6b7784909ca8a99d9185786c6155493e3939393939393939393939434f5b67737f8b98a4ada094887b6f63564a3e3125180c0000101c2936424f5c6875828e9ba8afa296897c7063564a3d3124180b0000000003101c2936424f5b6875828e9ba7afa3968a7d7063574a3d3124170b000000000000000000000000070e151b21272c3135393c3f424445464748484747464442403d3a37332e29241e18110a0300000000000000000000000000010b131b22272b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b28231c150c03000000000000000000000000000000000000000000000000000000000000000000000000000000060f18212a333c454c51535353535353535353524f4940372e251b120900000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986939393939285786b5f52454c5865727e8c939393938b7e7165584b3e3225180b000000000000000000000000000000000000000000000000000000020a121a21272e33393e42464a4d50525456626f7b8895a09386796d605554514f4c4844403b353029231b140c04000000000000000000000000010910161a1e1f202020202020201f1e1a161008000000000000010910161a1e1f202020202020201f1e1a161008000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d100300000000000000000000000000020d17212c353f49525b636b737a81878c9195989b9d9fa0a1a2a1a1a09e9c9a97948f8a857f78716961584f463c32281e1308000000000000000000030e18232d37414a535c656d747c82888e92969a9c9ea0a1a1a2a1a09f9d9b9894908b857f787169615850463d33291f140a00000000000000010d18242f3a454f5a646d767e868d92979a9d9fa0a1a2a1a09e9c9995908a837b736b6976828f979797978b7e7165584b3e3225180b0013202c3946535f6c7986938c7f7265594c3f3226190c00000000000000000000000000000000000007131f2b37434f5b66727e8994a0aaa69b91867c72696059534e4b4949494a4c4f53596068717a848f9a9996928f83776c6053473a2d211407000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e010000000000000000000005111e2a37434f5b6874808c98a4ada195897d71665a4f453b312c2c2c2c2c2c2c343e49545f6b77838f9ba7a99d9184786c6053473b2e22150900000e1b2834414e5a6773808d99a6b1a4988b7e7265594c4033271a0e0100000006121f2b3844515d6a7683909ca9aea194887b6e6255493c2f23160900000000000000000000010911181f262c32383d4145494c4e505253545454545352514f4d4a47433f3a352f29231c150d0500000000000000000000000009131d252d33373a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a38342e271e150b01000000000000000000000000000000000000000000000000000000000000000000000000000000060f18212a333b414546464646464646464646433e372e251c13090000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986868686868685786b5f52454c5865727e8686868686867e7165584b3e3225180b0000000000000000000000000000000000000000000000000000000000080f161c22282d32363a3e4143464855626f7b8893939386796d60534745423f3c38342f2a241e18110a02000000000000000000000000000000050a0e11131313131313131313110e0a04000000000000000000050a0e11131313131313131313110e0a0400000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000000000009141e29333d47515b646d757d858c92989da1a5a39f9d9b9a9a9a9a9b9da0a3a3a09b96908a837b736a61584e443a2f251a0f0400000000000000000a151f2a343f49535c656e777f868d94999ea2a4a09d9a999898999a9c9fa2a4a09b96908a837b736a62584f453b31261c110600000000000006121e2935404b56616c76808890989ea3a7a9a5a19f9d9c9c9c9c9ea09b958d857d746a7683909da4a4978a7d7164574b3e3124180b0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000000b17232f3b47535f6b77838f9aa6aca1958a7f746a60574e47423f3d3c3c3d3f43484e565f68727d88918d8a86837f7a6e6154473b2e211408000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000000000000000000131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e0100000000000000000000020e1b27333f4c5864707c88949faba59a8e82776c61574d433b3532302f3033373d46505a65707c88939faba4988c8074685c5044372b1f120600000d1926323f4c5865717e8a97a3b0a69a8d8174685b4f42362a1e12060000000915222e3a4753606c7985929eabab9f9286796d6053473a2e211408000000000000000000020a131b232a31383e43484d5155585b5d5f6061616161605f5d5b5956534f4a46403a342e271f170f070000000000000000000005101b252f373e444647474747474747474747474747474747474747474747474747474747474747474747474747474747443f3930271d120700000000000000000000000000000000000000000000000000000000000000000000000000000000060f1821293035383939393939393939393937322c251c130a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3946525f6b7679797979797979766a5e51454b58647079797979797979797064574b3e3125180b000000000000000000000000000000000000000000000000000000000000040b11171c21262a2e3134373c4855626f7b8686868686796d6053463a3633302c28231e19130d0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d1003000000000000000000000000040f1a25303b454f59636d767f878f969da3a7a19b9793908e8d8d8d8e8f9194979ca1a7a29b958d857c736a60564c41362b20150a0000000000000005101b26313c46515b656e77808991989fa5a39d9894908e8c8c8c8c8d8f92969ba0a6a29b958d857c746a61574d42382d22170c0100000000000a17222e3a46515d68737d88929aa2a9aba49e999592908f8f8f909194979c978f867c737784909daaa4978a7d7064574a3d3124170b0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000020e1a27333f4b5864707c88949faba79b9084786d62584e453d3632302f303133373c444d56616c778384817d7a76736f685d5145392d201307000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000000000004070809131f2c3946525f6c7986929faca79a8e8174675a4d4134271a0e0908070400000000000000000b17232f3b47545f6b77838f9aa5aa9f94887d73685f564d46413e3c3c3d3f43484f58626c77828d99a4aa9f93887c7064584c4034271b0f0300000b1724303d4956626f7b8894a1ada99c9083776b5e52463a2e22170d0a090a0e1a25313e4a56626f7b8894a1ada99c9083776a5e5145382c1f12060000000000000000020b141d252d343c43494f54595d6164676a6b6d6d6e6e6d6d6c6a6866635f5b56514c463f383129211910070000000000000000000a16212d3741494f5353535353535353535353535353535353535353535353535353535353535353535353535353535353504a42392f24180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000060f171e24292c2c2c2c2c2c2c2c2c2c2c2a27211b130a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a37434f5a646b6c6c6c6c6c6c6c6b64594e4248545f686c6c6c6c6c6c6c6c685e53483c2f23160a0000000000000000000000000000000000000000000000000000000000000000060b11151a1e2225282f3b4855616d787979797979766b5f5346392d2723201c18130e080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0d0f0f0f0f0f0f0d0a0500000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000000000a15202c37424c57616b757f889199a1a8a39c958f8a878482818080818284878b90959ca3a69f978e857c72685d53483d32261b10040000000000000b16212d38434d58626d76808a929ba3a8a099928c888481807e7e808183868a8f959ca3a69f978f867c73695f544a3f34291d120700000000020e1b27333f4b57626e79848f9aa3acaba29a938d8986848282828385878b9096988e857a7784919eaaa4978a7d7063574a3d3024170a0013202c3946535f6c7986938c7f7265594c3f3226190c000000000000000000000000000000000005111e2a36434f5b6774808c98a4afa3978b7f73675c51463c332b2623222324272b323b444f5a66727b7874716d6a67635e564c4135291d1104000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000000070c11141515151f2c3946525f6c7986929faaa79a8e8174675a4d4134271a15151513100b0600000000000007131f2b37434f5b66727d89949faaa59a8f857a71685f58524d4b49494a4b4f535a616a747e88939eaaa4998e82776b5f53483c3024170b0000000815212e3a4753606c7885919daaac9f93877a6e62564a3f33281e1916161719202a36424e5a66727e8b97a3b0a6998d8174685b4f4236291d100400000000000000010a141d262f373f464d545a6065696d71747678797a7b7b7a79787775726f6b67625d57514a433b332b2219100700000000000000000f1b27333e49535b60606060606060606060606060606060606060606060606060606060606060606060606060606060605c544b4035291d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000050d13191c1f2020202020202020201f1e1b161009010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26323e48525a5f5f5f5f5f5f5f5f5f5a52483d424d565d5f5f5f5f5f5f5f5f5c564d42372b1f130700000000000000000000000000000000000000000000000000000000000000000000050a0e121518202d3945515c666c6c6c6c6c6c6b645a4f43372b1e1714100c070200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b11161a1c1c1c1c1c1c1a16110b040000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000000040f1b26323d48535e69737d87919aa3aba299918a847e7a77757373737475787b7f848a9199a1a9a0978e84796f64594e43372c201509000000000005101c27333e49545f6a747e89929ca4a89f968e87817b78757372727374767a7e848a9199a2a9a1988e857b70665b50453a2f23180c0000000006121e2b37434f5b67737f8a96a1acada2999088817c797776757576787b80858b92968c827885929eaba3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c00000000000000000000000000000000000714202d3946525e6b7784909ca8ab9f93867a6e62574b40352a211a191919191a2029333e4a56616a6e6c6865615e5a57534c443a2f24190d01000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c2013000000020b12181d20222222222c3946525f6c7986929d9d9d9a8e8174675a4d41342722222222201c1710090100000000030f1b27323e4a55616c77838e98a3aba1968c83797169635e5a57565556585b5f656b737c868f9aa5a89e93887d71665a4f43372b1f130700000006121f2b3744505c6975818d99a6afa3978b7e73675b50443a302925232223252a323c47525e6a76828e9aa7aea2968a7d7165584c3f33271a0e010000000000000009131c262f38414951585f656b71757a7d8183858687888887868583817e7b77736e68625c544d453d342b22190f0500000000000000111e2a37434f5a656c6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d665d5145392d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d101213131313131313131313110e0a0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16212c3740484f5253535353535353524e4840363b444b515353535353535353504b443b30261a0f03000000000000000000000000000000000000000000000000000000000000000000000000020609111d2934404a545b5f5f5f5f5f5f5f5a52493e33271b0f0704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e161c222628292929292826221c160e0500000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d100300000000000000000000000915202c37434e5965707a858f99a3aca29990878079736e6b6867666667696b6f737980878f98a1a9a0968b81766b5f54493d31251a0e02000000000a15212d38444f5a66717b86909aa4aaa0968d847c75706b6866656566676a6e72787f879099a3aaa0978d82776d62564b4034291d11050000000915222e3a47535f6b77848f9ba7b1a69b90877e76716d6a696868696c6f737980889094897e85929eaba3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c00000000000000000000000000000000000a16232f3c4855616e7a8793a0aca89b8f83766a5e52463a2e262626262626262626262d39444f585f615f5c5955514e4a47423a32281e130800000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000020c141c23292d2f2f2f2f2f3946525f6c798690909090908e8174675a4d41342f2f2f2f2e2c28221b130a00000000000a16222d3944505b66717c87919ba5a89e958c837b746e6a666463626365676b70767d858e97a1aaa1968c81766b6055493e32261b0f03000000030f1c2834404d5965717d8995a1ada79b8f83786c61564c423a3532302f3032353b434d58636f7b87929eaaaa9e9286796d6155493c3024170b0000000000000006111b252e38414a525b626a70777c81868a8d8f9193949494949392908e8b87837e79736d665f574f463d342b21170d0200000000000013202c3946525f6b777a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a786e6155483b2f22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101a252e373e43464646464646464645433d362e323a4044464646464646464644403a32291f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e38424a50525353535353524f4940372c21160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1720272e32353636363635322e2720170e04000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d100300000000000000000000010d1925313d48545f6b76818c97a1aba49a90877e756e67625e5b5a595a5b5c5f63686e757d868f99a3a89d92877c7065594e42362a1e1105000000020e1a26323e4955606c77828d98a2aca3988e847a726b645f5c595858595b5e62676d757e87919ba6a99e94897e73685c5145392d22160a0000000b1824313d4a56626f7b8794a0acaba094897e746c65605e5c5b5c5d5f63686e767e8790908585929faca3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c00000000000000000000000000000000000c1825323e4b5764707d8a96a2afa5998c8073675a4e4236333333333333333333333333333d464e535553504c4945423e3b363029221a120800000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c201300000a141e262e34393b3c3c3c3c3c46525f6c79848484848484848174675a4d413c3c3c3c3c3b38332d251c12080000000005111c28333e4a55606a757f89939ca5a79e958d86807a7673706f6f707174777b81888f97a0a9a2988f857a70655a4f44382d21160a00000000000c1824303d4955616d7985909ca8aba094897d72685e544c46413e3d3c3d3e41464d565f6a75808c97a3afa5998d8175695d5145392d201408000000000000030e18222d37404a535c646d747b82888d9296999c9e9fa0a1a1a1a09e9d9a97948f8a857e78716961584f463d33291f140a00000000000013202c3946535f6c798687878787878787878787878787878787878787878787878787878787878787878787878787877b6f6255483c2f2215090000000000000000000000000000000000000004080b0c0d0d0d0d0d0d0d0d0d0c090601000000000000000000000000000000000000000000000000000000000000000005090b0c0d0d0d0d0d0d0d0d0c0b08040000000000000000000000000000000000000000000000000009131c252c323739393939393939393936322c24282f3438393939393939393938342f2820170d020000000000000000000000000000000000000000000000000000000000000000000000000000000007121c2630383f4346464646464646433e372e251b1005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16202932393e4242424242423e39322920160b000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000006121e2a36424d5965707c87939ea8a89d93887e756b635c56524f4d4d4d4e5053575c636b737d87919c9d9a968d82766a5e5246392d20140700000006121e2b36424e5a66717d88939fa9a79c91867c72696059534f4d4c4c4d4e51565c636c757f8a95a0aba59b8f84796d61564a3e32261a0e0200000d1a2733404c5965727e8b97a3b0a79b8f83786d625a54514f4f4f5053575d646c757e88938e8e96a2aea3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c00000000000000000000000000000000000e1a2734404d5966737f8c98a5b0a3968a7d7164584b404040404040404040404040404040404042464847434040404040403e3a342c241a1005000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130006111c263038404548484848484847515e6a7477777777777777777165594d47484848484848443e372e241a0f04000000000b17222d38434e58636d77818a939ba3a79f98918b86827f7d7c7c7c7e8083878c9399a1a8a19890867c73685e53483d32271c100500000000000814202c3945505c6874808b96a1aca59a8f847970665e57514d4b4949494b4d52575f68717b86919da8aa9f94887c7165594d4135291d11040000000000000a141f2a343f49525c656e767e868d93999ea2a4a09d9b999999999a9c9fa2a3a09b96908a837b736a61584f453b30261b1106000000000013202c3946535f6c798693949494949494949494949494949494949494949494949494949494949494949494949494887b6f6255483c2f2215090000000000000000000000000000000000030a101417191919191919191919191816120c060000000000000000000000000000000000000000000000000000000000050b111518191919191919191919191815100a040000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2a26211a1d24282b2c2c2c2c2c2c2c2c2b28231d160e050000000000000000000000000000000000000000000000000000000000000000000000000000000000000b141e262d33373939393939393937322c251c13090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111d27323b444a4e4f4f4f4f4e4a443b32271d11060000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d1003000000000000000000000a16222e3a46525e6a76818d99a4aea2978c81766c625a524b46424140404143464b5159616b757f8a94918d8a86837a6e6154483b2e2115080000000a16232f3b47535f6b76828e99a5ada2968b80756a60574e4843403f3f4042454a515a636d78838f9aa6aca1958a7e72665a4e42362a1e120600000f1c2835424e5b6874818d9aa6b0a3978b7e73675b51484543424244474b525a636c76818c979aa0a8b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c00000000000000000000000000000000000f1c2935424f5b6874818e9aa7aea195887b6f62554c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a453e362c22170b000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c2013000b17222d38424a51555555555555534d5862696a6a6a6a6a6a6a6a675f544f54555555555554504940362b2015090000000005111c27323c47515b656f7881899199a0a6a29c97928e8c8a8989898b8d9093989ea4a49e968f867d746b61574c42372c21160b00000000000004101c2834404c57636e7a85909ba5aba0968b82787068625d5a57565556575a5d6369717a838d98a3aea4998e83776c6054483d3125190d00000000000005101b26313b46505a646e77808990989ea4a49e9894918e8d8c8c8c8e9093969ba0a7a19b948d857c736a61574d42382d22170c010000000013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a095887b6f6255483c2f22150900000000000000000000000000000000050d151b20242626262626262626262625221d171008000000000000000000000000000000000000000000000000000000070f161c21242626262626262626262624211c150e060000000000000000000000000000000000000000000000010910161a1e1f202020202020201f1e1a150f12181c1f20202020202020201f1c18120c0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c141c22272b2c2c2c2c2c2c2c2a27211b130a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16222e39444d555b5c5c5c5c5b554d44392e22160a0000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d1003000000000000000000010d1926323e4a56626e7a86929ea9a99d91867a6f655a5048403a3634333335373a40474f59636e79848885817e7a77736a5f53463a2d2114070000010e1a26323f4b57636f7b87939faaa89d91857a6e63584e453d373432323335393f48515c67727d8995a1ada69a8f83776b5f52463a2e2215090000111d2a3743505d6976838f9ca9ada094877b6f62564a3f38363536373b4048515a656f7a86919da9b1b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000111d2a3743505d6976838f9ca9ada093877a6d615959595959595959595959595959595959595959595959595959595959595650483e33281c10040000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c2013000f1b27333f4a545c6162626262625f5850585c5d5d5d5d5d5d5d5d5b555259606262626262605b52483d3125190d00000000000a15202a353f49535d666f7780878e959aa0a4a29e9b989696969697999c9fa4a39e99938c857d746b62594f453a30251a1004000000000000000c18232f3b46525d68737e89949ea8a89d948a827a736e6966646362636466696e747b838c959faaa69c92877c71665b4f43382c2014080000000000000b16212c37424d58626c768089929aa2a8a099928d888482807f7f808183868a8f959ca3a69f978e867c73695e54493f34281d12060000000013202c3946535f6c798693a0acadadaba6a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a295887b6f6255483c2f221509000000000000000000000000000000040e171f262c3032333333333333333333312e29221a12080000000000000000000000000000000000000000000000000006101921282d3133333333333333333333312d2720180f05000000000000000000000000000000000000000000000000050a0e11131313131313131313110e0a04070c1012131313131313131312100c0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171b1e2020202020201f1e1b1610090100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a26333f4a555f6769696969675f554a3f33261a0d0100000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d100300000000000000000004101d2935424e5a66737e8b97a3afa4988c8175695e53483f362e2a272627282a2f353d47515c68737f7c7875716e6a6761584e42372a1e1205000004111d2a36424f5b6773808b98a3afa4988c8074695d52473c332b27262527292e363f4a55616d7884909ca9ab9f93877b6f62564a3d3125180c0000121e2b3845515e6b7784919eaaab9e9285786c5f53463a2e2929292b2f363f48535e6975818c98a4b0b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000121e2b3844515e6b7784919daaac9f9286796c66666666666666666666666666666666666666666666666666666666666666625a5044392d2114080000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c201300121e2b3743505b666d6f6f6f6f6f69625a535050505050505050504f545c646b6f6f6f6f6f6c64594d4135281c0f0000000000040e19232d37414b545d656d757c83898f94989b9ea1a2a3a2a2a3a3a2a09e9a97928d88817a736b625950473d33291e1409000000000000000007131e2a35414c57626d77828c959fa8a69d948c857e7a7573716f6f6f7173767a7f868d959ea7a79e948b80756b6055493e33271b1004000000000004101c27323e49545f69747e88929ba4a89f968e87817c78757372727374777a7e848a9199a2a9a0988e857a70665b50453a2e23170c0000000013202c3946535f6c798693a0acb6aba19a989898989898989898989898989898989898989898989898989898989895887b6f6255483c2f2215090000000000000000000000000000010c16202931383d3f4040404040404040403e3a342c241a10050000000000000000000000000000000000000000000000030e18222b33393d3f40404040404040403f3d38322a21170d020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f1213131313131313110e0a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2935424e5b67717575757571675b4e4235291c0f0300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000713202c3845515e6a76838f9ba7aca094887b7064584d42372d241d1b1a1a1b1e242b35404b57636d726f6c6965625e5b564f463c31261a0e0200000714202d3945525e6a77838f9ca8ada194887c7064584c41352a211b19191a1d242e3944505c6874818d99a5afa3978b7e7266594d4134281b0f0200121f2c3945525f6c7885929faba99d9083766a5d5144372b1e1c1c1e242d37414d5864707c8894a0adb0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000121f2c3845525f6b7885929eabac9f92857873737373737373737373737373737373737373737373737373737373737373726c6155493c3023170a0000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130013202c3946525f6c787b7b7b7b7b746c655d564e4744444444474e565e666e757b7b7b7b7b76695d5043372a1d1000000000000007111b252f38424b535b636b72787e83888c8f92949697979897969593918e8b87827c767068615950473e352b21170c020000000000000000020d19242f3b46505b66707a848d969ea6a69e96908a86827f7d7c7c7c7d7f82868b90979fa7a59d958c82786e64594e43382d22160a0000000000000915212d38444f5a65707b86909aa4aaa0968d857d76706c6967656566686a6e737880879099a3aaa0968c82776c61564b3f34281d110500000013202c3946535f6c7884909ba7b2a69a8f8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b887b6f6255483c2f221509000000000000000000000000000007131e28323b43494c4c4c4c4c4c4c4c4c4c4a453e362c22170b00000000000000000000000000000000000000000000000915202a343d44494c4c4c4c4c4c4c4c4c4c49433c33291e1308000000000000000000000000000000000000000000000000000000000001060a0d0e0e0e0e0e0e0e0e0e0d0c08040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c69768282828276695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000916222f3b4854616d7986929eaba99c9084786b5f53473c30252222222222222222232f3b46515b626563605c5955524e4b453d342b2015090000000a16232f3c4855616e7a86939fabaa9d9185786c6054473b3024190f0c0c0d121c2834404c5864707d8996a2afa79a8e8275695c5043372a1e11050013202c3946535f6c7986929faca89b8f8275685c4f4236291c100f121b25303c4854606c7885919daab0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000131f2c3946525f6c7986929facac9f928580808080808080808080808080808080808080808080808080808080808080807d7164574a3e3124170b0000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130013202c3946535f6c7986888888867e776f686059514a424149515960687078808788888884776a5d5044372a1d110000000000000009131d262f394149515960676d72777c80838587898a8a8b8a8a888785827e7a76716b655e574f473e352c23190f050000000000000000000008131e29343f49545e68717b848c949ba2a8a19b96928e8c8a8989898a8c8e92969ca2a7a19b938b837a70675c52483d32271c10050000000000020e1a26323d4955606b77828d98a2aca3988e847b726b65605c5a59595a5b5e62676e757e87919ca6a89e94897e73675c5045392d21160a000000121e2b3744505c67737e8a96a1aca4978b7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7b6e6255483c2f22150900000000000000000000000000000c18242f3a444d54585959595959595959595650483e33281c1005000000000000000000000000000000000000000000030e1a26313c464f5559595959595959595959554e453b3024190d01000000000000000000000000000000000000000000000000000000060d1216191a1a1a1a1a1a1a1a1a1a1815100a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306090b0c0e0f1010111110100f0e0d0b09070401000000000000000000000000000000000000000000000000000000000000000000000000050a0e101111111111100d0904000000000000000000000000000000000000000000101c2936434f5c6976838f8f8376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000b1824313e4a5763707c8995a2aea69a8d8174685c4f43372f2f2f2f2f2f2f2f2f2f2f2f353f495157595754504d4946423f3a332b22190f060000000c1825323e4b5764707d8996a2afa79b8e8275695c5044372b1f13070000010c1723303c4855616d7a86939facaa9d9184786b5f5246392c2013070013202c3946535f6c798693a0aca89b8e8174685b4e4135281b0f0209141f2b3744505c6975828e9ba7b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c000000000000000000000000000000000013202c3946535f6c798693a0acada1968e8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8a7d7164574a3e3124170b0000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c201300121f2c3845515e69747d87919590898179726a635b544c4b535b636a727a828a91958f857b72675b4f4336291d1000000000000000010b141d262f3840474e555b61676b6f7376797b7c7d7d7e7d7d7c7a7875726e6a65605a534c453d352c231a11070000000000000000000000020d18222d38424c565f69717a828a90979ca1a5a29e9b989796969697989b9ea2a5a19c969089827971685e554b40362b20160a00000000000006121e2a36424e5a66717d88939ea9a89c91877c7269605954504d4c4c4d4f52565c636c75808a95a0aba59a8f84786d61564a3e32261a0e0200000f1c28343f4b57626e7985909ba6a69b8f8478717171717171717171717171717171717171717171717171717171717170695e53463a2e2114080000000000000000000000000000101c2834404b565f65666666666666666666625a5044392d21150900000000000000000000000000000000000000000007131f2b37424e58616566666666666666666560574c4135291d100400000000000000000000000000000000000000000000000000000810181e23262727272727272727272724201b140d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090d10131517191a1c1c1d1d1d1d1d1c1b19181613110e0a070300000000000000000000000000000000000000000000000000000000000000020a10161a1d1e1e1e1e1e1c19150f080000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000d1a2633404c5965727e8b98a4b0a4978b7e7165584c403c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3f464a4c4b4744403d3c3c3c3a36302921180e0300000e1a2733404d5966727f8c98a5b1a5988c7f73665a4d4134281b0f030000000714202c3945525e6b7784919daaaca093877a6d6154483b2e2215080013202c3946535f6c798693a0aca79a8e8174675a4e4134271b0e01030f1b2834414d5a6673808c99a6b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c000000000000000000000000000000000013202c3946535f6c798693a0acb2a89f9a999999999999999999999999999999999999999999999999999999999999978a7d7164574a3e3124170b0000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c201300101d2935414d58626b757e88929a938b847c756d665e57555d656d747c848c949b91877d736960564b3f33271a0e0000000000000000020b141d262e3841484d50565b5f63676a6c6e6f70717171706f6d6b6966625e59544f4c463e352b231a11080000000000000000000000000006111b26303a444d575f6870787f858b9095999c9fa1a2a3a2a2a2a3a2a19e9c9895908b857e7770675f564c43392f241a0f040000000000000a16222e3b47535f6b76828e99a5ada2968b80756a60574f4843413f3f4042464b525a636e78848f9aa6aca1958a7e72665a4e42362a1e120500000b17232f3a46515c68737e8a95a0aba0958a7f7469646464646464646464646464646464646464646464646464646464645f574d42362a1e12050000000000000000000000000000121e2b3844505d68717373737373737373726c6155493d32261a0e0200000000000000000000000000000000000000000c18242f3b47535f6a72737373737373737371695d5145382c1f13060000000000000000000000000000000000000000000000000008111a22292f3234343434343434343433312c261f160d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000004090d1216191c1f2224262728292a2a2a2a292927262422201d1a17130f0a0601000000000000000000000000000000000000000000000000000000030c141b2126292a2a2a2a2a2925201a120a01000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000f1b2835414e5b6774818d9aa6aea295897c6f6356494848484848484848484848484848484848484848484848484848484846423b332a1f150a00000f1c2935424e5b6874818e9aa7b0a3968a7d7064574b3e3225190c0000000004111d2a3643505c6975828f9ba8aea295897c6f6356493d3023170a0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000c1925323f4b5865717e8b98a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c000000000000000000000000000000000013202c3946535f6c7986939facb9b0a8a4a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a5a6a6a6a4978a7d7063574a3d3124170a0000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c2013000d1925303b465059636c768089939d968e877f777068615f676f777f878e969c93897f756b61584e44392e23170b00000000000000000006121e2935404a53595c5c5c5c5c5c5d5f6163646464646362615f5c5c5c5c5c5c5b5750473c31251a0e0100000000000000000000000000000a141e28323b454d565e666d747a8085898d9092949697979897969594928f8c89847f7a736d655e554d433a31271d1208000000000000010e1a26323f4b57636f7b87939faaa99d91857a6e63584e453d3734333334363a4048515c67727d8995a1ada69a8e83776a5e52463a2e211509000006121e2935404b57626d78838e99a4a69b90867b71675d5757575757575757575757575757575757575757575757575757544e453b31251a0e020000000000000000000000000000131f2c3946525f6c7980808080808080807d72665a4e42362a1e13070000000000000000000000000000000000000005101c2834404c58646f7b8080808080808080796d6053463a2d201307000000000000000000000000000000000000000000000000050f1a232c343a3f414141414141414141403d3830281f150a00000000000000000000000000000000000000000000000000000000000000000000000000000000040a1015191e2225292c2e30323435363637373736353433312f2c2926231f1b16110c0701000000000000000000000000000000000000000000000000010b151e262d3236373737373735312b241c1309000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d1003000000000000000000101d2a3643505c6976828f9ca8ada094877a6e61555555555555555555555555555555555555555555555555555555555555534d453b31261b0f0300111d2a3743505d6976838f9ca9aea195887b6f6255493c3023160a00000000010f1b2835414e5b6774818d9aa7b0a4978a7d7164574b3e3125180b0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1724313e4a5764707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000131f2c3946525f6c7985929facb2a79e97969696969696969696969696969696969696969696969696969aa2acb0a396897d7063564a3d3023170a0000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130008141f2a343e47515a646e77818b949e989189827a736b6a7179818991989e948a81776d63594f463c32281d12060000000000000000000915222e3a46515c646969696969696969665e57575757576067696969696969696862584e42362a1d11040000000000000000000000000000020c162029333b444c545b62696e74797d81838688898a8a8b8a8a89878583807c78736e68625b544c433a31281f150b0100000000000004111d2936424e5b67737f8b97a3afa4988c8174695d52473c332b28262627292e36404a56616d7885919da9ab9f93877b6e62564a3d3125180c0000010d18232f3a45515c67727d88929da7a2978d83786e655b524b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b48433c33291f1409000000000000000000000000000000121f2b3844515d6975818c8c8c8c8c8c8c82766a5e53473b2f23170b000000000000000000000000000000000000000915212d3945505c6874808c8c8c8c8c8c8c8175695e5145392c1f13060000000000000000000000000000000000000000000000000a16212b353e464b4d4d4d4d4d4d4d4d4d4d49423a31271c110500000000000000000000000000000000000000000000000000000000000000000000000000030a10161b20252a2e3235383b3d3f404243434444434342413f3d3b3936332f2b27221d18120c06000000000000000000000000000000000000000000000007121d2730383e424444444444413d362e251b10050000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d1003000000000000000000111e2b3744515d6a7784909daaaca09386796d626262626262626262626262626262626262626262626262626262626262625e574d43372b1f130700121e2b3844515e6b7784919daaada094877a6d6154473b2e21150800000000000d1a2733404d596673808c99a6b2a5988b7e7265594c3f3226190c0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000121f2b3845525e6b7885919eabaea2968c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a909ba7afa295887c6f6255493c2f2316090000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c201300020d18222c353f48525c656f79828c969f9b948c857d76747b838b939ba0968c82786f655b51473d342a20160b000000000000000000000b1724313d4a56626e75757575757575757065594c4b4f5c687275757575757575746a5e5245392c201306000000000000000000000000000000040e172129323a424a51575d63686d707477797b7c7d7d7e7d7d7c7b797673706c68635d575049423a31281f160d03000000000000000714202c3945525e6a77838f9ba8ada194887c7064584c41352b211b19191a1d242e3945505c6874818d99a5afa3978b7e7266594d4034281b0f02000007121e29343f4a55606b76818b959fa99f958a81776d645a5148403e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3c38312a21180d03000000000000000000000000000000101c2935414c5864707c87939999999993877b6f63574b4034281c10040000000000000000000000000000000000020e1a26313d4955616d7985919999999994887c7065594d4135291d10040000000000000000000000000000000000000000000000030f1b27323d4750575a5a5a5a5a5a5a5a5a59544c43382d22160a000000000000000000000000000000000000000000000000000000000000000000000000070e151b21272c31363a3e414447494b4d4e4f505050504f4f4d4c4a4845423f3b37332e29231d17110a030000000000000000000000000000000000000000020d19242f3942494e51515151504e4840372d22170b0000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d1003000000000000000000121f2c3845525e6b7885919eabac9f9285796f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6e695f54483b2f23160900121f2c3845525f6b7885929eabaca09386796c6053463a2d20130700000000000c1925323f4c5865727e8b98a5b2a6998c807366594d4033261a0d0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000111e2b3744515d6a7784909daaada093867d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7f8c99a6ada194877b6e6154483b2e2215080000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c2013000006101a232d37404a535d67707a848d97a19e968f87807e868d959da1988e847a70665d53493f352c22180e04000000000000000000000b1824313e4b5764717e8282828282828173675a4d44505d6a7782828282828282796d6053463a2d20130700000000000000000000000000000000050f172028303840474c52575c6164676a6c6e6f70717171706f6e6c6a6764605c57524c473f3730281f160d0400000000000000000a16232f3c4855616d7a86939fabaa9d9185786c6054483c3024190f0c0c0e121d2834404c5864717d8996a2afa79a8e8275695c5043372a1e11050000010c18232e39444f59646f79838e98a1a69c92897f766c635a52494038313131313131313131313131313131313131312f2c2620180f06000000000000000000000000000000000c1824303c48535f6b77838e9aa6a6a3978b8074685c5044382c211509000000000000000000000000000000000007121e2a36424e5a66717d8995a1a6a69b8f84786c6054483c3125190d01000000000000000000000000000000000000000000000006131f2c38434f5962676767676767676767655e554a3e32261a0d01000000000000000000000000000000000000000000000000000000000000000000020a11191f262c32383d42464a4e515456585a5b5c5d5d5d5d5c5b5a595754524f4b47433f3a342f28221b140d060000000000000000000000000000000000000006121e2a35404b545a5d5d5d5d5d5952493e33281c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d1003000000000000000000131f2c3946525f6c7985929facac9f92857b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7063574a3d3124170a0013202c3946535f6c7986929facac9f9286796c5f5246392c1f130600000000000b1825313e4b5864717e8b98a4b1a69a8d8173675a4d4034271a0d0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000101d2936434f5c6975828f9ba8ada094877a7070707070707070707070707070707070707070707074818d9aa7ac9f9286796c6053463a2d2014070000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c201300000008111b252e38414b555e68727b858f98a2a199928a8890989fa3998f867c72685e544b41372d231a100600000000000000000000000b1824313e4b5764717e8b8f8f8f8f8d8173675a4d44505d6a77848f8f8f8f8f86796d6053463a2d201307000000000000000000000000000000000005101c28333e4952585c5c5c5c5c5c5e60626364646464636361605d5c5c5c5c5c5c5851483d32271b0f040000000000000000000c1825313e4b5764707d8996a2afa79b8e8275695c5044382b1f13080000010c1824303c4855616e7a8793a0acaa9d9184786b5f5246392c20130700000006111c27323d48525d67727c869099a3a49b91887e756c645b524a413930282424242424242424242424242424242423201b150e06000000000000000000000000000000000008141f2b37434f5a66727e8a95a1ada89c9084786c6155493d3125190e02000000000000000000000000000000000b17232f3b47535e6a76828e9aa6aea2968b7e73675b4f43382c2014080000000000000000000000000000000000000000000000000815222e3b4754606b73747474747474747470665a4e4235281c0f020000000000000000000000000000000000000000000000000000000000000000040c141c232a31373d43494d52565a5d606365666869696a6a696968676563615e5b57534f4a45403a342d261f1710070000000000000000000000000000000000000915222e3a46525d656a6a6a6a6a645b5044382c1f130600000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d100300000000000000000013202c3946535f6c7986939facaca0948a88888888888888888888888888888888888888888888888888888888888888887d7164574a3e3124170b0013202c3946535f6c798693a0acac9f9285786b5f5245382c1f120500000000000b1824313e4b5764717d8a97a4b1a79a8e8174675a4d4134271a0e0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c00000000000000000000000000000000000f1b2835414e5a6774818d99a6aea295887c6f63636363636363636363636363636363636363636976828f9ca8aa9d9184776b5e5145382c1f12060000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000009131c262f39434c566069737c869099a3a49c95949aa2a59b91877d746a60564c42392f251b11080000000000000000000000000b1824313e4b5764717e8b989c9c9a8d8173675a4d44505d6a7784909c9c9c9386796d6053463a2d20130700000000000000000000000000000000000714202c3944505b636869696969696969665f57575757575f666969696969696968635a4f43372b1f12060000000000000000000e1a2733404d5966727f8c98a5b1a5988c7f73665a4d4134281c0f030000000714202d3945525e6b7884919daaaca093877a6d6154483b2e221508000000000b16212b36414b55606a747d87919ba4a39a91887e766d645c534b423a322a221a1818181818181818181818181816140f0a03000000000000000000000000000000000000030f1b26323e4a56616d7985919ca8ada195897d7165594e42362a1e120600000000000000000000000000000004101c28343f4b57636f7b87939eaaa99d92867a6e62564b3f33271b0f040000000000000000000000000000000000000000000000000916222f3c4955626f7c818181818181818176695c4f4336291c100300000000000000000000000000000000000000000000000000000000000000040d161e262e353c43494f54595e62666a6d6f717375757677777676757372706d6a67645f5b56514b453f3831292119110900000000000000000000000000000000000a1724303d4a56636e77777777766c6054473b2e21150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d100300000000000000000013202c3946535f6c798693a0acb1a69c96959595959595959595959595959595959595959595959595959595959595958a7d7164574a3e3124170b0013202c3946535f6c798693a0acac9f9285786b5f5245382c1f120500000000000b1724313e4a5764717d8a97a4b1a79a8e8174675a4d4134271a0e0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c00000000000000000000000000000000000d1926333f4c5865717e8b97a4b0a3978a7e71655856565656565656565656565656565656565f6b7885919eaaa79b8e8275695c5043362a1d11040000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c201300000000010a141d27313a444e57616b747e88919ba0a0a0a0a0a09d93897f756b62584e443a31271d1309000000000000000000000000000b1824313e4b5764717e8b98a4a79a8d8173675a4d44505d6a7784909da9a09386796d6053463a2d20130700000000000000000000000000000000000916222f3c4855616c757575757575757571665a4e4b4e5a667175757575757575746b6053473a2e2114080000000000000000000f1c2835424e5b6874818e9aa7b0a3968a7d7064574b3e3225190c0000000004111d2a3743505c6975828f9ca8aea295897c6f6356493d3023170a00000000040f1a242f39444e58626b757f89929ba5a39a91887f766e655d544c443c342c241c130b0b0b0b0b0b0b0b0b0b0b0a07030000000000000000000000000000000000000000000a16212d3945515d6874808c98a3afa5998e82766a5e52463b2f23170b0000000000000000000000000000000915202c3844505c6874808b97a3afa5998d8175695d52463a2e22160b000000000000000000000000000000000000000000000000000916222f3c4955626f7c898e8e8e8e8e8e8376695c4f4336291c1003000000000000000000000000000000000000000000000000000000000000040d161f2830383f474d545a60656a6e7276797c7e808182838484838282807e7c7a7773706b67625c565049423b332b231b1209000000000000000000000000000000000b1724313e4a5764717d8484847b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d100300000000000000000013202c3946535f6c798693a0acb7aea7a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2978a7d7064574a3e3124170b0013202c3946535f6c798693a0acac9f9285786b5f5245382c1f120500000000000b1824313e4b5764717d8a97a4b1a79a8e8174675a4d4134271a0e0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c00000000000000000000000000000000000b1724303d4956626f7b8894a1ada6998d8174685b4f4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a56626e7b8794a0ada5988c8073665a4d4134281b0f020000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000000020b151f28323c454f59626c757f8992939393939393938b81776d635950463c32281f150b01000000000000000000000000000b1824313e4b5764717e8b98a4a79a8d8173675a4d44505d6a7784909daaa09386796d6053463a2d2013070000000000000000000000000000000000091623303c4956636f7c8282828282828275685b4f424f5b6875828282828282827b6e6155483b2e221508000000000000000000101d2a3743505d6976838f9ca9aea295887b6f6255493c3023160a00000000020f1b2835414e5b6774818d9aa7b0a3978a7d7164574b3e3125180b000000000008131d27323c46505a636d768089939ca5a39a918880776f665e564e463e362d251d150d04000000000000000000000000000000000000000000000000000000000000000005111d2834404c58636f7b87939faaaa9e92867a6f63574b3f33271c100400000000000000000000000000010d1925313d4955606c7884909ca8aca094887c7065594d4135291e1206000000000000000000000000000000000000000000000000000916222f3c4955626f7c89969a9a9a9a908376695c4f4336291c10030000000000000000000000000000000000000000000000000000000000030d161f28313a424a51585f656b71767a7e8285888b8c8e8f909090908f8e8d8b898683807c77726d68615b544d453d352d241b12080000000000000000000000000000000b1724313e4a5764717d8a91887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d1003000000000000000000131f2c3946525f6c7986929facb4aaa19b9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9da4aeafa3968a7d7063574a3d3024170a0013202c3946535f6c7986929facac9f9286796c5f5246392c1f130600000000000b1825323e4b5864717e8b98a4b1a69a8d8173675a4d4034271a0d0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c00000000000000000000000000000000000815212e3a4753606c7885919da9a99c9084776b5f53483d3d3d3d3d3d3d3d3d3d3d3d424d5966727e8a97a3aea195897c7064574b3e3225190c000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c2013000000000000030d16202a333d47505a636d7781868686868686868683786f655b51483e342a20160d0300000000000000000000000000000b1824313e4b5764717e8b98a0a09a8d8173675a4d44505d6a7784909da0a09386796d6053463a2d2013070000000000000000000000000000000000091623303c4956636f7c898f8f8f8f8f8275685b4f424f5b6875828f8f8f8f8f887b6e6155483b2e221508000000000000000000121e2b3844515e6b7784919daaada094877a6d6154473b2e21150800000000000d1a2733404d596673808c99a6b1a5988b7e7265594c3f3226190c0000000000010b16202a343e48515b646e77818a939ca5a39a928981787068605850483f372f271f160e0600000000000000000000000000000000000000000000000000000000000000000c18242f3b47535f6b76828e9aa6afa3978b7f73675c5044382c2014090909090909090909090909090909121e2a36414d5965717d8995a1aca79b8f83776c6054483c3025190d01000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2a7a79c908376695c4f4336291c100300000000000000000000000000000000000000000000000000000000010b151f28313a434c545c636a70767c82868b8e929597999b9c9d9d9d9d9c9b99989593908c88837e79736c665f574f473f362d241a100700000000000000000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d1003000000000000000000121f2c3845525f6b7885929eabafa3988f8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e929ca8afa296897c6f6356493c3023160900121f2c3845525f6b7885929eabaca09386796d6053463a2d20130700000000000c1925323f4c5865727e8b98a5b2a6998c807366594d4033261a0d0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c000000000000000000000000000000000006121f2b3744505c6975818d99a5aca094887c7064594d43383030303030303030323c47525e6a76828e9aa6aa9e9285796d6054483b2f23160a000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c201300000000000000040e18212b353e48515b656e7879797979797979797970675d53493f362c22180e040000000000000000000000000000000b1824313e4b5764717e8b939393938d8173675a4d44505d6a7784909393939386796d6053463a2d2013070000000000000000000000000000000000091623303c4956636f7c89969c9c9c8f8275685b4f424f5b6875828f9c9c9c95887b6e6155483b2e221508000000000000000000121f2c3845525f6b7885929eabaca09386796d6053463a2d20130700000000000c1925323f4c5865727e8b98a5b2a6998c807366594d4033261a0d000000000000040e18222c363f49525c656e78818a939ba4a49b938a827a726a625a51494139312820180f070000000000000000000000000000000000000000000000000000000000000007131f2b36424e5a66717d8995a1ada79c9084786c6054483d31251915151515151515151515151515151517222e3a46525e6a76828d99a5aea2968a7e73675b4f43382c20140800000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c10030000000000000000000000000000000000000000000000000000000009131d27313a434d555e666d747b82888d92979b9ea1a4a6a7a9a9a8a8a9a9a8a6a4a29f9c98948f8a847e777069615951483f362c22190e04000000000000000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d1003000000000000000000111e2b3844515e6a7784919daaada09387818181818181818181818181818181818181818181818181818c99a6aea194887b6e6155483b2f22150900121e2b3844515e6b7784919daaada094877a6d6154473b2e21150800000000000d1a2633404d596673808c99a6b2a5988c7e7265594c3f3226190c0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000030f1c2834404d5965717d8995a1aca4988c81756a5f544a4139322e2c2c2d2f343b434e58636f7a86929eaaa5998d8275695d5145382c201307000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000000000000060f19232c363f49535c666c6c6c6c6c6c6c6c6c6c685e554b41372d241a1006000000000000000000000000000000000b1824313e4b5764717e8686868686868173675a4d44505d6a7784868686868686796d6053463a2d2013070000000000000000000000000000000000091623303c4956636f7c8996a3a89c8f8275685b4f424f5b6875828f9ca8a295887b6e6155483b2e22150800000000000000000013202c3946535f6c7986929facac9f9286796c5f5246392c1f130600000000000b1825323e4b5864717e8b98a4b1a69a8d8173675a4d4034271a0d0000000000000006101a242d37404a535c666f788189929aa3a59c948c847c746b635b534b433a322a21191108000000000000000000000000000000000000000000000000000000000000020e1a26323d4955616d7884909ca8aca094897d7165594d41352a222222222222222222222222222222222227333f4b57626e7a86929eaaa99d92867a6e62564a3f33271b0f0300000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c100300000000000000000000000000000000000000000000000000000006101b252f39434c565f6770777f868d93999ea3a7aaa6a3a09e9d9c9c9c9c9d9ea0a2a5a9a8a4a09b958f89827b736b635a51483e342a20160c010000000000000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d1003000000000000000000101d2a3643505c6976838f9ca9ada094877a7474747474747474747474747474747474747474747474808d9aa6aca093867a6d6054473a2e21140700111d2a3743505d6976838f9ca9aea295887b6f6255493c3023160a00000000010f1b2835414e5a6774818d9aa7b0a4978a7d7164574b3e3125180b0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000000c1824303d4955616d7884909ca7a99d92877b71665c534a433e3a3938393c3f454d565f6a75808c97a3aca095897d7165594d4135281c1004000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c201300000000000000000007111a242e37414a545b5f5f5f5f5f5f5f5f5f5f5c564d43392f251b120800000000000000000000000000000000000b1724313e4a57637079797979797979797266594d43505c697479797979797979766b5f5346392d2013060000000000000000000000000000000000091623303c4956636f7c8996a3a89c8f8275685b4f424f5b6875828f9ca8a295887b6e6155483b2e22150800000000000000000013202c3946535f6c798693a0acac9f9285786b5f5245382c1f120500000000000b1824313e4b5764717d8a97a4b1a79a8e8174675a4d4134271a0e000000000000000008121b252e38414a545d666e7780899199a2a69e968e867d756d655d554c443c332b231a11090000000000000000000000000000000000000000000000000000000000000915212d3944505c6874808b97a3afa5998d81756a5e52463a2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f38444f5b67737f8b97a3aea4998d8175695d52463a2e22160b0000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c10030000000000000000000000000000000000000000000000000000020d17222d37414b555e687179828a91989ea4aaa7a29d9a969492908f8f8f8f90929496999da1a6aba6a19a948d857d756c635a50463c32281d13080000000000000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000f1c2835424e5b6874818d9aa7aea195887b6f67676767676767676767676767676767676767676875828e9ba8aa9e9185786b5f5245392c1f1306000f1c2935424e5b6874818e9aa7b0a3968a7d7064574b3e3225190c0000000004111d2a36434f5c6975828f9ba8afa295897c6f6356493d3023170a0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000000814202c3844505c68737f8a96a1aca3988d82786e655c554f4a47464546484b50575f68717c86919da8a69b8f84786c6155493d3125190c00000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000000000000000008121c252f38424a5052535353535353535353504b443b31271d13090000000000000000000000000000000000000916222f3b47535e676c6c6c6c6c6c6c6c6960554a404c58626a6c6c6c6c6c6c6c6b645a4f43372b1e12050000000000000000000000000000000000091623303c4956636f7c8996a0a09c8f8275685b4f424f5b6875828f9ca0a095887b6e6155483b2e22150800000000000000000013202c3946535f6c798693a0acac9f9285786b5f5245382c1f120500000000000b1724313e4a5764717d8a97a4b1a79a8e8174675a4d4134271a0e00000000000000000009131c262f38424b545c656e767f879098a0a8a0978f877f776f675e564e453d352c231b1209000000000000000000000000000000000000000000000000000000000005101c2834404b57636f7b87929eaaaa9e92867a6e62564b3f3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c4854606c78848f9ba7aba094887c7064594d4135291d12060000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000000000008131e29343e49535d67707a838b949ba3a9a8a29c96918d8a878584838282838485878a8d91959aa0a6aca59e978f877e756c62584e443a2f24190e0300000000000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000d1a2733404c5966727e8b98a4afa3968a7d70645a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5e6b7784909daaa89c8f8376695d5044372a1e1104000e1a2734404d5966737f8c98a5b1a5988c7f73665a4d4134281b0f030000000713202c3945525e6b7784919daaada094877a6e6154483b2f2215090013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c00000000000000000000000000000000000004101c2834404b57626e79848f9aa5a99f948a80776e67605a565452525354575c61687179838d98a3aaa0958a7e73675c5044382c20140800000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c201300000000000000000000000a131d2630383f434646464646464646464644403a32291f150b0100000000000000000000000000000000000007131f2b37424c555c5f5f5f5f5f5f5f5f5d574e443b4650595e5f5f5f5f5f5f5f5f5a52493e33271b0f020000000000000000000000000000000000091623303c4956636f7c89939393938f8275685b4f424f5b6875828f93939393887b6e6155483b2e22150800000000000000000013202c3946535f6c798693a0acac9f9285786b5f5245382c1f120500000000000b1824313e4b5764717d8a97a4b1a79a8e8174675a4d4134271a0e000000000000000000010a141d262f39424a535c646d757e868e969fa7a19991898178706860574f473e352d241b120900000000000000000000000000000000000000000000000000000000000c17232f3b47525e6a76828e99a5aea2978b7f73675b4f4848484848484848484848484848484848484848484d5965707c8894a0aca79b8f83776c6054483c3025190d010000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c100300000000000000000000000000000000000000000000000000030e1925303b45505b656f79838c959da5ada59e97908b86817d7b78777675757677787a7d8185898f959ca3aaa9a19990877e746a60564b41362b20150900000000000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000b1825313e4a5763707c8995a2aea5988c8073675a4e4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d55616d7a86939faca6998d8074675b4e4235281c0f03000c1825323e4b5764707d8996a2afa79b8e8275695c5044372b1f13080201020b17232f3b4854616d7a86939facaa9e9185786c5f5346392d2014070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c000000000000000000000000000000000000000c17232f3a46515d68737e89939da7a69c92898078716b6663605f5f5f6164686d737a838c959faaa3988e83786d62564b3f34281c100400000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000000000000000000010b141e262d33373939393939393939393938342f2820170d0300000000000000000000000000000000000000030e1a25303a434b505353535353535353514c453c353e474e5253535353535353524f4940372c21160a000000000000000000000000000000000000091623303c4956636f7c8686868686868275685b4f424f5b6875828686868686867b6e6155483b2e22150800000000000000000013202c3946535f6c7986929facac9f9286796c5f5246392c1f130600000000000b1825323e4b5864717e8b98a4b1a69a8d8173675a4d4034271a0d00000000000000000000020b141d262f38414a525b636c747c858d959da5a39b938b827a7269615950473f362d241b12090000000000000000000000000000000000000000000000000000000007131e2a36424e5965717d8994a0aca79b8f84786c6055555555555555555555555555555555555555555555555d6975818d99a5aea2968a7e73675b4f43372c201408000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c10030000000000000000000000000000000000000000000000000008141f2a36414c57626c77818b959ea7ada49b938c857f7a75716e6c6a696969696a6c6e7174797e848a9198a1a9aba29990867c72675d52473c31261b0f04000000000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000916222f3b4854616d7986929eaba89b8f83766a5e5246414141414141414141414141414c5864717d8996a2aea2968a7d7164584c3f33261a0d01000a16232f3c4855616e7a87939facaa9d9185786c6054483c302419110f0e0f121c27333f4b5764707c8995a2aea79b8f8276695d5044372b1e12050013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000000007121e2935404b56616c77818b959ea8a49b928a837c77726f6d6c6b6c6e7074787e858c959ea7a49b91877c72675c51453a2e23170b0000000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c2013000000000000000000000000020c141c22272b2c2c2c2c2c2c2c2c2c2c2b28231d160e0500000000000000000000000000000000000000000009141e2831394044464646464646464645413b332c353c42454646464646464646433e372e251b10050000000000000000000000000000000000000916232f3c4955626e787979797979797973675b4e424e5b677379797979797979776d6154483b2e211508000000000000000000121f2c3845525f6b7885929eabaca09386796c6053463a2d20130700000000000c1925323f4c5865727e8b98a5b2a6998c807366594d4033261a0d0000000000000000000000020b141d262f384049515a626a727a838b939ba3a59d948c847b736b6259514840372e241b1208000000000000000000000000000000000000000000000000000000020e1a25313d4955606c7884909ca7aca094887c70646262626262626262626262626262626262626262626262626e7a86929da9a99d91867a6e62564a3f33271b0f03000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000000010d1925303c47525d68737e89939da7aea49b928a827a746e6965625f5d5c5c5c5c5d5f6164686d72787f878f97a0a9aba2988e84796f64594e42372c201409000000000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000713202c3845515d6a76828e9ba7ab9f92867a6e63574c40363434343434343434343a45515c6874818d99a5ab9f93877a6e6155493c3024170b00000714202d3946525e6b7783909ca8ada194887c7064584c41362b221e1c1b1c1e232d3844505b6774808c98a5b0a4988c7f73665a4e4135281c0f030013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c00000000000000000000000000000000000000010d18242f3a45505a656f79838c959ea6a49c958e88837e7b797878797a7c8084898f969ea7a39b92897f756a60554a3f34291d12060000000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c201300000000000000000000000000020a11171b1e202020202020202020201f1c18120c0400000000000000000000000000000000000000000000020c161f282f3438393939393939393938353029232b313639393939393939393937322c251c1309000000000000000000000000000000000000000814212d3a46525d666c6c6c6c6c6c6c6c6961574b3f4b5761696c6c6c6c6c6c6c6c665c5145382c201307000000000000000000121e2b3844515e6b7784919daaada094877a6d6154473b2e21150800000000000d1a2633404d596673808c99a6b2a5988c7e7265594c3f3226190c000000000000000000000000020b141d262e373f4850586069717981899199a1a69e968d857c746b635a524940372d241a11070000000000000000000000000000000000000000000000000000000915212c3844505c67737f8b97a2aea5998d81756f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f727e8a96a2aea4988d8175695d51463a2e22160a00000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c100300000000000000000000000000000000000000000000000006121e2a35414d58636f7a85909aa5afa69c928980777069635d59555351504f4f50515255585c61676d757d858e97a1abaaa0968b80756a5f54483d3125190e020000000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d100300000000000000000004101d2935424e5a66727e8a96a2aea3978b7f73685d52483e352f2a2828292b3038414b56626d7985919da9a79b8f83766a5e5246392d211408000005111d2a36424f5b6773808c98a4b0a4988c8174695d52473d342e2a2828282a2e353f4955606c7884909ca8aca094887c6f63574b3e3225190d000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c000000000000000000000000000000000000000007121e29333e49535d67717a838c949ca3a69f99938f8b888685858687898c90959aa1a7a199918980766d63594e44392e23180c010000000000000d1a2633404d596673808d9aa6ada09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c2013000000000000000000000000000000060b0f121313131313131313131312100c0701000000000000000000000000000000000000000000000000040d161d23282b2c2c2c2c2c2c2c2c2c29241e1920262a2c2c2c2c2c2c2c2c2c2a27211b130a010000000000000000000000000000000000000005111d2935404b545c5f5f5f5f5f5f5f5f5e584f453a454f585e5f5f5f5f5f5f5f5f5b544a3f34281c1004000000000000000000111d2a3743505d6976838f9ca9aea195887b6f6255493c2f23160a00000000010f1b2834414e5a6774818d9aa7b0a4978a7d7164574b3e3125180b00000000000000000000000000020b141c252d363e464e575f676f777f878f979fa79f978f867e756c645b52493f362c23190f05000000000000000000000000000000000000000000000000000004101c28333f4b57636e7a86929ea9a99d91867b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b838f9ba7aba094887c7064594d4135291d120600000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c10030000000000000000000000000000000000000000000000000a16222e3a46525e6975808b96a1acaa9f958a81776e665e57524d494644434242434446484c50565c636b737c858f99a4afa79d92877b7065594d42362a1e12060000000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d1003000000000000000000010d1925323e4a56626e7a86929da9a79c9085796e645a5047403a37353435383c424a535d68737e8a95a1ada2968a7e72665a4e42362a1d11050000010e1a26333f4b57636f7b87939faba99d91857a6e64594f463f3a37353435373a3f47515b66717d8994a0aca89c9084786c6053473b2f22160a000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000000000010c17222c37414b555f68717a828a91989ea3a49f9b9795939292929496989ca0a6a19c968f8780776e645b51473c32271c1106000000000000000d1a2633404d596673808d9aa1a1a09386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b12181c1f20202020202020201f1c19130e151a1d1f202020202020201f1e1b161009010000000000000000000000000000000000000000010d19242f39424a505353535353535353514d463d333d464d5153535353535353524f4a42382e23180c000000000000000000000f1c2935424f5b6874818e9aa7b0a3968a7d7064574b3e3225180c0000000004111d2a36434f5c6975828f9ba8afa295897c6f63564a3d3023170a0000000000000000000000000000020a131b242c343d454d555d656d757d858d959da6a19890877e756d645b51483e352b21170d0200000000000000000000000000000000000000000000000000000b17232f3a46525e6a75818d99a5aea2968c8888888888888888888888888888888888888888888888888888888a949faba79b8f83776b6054483c3024190d0100000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c10030000000000000000000000000000000000000000000000020e1a26333f4b57626e7a86919da8afa4998e83786e655c544c46413d3a383636363637393c40454a5159616a737d88929da8aea3988d81766a5e52463a2e22160a0000000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d1003000000000000000000000916222e3a46525d6975818c98a3aca1968b80766c6259514b464342414244474d535c656f79848f9ba6a89d91867a6e62564a3e32261a0e010000000a17232f3b47535f6b77838e9aa5ada2968b80756b6158504a464342414243464b5159636d77838e99a5aea3978b8074685c4f43372b1f1306000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c00000000000000000000000000000000000000000006101b252f3a434d565f68707880868c92979b9fa2a4a1a09f9f9fa0a2a4a19e9a96918b847d756d655c53493f352b20160b00000000000000000d1a2633404d596673808d949494949386796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c2013000000000001070b0e0f0f0f0f0f0f0f0f0f0e0b060104090c0f0f0f0f0f0f0f0f0f0e0c09040000000000000000000000000000000000000000000001070c1012131313131313131312100d0803090e11131313131313131313110e0a05000000000000000000000000000000000000000000000007121d2730383f44464646464646464645413c342b343c41454646464646464646433f382f261c1106000000000000000000000e1a2734404d5966737f8c98a5b1a5988c7f7266594d4134281b0f030000000713202c3845525e6b7784909daaada094877a6e6154483b2f2215090000000000000000000000000000000109121a222b333b434b535b636b737b838b949da5a29990887f766d635a50473d33291e140a000000000000000000000000000000000000000000000000000006121e2a36414d5965717c8894a0aca89e97959595959595959595959595959595959595959595959595959595969ca5aea2968a7e73675b4f43372b2014080000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c1003000000000000000000000000000000000000000000000005111e2a36434f5b67737f8b97a2aeaa9e93877c71675c534a423b35302d2b2a2929292b2d3034393f474f58616b76818c97a2aea99e92867a6f63574b3e32261a0e0100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000005111d2935414d5964707b86919ca7a79d92887e746b635c5752504e4e4f5154585e656e77818b96a1aca2978c8075695d52463a2e22160a0000000007131f2b37434f5a66727d89949faaa89c92877d736a625b5652504e4e4e5052565c636b747e89949faaa89d91867a6f63574b3f33271b0f03000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000000000000009131e28313b444d565e666e757b81868b8f929598999a9b9b9b9a999795928e8a858079736b645b534a41372d23190f040000000000000008121b2633404d5966738088888888888886796d6053463a2d2013070000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c201300000000060d12171a1c1c1c1c1c1c1c1c1c1a17120c0f15191b1c1c1c1c1c1c1c1c1b19140f09010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151e272e333739393939393939393835302a222a303538393939393939393937332d261d140a00000000000000000000000c1825323e4b5764707d8996a2afa79b8e8275695c5044372b1f13080201020b17232f3b4854616d7986939facaa9e9185786c5f5346392d2014070000000000000000000000000000000000081019212931394149515961697179828a939ca5a29a91887f756c62594f453b30261b110600000000000000000000000000000000000000000000000000010d1925313d4854606c78838f9ba7b0a8a3a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a6aea99d91857a6e62564a3e33271b0f030000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c100300000000000000000000000000000000000000000000000815212d3a46525f6b77838f9ba7b1a5998d82766b60554b4138302a24211e1d1c1c1d1e2024282e353d464f5a646f7a86919da9afa3978b7f73675b4e42362a1d110500000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d100300000000000000000000010d1925303c48535e6a75808b95a0aaa49990867d756e68625f5c5b5b5b5d60646970778089939da7a59b90857a6f63584c4135291d120600000000030e1a26323e4a55616c77828d98a2aca3998f857c746d67625f5c5b5b5b5c5f62676d757d87909ba5aba1968b8075695e52463b2f23170b00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c00000000000000000000000000000000000000000000020c161f29323b444c545c636a70757a7f8386898b8c8e8e8e8e8d8c8a8885827e79746e686159524941382f251b110700000000000000040f1a242d35404c5966727b7b7b7b7b7b7b7b786c5f5346392d2013060000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130000000710171e232729292929292929292927231e171a20252829292929292929292825201a130b020000000000000000000000000000000000000000000000000000000508090a0a0a0a0a0a0a0a090805010000000000000000000000000000000000000000000000000000000000000000000000030c151c23282b2c2c2c2c2c2c2c2c2c29251f181f25292c2c2c2c2c2c2c2c2c2b27221c140b0200000000000000000000000a16232f3c4855616e7a87939facaa9d9185786c6054473b302419110f0e0f111b27333f4b5764707c8995a2aea89b8f8276695d5044372b1e1205000000000000000000000000000000000000070f171f272f373f474f575f677078818a939ca5a39a91887e746b61574c42382d22170c01000000000000000000000000000000000000000000000000000814202c38434f5b67737e8a96a2aeb3afaaa3a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a2a8afb2b0a4988d8175695d51463a2e22160a000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c100300000000000000000000000000000000000000000000000b1724303d4956626e7b87939facada195897d7165594e43392f261e191412100f0f101114181d232b343e48535e6975818c98a4b0a79b8f83776a5e5245392d20140700000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d100300000000000000000000000814202b37424d58636e79848e98a1aaa29890878079736e6b696867686a6c70757a8189929ba5a79d93897e74695e52473c3024190d0100000000000a16212d39444f5b66717c86909aa4aba1978e867e78736e6b69686768696b6e73787f879099a2aca3998f847a6f63584d41362a1e120700000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000000000000000040d17202a333b424a51585f656a6f73777a7c7e808181828181807e7b7976726d68635d564f48423c342a20160b00000000000000000915202b363f474d56616a6e6e6e6e6e6e6e6e6d665b5044372b1e12050000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c2013000006101922292f33353636363636363635332f2921252c3134363636363636363634312c251d140b00000000000000000000000000000000000000000000000000060c11141617171717171717171614110c070000000000000000000000000000000000000000000000000000000000000000000000030a11171b1e20202020202020201f1d19140e14191d1f20202020202020201e1b17110a020000000000000000000000000714202d3946525e6b7783909ca8ada194887c7064584c41352b221d1b1a1b1d232d38444f5b6773808c98a5b0a4988c8073675a4e4135281c0f0300000000000000000000000000000000000000050d151d252d353d454d555e666f78818a939ca6a39a90877c73685e54493f34291e130700000000000000000000000000000000000000000000000000040f1b27333f4a56626e7a86919da9b5aca1989494949494949494949494949494949494949494949494969ea9b4aba094887c7064584d4135291d1106000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c100300000000000000000000000000000000000000000000000d1a26333f4c5865717e8a97a3afaa9d9185786c6054493d32271d140d08050300000205080c1219222c36414d5864707c8894a0adab9f93877a6e6155483c2f23160a00000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000000030f1a25313c47525d67727c868f98a1a9a199918a847f7b787574747576797c80868c939ba4a69e958b81776d62574c41362a1f140800000000000005111c28333e49545f6a747e89929ba4a9a0989089837e7a787675747576787b7e848a9199a2aba39a91877d73685d52473c3025190e0200000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c0000000000000000000000000000000000000000000000030f1b26313c454d53555555595e63676a6d707273747475747473716f6c6966615d57555555534d463c32271c1004000000000000000e1a26323d4751595d5e5f6161616161616161605c544a3f33271b0f030000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c201300030e18222c343a3f4242424242424242423f3a332b2f373d414242424242424242413d372f261c120700000000000000000000000000000000000000000000010a11181d2123232323232323232323211d18110a020000000000000000000000000000000000000000000000000000000000000000000000060b0f12131313131313131312100d0803080d10121313131313131313120f0b06000000000000000000000000000005111d2a36424f5b6774808c98a4b0a4988c8074695d52473d342d2a2827282a2e353f4954606c7884909ca8aca094887c7063574b3e3226190d000000000000000000000000000000000000000000030b131b232b333b434c545d666e77818a949da7a2988f857a70655b50453a2f24190d02000000000000000000000000000000000000000000000000000b16222e3a46515d6975818d98a4b0a79b8f87878787878787878787878787878787878787878787878c98a4b1a79b8f83776b5f54483c3024190d01000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c100300000000000000000000000000000000000000000000000f1b2835414e5b6774818d99a6b2a79a8e8175695c5044382c20150b0200000000000000000007101a25303c4854606c7884919daaafa296897d7064574b3e3225180c00000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000000000914202b36404b55606a747d868f979fa6a39c95908b8784828181828385888c91979ea5a49c948c83796f655b50463b3025190e03000000000000000b16222d38434e58626d768089929aa1a8a29b948f8a8784828281828284878b8f959ba3a8a19991887f756b61564c41362b1f14080000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c00000000000000000000000000000000000000000000000714202c38434e575e6262626262615c5e616365666768686767666462605d5c6162626262625f584e44382d20140800000000000000111d2a36424e59636a6b6b6b6b69635b54545454504a42382d22170b000000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c20130009141f2a343e454b4f4f4f4f4f4f4f4f4f4b453d343841484d4f4f4f4f4f4f4f4f4d4841382e24190d020000000000000000000000000000000000000000010a131b23292d2f3030303030303030302d29231c140b01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a27333f4b57636f7b88939faba89d91857a6e63594f463f3936353435363a3f47505b66717c8894a0aca89c9084786c6054473b2f22160a00000000000000000000000000000000000000000000010911192129313a424b545c656e78828b95a0aaa0968c82776c62574c40352a1e13070000000000000000000000000000000000000000000000000006121d2935414d5864707c88949faba79b8e827a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7f8b97a4aea2968a7e72675b4f43372b20140800000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c10030000000000000000000000000000000000000000000000101d2a3643505c6976828f9ca8b1a4988b7e7266594d4034281c1004000000000000000000000008141f2b3744505c6875828e9aa7b1a5988c7f7366594d4033271a0e00000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000010507101c2936434f5c69768390908376695c4f4336291c1007050100000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d1003000000000000000000000000030e19242f39444e58626b747d858d949ba1a6a19b9793918f8e8e8e909295989da2a59f99928b837a71675d53493f34291e1308000000000000000005101b26313c46515b646e77808890979da3a6a09b9793918f8e8e8e8f9193979ba0a6a39d968f877f766d63594f453a2f24190e030000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01070b1723303d4a5663707d8a96a3aea3968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3226190c0a0a0a0a0a0a0a0a0906020000000000000000000000000a16232f3c48545f696e6f6f6f6f6d675f5856585a5a5b5b5b5a595856575f666d6f6f6f6f6f6a6055493d3024170b00000000000000131f2c3945525e6b7577777777756d645c544c47443f382f261c1106000000000000000000000000000000000000000000000000000c1926323f4c5965727f8c9386796c5f5346392c2013000d1925313c4650575b5c5c5c5c5c5c5c5b574f463b404a53595c5c5c5c5c5c5c5c59534a40352a1e1206000000000000000000000000000000000000000008121c252d34393c3d3d3d3d3d3d3d3d3c39342e261d130900000000000000000000000000000000000000000000000000000000000000000104070a0c0e0f111212131313131212100f0d0b0906030000000000000000000000000000000000000000000000000000000b17232f3b47535f6b77838e9aa5ada2968b80756b6158504a464341414143464a5159626c77828e99a5aea3978b8074685c5044372b1f1307000000000000000000000001020304050708090908050100070f171f283039424a535c666f79848e98a3a89e94897e73685d52463b2f24180c00000000000000000000000000000000000000000000000000010d1924303c48545f6b77838f9ba6ab9f93877b6f6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d7884909ca8a99d9185796e62564a3e33271b0f0300000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c10030000000000000000000000000000000000000000000000121e2b3844515e6a7784919daaafa396897d7063574a3e3125180c000000000000000000000000030f1b2834404d5966727f8c98a5b1a79a8e8174685b4e4235281c0f00000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000070d1114161c2936434f5c69768390908376695c4f4336291c1614110d07000000000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000000000008121d28323c465059626b737b838a90969b9fa3a3a09d9c9b9b9b9c9ea1a4a29e99948e88817970685f554c42372d22180d020000000000000000000a15202a353f49525c656e767e858c92979ca0a3a3a09d9c9b9b9b9c9da0a3a3a09c97928c857d756d645b51473d33281e1308000000000013202c3946535f6c798693a0a1a19a8e8174675a4d4134271a0e0c12171b23303d4a5663707d8a96a1a1a1968a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f32261917171717171717171715120e0801000000000000000000000b1824313e4b5764707b7b7b7b7b787169625a534d4e4e4e4e4d4d5159616971787b7b7b7b7b7165584b3f3225180c0000000000000013202c3946535f6c79848484847e766e665e554d453d352c241c140c03000000000000000000000000000206090a0a0a0a0a0a0a0a0c1926323f4c5965727f8c9386796c5f5346392c201300111d2936424d586268696969696969696761574c4147525c656969696969696969655c52463a2e22160900000000000000000000000000000000000000030f1a242e373f45494a4a4a4a4a4a4a4a49453f382f251a0f040000000000000000000000000000000000000000000000000000000001060a0d111416191a1c1d1e1f1f20201f1f1e1d1c1a1815130f0c080400000000000000000000000000000000000000000000000007131f2b37434f5a66727d89949faaa79c91877c736a625b56524f4e4d4e4f52565c636b747e89949faaa89d92867a6f63574b3f33271b0f030000000000000002070a0c0d0f1011121315161614110d0701050e161e272f38414a545e67727c86919ca7a59b9085796e63574c4034281d1105000000000000000000000000000000000000000000000000000814202b37434f5b66727e8a96a2ada3978c80746860606060606060606060606060606065717d8994a0aca4988c8175695d51453a2e22160a0000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8996a2afa99c908376695c4f4336291c10030000000000000000000000000000000000000000000000121f2c3945525f6b7885929eabaea195887b6e6255483c2f221609000000000000000000000000000c1825313e4b5764717d8a97a3b0a89c8f8276695c4f4336291d1000000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000030b12181d2022222936434f5c69768390908376695c4f4336292222201d18120b0300000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d100300000000000000000000000000010b16202a343e475059616971787e858a8f9396999b9d9e9f9f9f9e9d9b9895928e89837d766e675e564d433a30261b110600000000000000000000030e18232d37404a535c646c737a81878c9094979a9c9d9e9f9f9f9e9d9b999794908b86817a736b635b52493f362b21170c01000000000013202c3946535f6c798693949494948e8174675a4d4134271a0f171e23282a303d4a5663707d8a94949494948a7d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f322624242424242424242423221e19130c040000000000000000000b1824313e4b5764717e88888888837b746c655d564e4742444c545c636b737b83888888887e7265584c3f3225190c00000000000000131f2c3946525f6b76818b919189807870675f574f473e362e261e150d050000000000000000000001080e12151717171717171717171926323f4c5965727f8c9386796c5f5346392c201300121f2c3845525e6a737575757575757573695d51444b57636e75757575757575756e63574a3e3124180b000000000000000000000000000000000000000814202b3640495155565656565656565655514a41372c211509000000000000000000000000000000000000000000000000000002080d12161a1d20232527292a2b2c2c2c2c2c2c2b2a282724221f1c18140f0b0500000000000000000000000000000000000000000000030f1b26323e4a55616c77838d98a3ada3998e857c746c66625e5c5b5a5b5c5e62676d747d86909ba5aba1968b8075695e52473b2f23170b00000000000001080e1317191a1b1d1e1f20212222211d19130b03040c151d262f38424c56606a75808a96a1aca1968b8074685c5145392d21150800000000000000000000000000000000000000000000000000030f1b27323e4a56626d7985919da9a89c9084786c61555353535353535353535353535e6975818d99a5ab9f94887c7064584c4135291d11060000000000000000000000000000000000000000000000000000000000000000010c16222f3c4955626f7c8996a2afa99c908376695c4f4336291c1107000000000000000000000000000000000000000000000013202c3946525f6c7986929facada094877a6d6154473a2e211408000000000000000000000000000a1623303c4956626f7c8995a2afaa9d9083776a5d5044372a1d1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000020c151d24292d2f2f2f36434f5c69768390908376695c4f43362f2f2f2d29241d150c02000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000000000000040e18222c353e474f575f666d73797e83878a8d8f909292929291908e8c8986827d78726b645d554c433a31281e140900000000000000000000000007111b252e38414a525a62696f757b8084888b8d8f909292929291908f8d8a8784807a756f68615a514940372d241a0f0500000000000013202c3946535f6c79868888888888888174675a4d4134271a1821282f3437383d4a5663707d888888888888887d7063564a3d3023170a0013202c3946535f6c7986938c7f7265594c3f3230303030303030303030302e2a251e160d0300000000000000000a1724303d4a56626d77818a94958d867e776f686059514a4e565e666d757d858d94958b82786e63574a3e3125180b00000000000000111e2a37434f5a646f79838d97928a8279716961595048403830271f170f060000000000000000040c13191e222324242424242424242426323f4c5965727f8c9386796c5f5346392c20130013202c3946535f6c7982828282828282786b5f52454c5865727e8282828282827e7165584b3e3225180b000000000000000000000000000000000000000c1825313c48525b616363636363636363625c53483d3125190d01000000000000000000000000000000000000000000000001070e13191d2226292d2f323435373838393939393838363533312e2b2824201b16110b040000000000000000000000000000000000000000000a16222d3944505b66717c86919ba4aaa0978e867e77726e6b69676767696b6e72787f878f98a2aca3998f857a6f64584d42362a1e13070000000000020b13191f23262728292a2c2d2e2f2f2d29241d150d03030b141d26303a444e58636e7984909ba7a79c9085796d6155493d3125180c00000000000000000000000000000000000000000000000000000a16222e3945515d6974808c98a4ada195897d7165594d4747474747474747474a56626e7a86929eaaa69b8f83776b5f54483c3024180d01000000000000000000000000000000000000000000000000000000000000000008131d28333d4955626f7c8996a2afa99c908376695c4f43382e23180e030000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053473a2d201407000000000000000000000000000915222f3b4855626e7b8895a2aeaa9d9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000000a141e272e35393c3c3c3c434f5c69768390908376695c4f433c3c3c3c39352e271e140a000000000000000000000f1c2936424f5c6975828f908376695d5043362a1d100300000000000000000000000000000006101a232c353d454d555c62686d72777a7d80828485858685848382807d7976716c66605a524b433a31281f160c020000000000000000000000000009131c262f38404850575e646a6f74787b7e81828485858685858482817e7b77736f69645e574f483f372e251b12080000000000000013202c3946525f6c777b7b7b7b7b7b7b7b73665a4d4134271a222a333a404344444956636f7a7b7b7b7b7b7b7b7a6f6356493d3023160a0013202c3946535f6c7986938c7f7265594c3f3d3d3d3d3d3d3d3d3d3d3d3d3a362f281f150b00000000000000000915212e3a46515c656f78828c959790898179726a635b54586068707780878f97978d837970665c52463b2e221609000000000000000e1a26323e48535d67717b86909a948b837b736b625a524a4139312921181008000000000000030d161e252a2e3030303030303030303030323f4c5965727f8c9386796c5f5346392c20130013202c3946535f6c79868f8f8f8f8f85786b5f52454c5865727e8c8f8f8f8f8b7e7165584b3e3225180b000000000000000000000000000000000000000f1b2834414d59646d70707070707070706d655a4e4235291c0f0300000000000000000000000000000000000000000000040c12191f24292e3236393c3e40424345454646464645444342403d3b3834302c27221c160f08010000000000000000000000000000000000000005111c28333e4a555f6a747f89929ba4a9a0989089837e7a777574747475777a7e848a9199a1aaa39b91887d73685d52473c3025190e0200000000010b141d242b2f323435363738393b3c3c39352f271f150b00020b141e28323c47515c68737f8b97a3ada1958a7d7165594d4134281b0f030000000000000000000000000000000000000000000000000005111d2935404c5864707b87939faba5998e82766a5e52463a3a3a3a3a3a3a434f5b67737e8a96a2aea2968a7e72665b4f43372b1f14080000000000000000000000000000000000000000000000000000000000000000040f1a242f3a444f5a646f7c8996a2afa99c9083766a5f554a3f352a1f150a0000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000006111c263039404548494949494f5c69768390908376695c4f494949494845403930261c11060000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000000000000000008111a232b343b434a51575d62666a6e717475777878797878777573706d6965605b554f48413931281f160d040000000000000000000000000000010a141d262e363e454c53595e63686b6f727476777878797878777574716e6b67635e58524c453e362d251c13090000000000000000111e2b37434f5b656d6e6e6e6e6e6e6e6e6a61564a3e3225242c343c444b50515151535e686e6e6e6e6e6e6e6e6e685e53473a2e2215080013202c3946535f6c7986938c7f7265594c4a4a4a4a4a4a4a4a4a4a4a4a4a47413a31271d12060000000000000005111d29353f4a535d66707a838d979a938b847c756d665e626a727a82899199998f857b71675e544a40352a1e1206000000000000000a16212c37414b555f69747e88929c958d857c746c645c534b433b332a221a120a01000000000b151f282f363a3d3d3d3d3d3d3d3d3d3d3d3d3f4c5965727f8c9386796c5f5346392c20130013202c3946535f6c7986939c9c9c9285786b5f52454c5865727e8c989c9c988b7e7165584b3e3225180b00000000000000000000000000000000000000101c2936434f5c69757d7d7d7d7d7d7d7d766a5d5043372a1d1004000000000000000000000000000000000000000000070f161d242a30353a3e4245484b4d4f505152525353525251504e4c4a4744403c38332d27211a130b03000000000000000000000000000000000000000b17222d38434e58636d778089929aa2a9a29a948f8a8784828181818284878a8f959ba2a8a19a91897f756b61574c41362b1f1409000000000009131d262f363b3f40414344454647484846403931271d120700020c16202a35404b57626e7a87939faca69a8e8275695c5044372b1e120500000000000000000000000000000000000000000000000000000c1824303c47535f6b77828e9aa6aa9e92867a6e63574b3f332d2d2d303c4854606b77838f9ba7a99d9185796e62564a3e32271b0f0300000000000000000000000000000000000000000000000000000000000000010b16212b36414b56616b76818b97a3b0aa9d91867b71665c51463c31261c110600000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000b17222e38424b515555555555555c69768390908376695c555555555555514b42382e22170b0000000000000000000f1c2936424f5c6975828f908376695d5043362a1d10030000000000000000000000000000000000081119222a31383f464c51565a5e626567696a6b6c6c6b6b6a686664615d59554f4a443d362f271f160d0400000000000000000000000000000000020b141c242c343b41484d53575c5f626567696a6b6c6c6b6b6a696765625f5b57524d47413a332c241c130a0100000000000000000f1b27333e49535b6061616161616161615f584f453a2e252d363e464e565c5e5e5e5e5e5d6161616161616161615d564c42362a1e12060013202c3946535f6c7986938c7f7265595757575757575757575757575756524c43392e23170b00000000000000010d18232e38414b545e68717b858e989d968e877f7770686c747c848c949b9a90877d73695f564c42382e24190d020000000000000005101a252f39434d58626c76808b959f978f867e766e655d554d453c342c241b130a01000006121d27313a41474a4a4a4a4a4a4a4a4a4a4a4a4a4c5965727f8c9386796c5f5346392c20130013202c3946535f6c798693a0a99f9285786b5f52454c5865727e8c98a5a5988b7e7165584b3e3225180b00000000000000000000000000000000000000101c2936434f5c6976838a8a8a8a8a8a84776a5d5044372a1d1104000000000000000000000000000000000000000008101920282f353b41464a4e5255575a5b5d5e5f5f5f5f5f5f5e5d5b595654504c48433e38322c251d150d0500000000000000000000000000000000000005111c27313c47515b656e77808890979ea3a59f9a9693908f8e8e8e8f9193969ba0a6a39d97908880766d645a4f453a2f25190e0300000000030f1a252f3841474b4d4e4f505253545555524b43392e23180c0000040e19242f3a46525e6b7784909da9aa9d9185786c5f5346392d201407000000000000000000000000000000000000000000000000000008131f2b37434e5a66727d8995a1ada3978b7f73675b4f44382c202935404c5864707c8894a0aba4988c8175695d5145392e22160a000000000000000000000000000000000000000000000000000000000000000008121d28323d48525d68727d88929da8b3aea3988d83786d63584d43382d23180d03000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000f1b27333f4a545c616262626262626976839090837669626262626262615c544a3f33271b0f000000000000000109121c2936424f5c6975828f908376695d5043362a1d120a0100000000000000000000000000000000000710181f272e343a40454a4e5255585a5c5e5e5f5f5f646a6b6b6b6b6962584d4139322c241d150d04000000000000000000000000000000000000020a121a222930363c42474b4f5356595b5c5e5e5f5f5f63696b6b6b6b6a63594e423c363029211a120a010000000000000000000b16222d38414a50545454545454545454534e463d33282f373f48505860686b6b6b6b6a665c5454545454545454514c443a30251a0e020013202c3946535f6c7986938c7f72656363636363636363636363636363635d554b3f34281c0f000000000000000007111c262f39424c565f69737c869099a0989189827a73777e868e969e9c92887e756b61574d443a30261c120700000000000000000009131d27313c46505a646e78838d97a198908880776f675f574e463e362d251c130800000b17232e39434c5256575757575757575757575757575965727f8c9386796c5f5346392c20130013202c3946535f6c798693a0ac9f9285786b5f52454c5865727e8c98a5a5988b7e7165584b3e3225180b00000000000000000000000000000000000000101c2936434f5c69768390969696969084776a5d5044372a1d11040000000000000000000000000000000000000008111a222b323940474c52565a5e61646668696b6b6c6c6c6c6b6b69686563605c59544f4a443d362f271f170e050000000000000000000000000000000000000a15202a353f49535c656e767e868c92989ca1a4a29f9d9b9a9a9b9b9d9fa3a3a09c97928c857e766d645b52483e33291e130800000000000814202b37414b52585a5b5c5d5e5f6162625d554b4034281c1004000007121e2a36424f5b6875818e9ba7ada094877a6e6154483b2e2215080000000000000000000000000000000000000000000000000000030e1a26323e4a55616d7985909ca8a79b9084786c6054483c30252d3945515d6975818c98a4ab9f93887c7064584c4135291d110500000000000000000000000000000000000000000000000000000000000000040f19242f39444f59646f79848f99a4afb2b2aa9f948a7f746a5f544a3f342a1f140a000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000121e2b3744505b666e6f6f6f6f6f6f6f7683909083766f6f6f6f6f6f6f6e665b5044372b1e12000000000000010a131b242c36424f5c6975828f908376695d5043362d241c130b020000000000000000000000000000000000060e151c23292f353a3e4246494c4e505152555d656e767777777774695d5044372a211a130b030000000000000000000000000000000000000000000810171e252b31363b3f43474a4c4e505152545c646d7577777777756b5e5245392c251e171008000000000000000000000005111b262f383f4447484848484848484846423c342b31394149515a626a7277777777776e62564948484848484745413a32281e1409000013202c3946535f6c7986938c7f727070707070707070707070707070706f675c5044382b1e120000000000000000000a141d27313a444d57616a747e87919ba39b948c857d81899098a09e948a80766c63594f453b32281e140a00000000000000000000010b15202a343e48525c67717b858f9aa29a928981797168605850483f372e241a0f04000f1c28343f4b555d63636363636363636363636363636365727f8c9386796c5f5346392c20130013202c3946535f6c798693a0a09f9285786b5f52454c5865727e8c98a0a0988b7e7165584b3e3225180b00000000000000000000000000000000000000101c2936434f5c697683909ca3a39d9084776a5d5044372a1d110400000000000000000000000000000000000007101a232c343c444b52585d62666a6e7073757677787979797978777674726f6c6965605b554f484139312920170d030000000000000000000000000000000000040e19232d37414a535c646c747b81878c9194989a9c9e9f9fa09f9e9d9c9a9794908c87817a736c645b524940362c21170c0200000000000c1824303c48535d646667696a6b6c6d6f6e675c5145382c1f13060000020e1a2734404d5a6773808d9aa6afa295897c6f6256493c302316090000000000000000000000000000000000000000000000000000000a16212d3945505c6874808c97a3aca094887c7065594d413529323e4a56626d7985919da9a69b8f83776b5f53483c3024180c01000000000000000000000000000000000000000000000000000000000000000b16202b36404b56606b75808b96a0aba9a5a6aaa69b91867b71665b51463b31261b11060000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c787c7c7c7c7c7c7c7c839090837c7c7c7c7c7c7c7c786c5f5346392c20130000000000020b131c252d363e47505c6975828f908376695d50483f362e251d140b030000000000000000000000000000000000030a11181e24292e3236393d3f41464e575f676f778084848484776b5e5144382b1e1108010000000000000000000000000000000000000000000000060d141a20252a2f33373a3d4042454d555e666e767e84848484796c5f5346392c20130c05000000000000000000000000000a141d262d34383a3b3b3b3b3b3b3b3b3a37312b323a424b535b636c747c848484847d7063574a3d3b3b3b3b3b39352f2820160c02000013202c3946535f6c7986938c7f7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d786c5f5346392c2013000000000000000000020b151e28323b454f58626c757f89929ca59e968f888b939aa29f968c82786e645b51473d332a20160c020000000000000000000000030e18222c36414b555f69737d88929ca49b938b837a726a625a514940362c20150900121e2b3844505c676f707070707070707070707070707070727f8c9386796c5f5346392c20130013202c3946535f6c7986939393939285786b5f52454c5865727e8c939393938b7e7165584b3e3225180b00000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d11040000000000000000000000000000000000040f19222c353e464e565d63696e73777a7d808183848586868686858483817e7c7975716c66605a534b433b32291f150b01000000000000000000000000000000000007111b252f38414a525a626970767b8084888b8e8f919292939292918f8d8b8884807b756f69615a524940372e241a10050000000000000e1a2734404d59646f7374757778797a7b796d6054473a2e2115080000000d192633404c596673808c99a6b0a396897c7063564a3d3023170a00000000000000000000000000000000000000000000000000000005111c2834404c58636f7b87939eaaa5998d8175695d51463a2e37434e5a66727e8a96a2ada2968a7e72665b4f43372b1f14080000000000000000000000000000000000000000000000000000000000000007121d27323d47525d67727d87929da7a69e9899a0a9a2988d82786d62584d42382d23180d0300000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c798689898989898989899292898989898989898986796c5f5346392c201300000000030c141d252e373f485059626a75828f9083766b625a514840372f261d150c03000000000000000000000000000000000000060d13181d22262a2f373f4850586069717981899191897f756a5d5144372b1e11040000000000000000000000000000000000000000000000000002090f141a1f23272b2e363e474f575f677078808991918b81766b5f5246392c1f13060000000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2d2a2b343c444c545d656d757e868e918e84796f63564a3d302e2e2e2e2d29241e160e0400000013202c3946535f6c798693908a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a86796c5f5346392c201300000000000000000000030d162029333d46505a636d76808a949da7a19994969da5a1978d847a70665c52493f352b21180e040000000000000000000000000006101a242f39434d57616c76808a949fa59d958c847c746b635b52483d3125190d0013202c3946535f6c787d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7f8c9386796c5f5346392c20130013202c3946535f6c7986868686868685786b5f52454c5865727e8686868686867e7165584b3e3225180b00000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000000000000000000010c16202b343e47505860676e747a7e8386898c8e9091929293939292918f8d8b8885817c77726b645d554d443b31271d130800000000000000000000000000000000000009131d262f38404950575e656a6f74787c7e81838485868686858483817e7b78746f6a645e57504840372e251c1208000000000000000f1b2835424e5b687580818283858687887b6f6256493d312519100b090a0e1a2734404d5a6673808d9aa6b0a396897c6f6356493c3023160a000000000000000000000000000000000000000000000000000000000c18232f3b47535e6a76828e9aa5a99d92867a6e62564a3e323b47535f6b77838e9aa6a99d9185796d62564a3e32261b0f03000000000000000000000000000000000000000000000000000000000000040e19242e39444e59646e79848e99a4aa9f948c8e97a2a99f94897f74695f54493f34291f140a00000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c798693969494949494949494949494949494949386796c5f5346392c2013000000040c151e262f374049515a626b747c859091867d746c635a524941382f271e150d0400000000000000000000000000000000000001071018202831394149515a626a727a838b93968c82776d63594d4135291c100300000000000000000000000000000000000000000000000000000003090f171f2730384048505961697179828a92978d83796f645a4f43372a1e1105000000000000000000000000000000020a11171c1f212121212121212121252d353d464e565e666f777f87909890867c72685d52473a2e22212121201d19130c040000000013202c3946535f6c798693939393939393939393939393939393939386796c5f5346392c20130000000000000000000000040e17212b343e48515b646e78818b959ea0a0a0a0a0a0998f857b72685e544a40372d23190f0600000000000000000000000000000008131d27313b45505a646e78838d97a0a09e968e867e756d64594d4135281c0f0013202c3946535f6c79868a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a909386796c5f5346392c201300131f2c3946525f6b7679797979797979766a5e51454b58647079797979797979797064574b3e3125180b00000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d11040000000000000000000000000000000008131d28323d465059626a727980858a8f9396989b9c9e9e9fa0a09f9e9d9c9a9895918d88837d766f675f564d43392f241a0f040000000000000000000000000000000000010b141d262e373e464d53595f64686c6f727476777879797978777674726f6c68635e59534c453e362e251c130a00000000000000000e1b2734414d5a6673808c8f909192948a7e7265594d41362b211b171616191f2a36424f5b6874818e9aa7afa295887c6f6255493c2f2316090000000000000000000000000000000000000000000000000000000007131f2a36424e5a65717d8995a1aca2968a7e72675b4f4337404c58646f7b87939faba4988c8175695d5145392e22160a000000000000000000000000000000000000000000000000000000000000000b15202b35404b55606b75808b95a0aba3988d8386919ba6a69b90867b70665b50463b31261b1106000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938d8787878787878787878787878787878786796c5f5346392c20130000030d161e272f384149525b636c757d868e94948f877e756c645b534a413930271f160d040000000000000000000000000000000001091119222a323a424b535b636c747c848c95998e847a70665b51473c3125190d0000000000000000000000000000000000000000000000000000000008101821293139414a525a626b737b838b949a90867b71675d53483e32261a0e020000000000000000000000000000000000060c1013141515151515161e262e373f474f58606870788189919993897e746a60564c41362a1e15151413110d0801000000000013202c3946535f6c798686868686868686868686868686868686868686796c5f5346392c2013000000000000000000000000050f19222c363f49535c666f79838c9393939393939391877d736960564c42382f251b110700000000000000000000000000000000010b151f29343e48525c66717b858f939393939390877f76695d5043372a1d100013202c3946535f6c798693939393939393939393939393939393939386796c5f5346392c201300111e2a37434f5a646b6c6c6c6c6c6c6c6b64594e4248545f686c6c6c6c6c6c6c6c685e53483c2f23160a00000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000000000000000000000000000000020e19242f3a444e58626b747c848b91969b9fa2a5a3a19f9e9d9c9c9d9d9fa0a2a4a19d99948e88817971685f554b41362b20150a000000000000000000000000000000000000020b141c252d343b42484e53585c60636568696b6c6c6c6c6b6b696765625f5c57534d48413b342c241c130a0100000000000000000c1925323f4b5864717d8a969d9e9f9a8e8275695e52473d332c272423232529313b46525e6b7783909ca9ada094877a6e6154483b2e22150800000000000000000000000000000000000000000000000000000000020e1a26313d4955616c7884909ca8a79b8f83776b5f53483c44505c6874808c98a4ab9f93887c7064584c4035291d110500000000000000000000000000000000000000000000000000000000000007121c27323c47525c67727c87929ca7a79c91867c7f8a959faaa2978d82776d62574d42382d22180d020000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938b7e7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a776b5f5246392c201300000b151f283039424a535b646d757e878f9289899190877e766d655c534b423931281f160c010000000000000000000000000000020b131b232b343c444c545d656d757e868e969b91877c72685e544a3f352b2014090000000000000000000000000000000000000000000000000000010a121a222a333b434b535c646c747c858d959c92887e74695f554b41372c21160a00000000000000000000000000000000000000000406080808080f172028303840495159616a727a828a939b958b81776d62584e443a2f25190e080807040100000000000000131f2c3946525f6b767979797979797979797979797979797979797979766b5f5246392c1f130000000000000000000000000007101a242d37414a545d67717a8486868686868686867f756b61574e443a30261d1309000000000000000000000000000000000000030d18222c36404a555f69737d868686868686868684776a5d5044372a1d110013202c3946535f6c798686868686868686868686868686868686868686796c5f5346392c2013000e1a26323e48525a5f5f5f5f5f5f5f5f5f5a52483d424d565d5f5f5f5f5f5f5f5f5c564d42372b1f130700000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000000000000000008131f2a35404b56606a747d868e969ca2a7a29e9a979492919090909091929496999da2a59f99928b837a71675d52483d32261b0f03000000000000000000000000000000000000020a131b222930373d42474c505356595b5d5e5f5f5f5f5f5e5d5b5956534f4b47423c363029221a120a010000000000000000000a1723303c4955616e7a87939fabaa9e92867a6f63594f453d373330303031353b434d57636f7a87939facab9e9285796c5f53463a2d20140700000000000000000000000000000000000000000000000000000000000915212d3844505c6873808b97a3ab9f94887c7064584c404955616d7985919ca8a69a8f83776b5f53483c3024180c010000000000000000000000000000000000000000000000000000000000030e19232e39434e59636e79838e99a3aba0958a807578838e98a3a99e94897e74695f54493f34291f14090000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986938b7e716d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c655a4f43372a1e110006121d27313a424b545c656d767f87909088807f8790918880766e655d544b433a31281d120700000000000000000000000000020b141d252d353d464e565e666f777f8790989e93897f756b60564c42382e23190e0300000000000000000000000000000000000000000000000000010a131b242c343c454d555d656e767e868f979f958b80766c62584d43392f251a10050000000000000000000000000000000000000000000000000710192129323a424a525b636b737b848c949c988e83796f655b51463c32281e1308000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b645a4f43372a1e11000000000000000000000000000008121b252f38424b555f6872797979797979797979766d63594f453c32281e140b010000000000000000000000000000000000000006101a242e39434d57616b7579797979797979797974695c5043362a1d1000131f2c3946525f6b767979797979797979797979797979797979797979766b5f5246392c1f13000a16212c3740484f5253535353535353524e4840363b444b515353535353535353504b443b30261a0f0300000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d11040000000000000000000000000000010d1924303b47525d68727c868f98a0a7a39c97928d8a878684838383838485878a8d91969ca4a49d958c83796f64594e43372c20140800000000000000000000000000000000000000010910181f252b31373b4044474a4c4f5051525353525251504e4c4a47433f3b36312b251e17100800000000000000000000000814202d3946525e6a76838f9aa6aea2978b80756a61574f48433f3d3c3d3e41464c555e6974808b97a3afa89b8f83766a5d5144382b1f1205000000000000000000000000000000000000000000000000000000000004101c28343f4b57636f7a86929eaaa4988c8174695d51454e5a65717d8995a1ada2968a7e72665a4f43372b1f13080000000000000000000000000000000000000000000000000000000000000a15202a35404a55606a75808a95a0aaa4998e83796e717c87929ca7a59b90867b70655b50463b30261b100600000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000000000010507101c2936434f5c69768390908376695c4f4336291c1007050100000000000013202c3946535f6c7986938b7e71656060606060606060606060606060605b53493e33271b0f000b17232e39434c545d666e778088918f877e76757e868f918980776f665d554c433a2f24180c000000000000000000000000000a141d262e373f474f586068707881899199a0968c81776d63594f443a30261c1207000000000000000000000000000000000000000000000000000008131c252d363e464e575f676f7780889098a1978d83786e645a50463b31271d1309000000000000000000000000000000000000000000000000050f19222b333b444c545c646d757d858e969e9a90867c72675d53493f342a20160c010000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a52483e32261a0e00000000000000000000000000000009131d26303a434d5660696c6c6c6c6c6c6c6c6c6b645b51473d342a20160c0200000000000000000000000000000000000000000008121c27313b454f5a636b6c6c6c6c6c6c6c6c6c6a62584c4034281b0f00111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b645a4f43372a1e110005101a252e373e43464646464646464645433d362e323a4044464646464646464644403a32291f14090000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000000000000000000000000000006121d2935414c58636e79848e98a1aaa199928b86817e7b79777676767677787a7d81858b929aa2a79e958b81756a5f54483c3024180c000000000000000000000000000000000000000000060d141a20262b2f34373b3d404243454546464645444342403d3a37332f2a25201a140d0600000000000000000000000005111d2a36424e5a66727e8a95a1aca89c91877c7369615a544f4c4a49494b4d51575e67707b85919ca8afa3978b7f73675a4e4235291c10030000000000000000000000000000000000000000000000000000000000000b17232f3b46525e6a76828d99a5a99d9185796d615549525e6a76828e9aa6a99d9185796d61564a3e32261b0f03000000000000000000000000000000000000000000000000000000000007111c27313c47515c67717c87919ca7a89d92877c72676a75808b96a0aba2978d82776d62574d42372d22170d02000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e221508000000000000000000000000070d1114161c2936434f5c69768390908376695c4f4336291c1614110d07000000000013202c3946535f6c7986938b7e71655853535353535353535353535353534f4941372d21160a000f1c28343f4b555e666f788089928e867d756c6c747d858e928a81786f675e554b4035291c1004000000000000000000000005101b262f3840495159616a727a828a939ba2988e847a70655b51473d33281e140a0000000000000000000000000000000000000000000000000000040f1a242e373f485058606871798189929aa29a8f857b71675c52483e342a1f150b010000000000000000000000000000000000000000000000000c17212b353d454d555e666e767e878f979f9d93887e746a60554b41372d23190e04000000000000000000000000000a16212c3740484f525353535353535353535353535353535353535353524f4840372c21160a000000000000000000000000000000010b141e27313b444e575d5f5f5f5f5f5f5f5f5f5f5a52493f352b22180e0400000000000000000000000000000000000000000000010b151f29333d4851595e5f5f5f5f5f5f5f5f5f5e5950463b3024180c000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a52483e32261a0e000009131c252c323739393939393939393936322c24282f3438393939393939393938342f2820170d020000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000000000000000a16222e3a46525d6974808b96a0aaa1988f87807a75716e6c6b6a69696a6a6c6e71757a8088909aa4a79d92877c7064594d4135281c100300000000000000000000000000000000000000000002090f151a1f23272b2e3133353738393939393938373533312e2b27231f1a140f090200000000000000000000000000010e1a26323e4a56616d79848f9ba5aea3988e857b736b655f5b5856565657595d62697079828c97a2adaa9e93877b6f63574b3e3226190d0100000000000000000000000000000000000000000000000000000000000007121e2a36424d5965717d8994a0aca1958a7e72665a4e57636f7b87929eaaa4988c8174695d5145392d22160a0000000000000000000000000000000000000000000000000000000000030e18232e38434e58636e78838e98a3aba1968b81766b60646e79848f99a4a99e94897e74695e54493e34291e1409000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000000030b12181d2022222936434f5c69768390908376695c4f4336292222201d18120b0300000013202c3946535f6c7986938b7e7165584b47474747474747474747474746443e372f251b100500121e2b3844505c677078818a928d857c746b63626b737c848d938a827970675d5145382c1f130600000000000000000000000a16222d38414a525b636b737b848c949ca59b91877c72685e54493f352b21170c0200000000000000000000000000000000000000000000000000000915202c364049515a626a727a838b939ba49c92887d73695f554b40362c22180e0300000000000000000000000000000000000000000000000005111d28333d474f575f67707880889199a19f958b81766c62584e44392f251b1107000000000000000000000000000005101a252e373e4346464646464646464646464646464646464646464646433e372e251a100500000000000000000000000000000000020c161f29323c454c51535353535353535353524f4940372d23191006000000000000000000000000000000000000000000000000030d17222c363f484e52535353535353535353524e473e352a1f1408000a16212c3740484f525353535353535353535353535353535353535353524f4840372c21160a0000010a131a21262a2c2c2c2c2c2c2c2c2c2a26211a1d24282b2c2c2c2c2c2c2c2c2b28231d160e05000000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000000000000000d1926323e4a56626e7a86919ca7a4998f867d756f696562605e5d5d5c5d5e5f6164696e767e88939ea9a4988d8175695d5144382c1f1306000000000000000000000000000000000000000000000004090e13171b1f222427292a2b2c2c2c2c2c2b2a282624221e1b17130e0903000000000000000000000000000000000a16222d3945515c68737e89949ea8aaa0978e857d76706b67656363636466696e737a828b949ea9aea3988d82766a5f53473b2e22160a00000000000000000000000000000000000000000000000000000000000000020e1925313d4954606c78848f9ba7a69a8e82766a5f535c6773808b97a3ab9f93877b7064584c4035291d110500000000000000000000000000000000000000000000000000000000000a151f2a353f4a555f6a75808a959faaa59a8f84796f64595d67727d88939da8a59b90857b70655b50453b30251b10050000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e221508000000000000000000020c151d24292d2f2f2f36434f5c69768390908376695c4f43362f2f2f2d29241d150c02000013202c3946535f6c7986938b7e7165584b3e3a3a3a3a3a3a3a3a3a3a3a3a37332d251d1309000013202c3946535f6c78828a9390847b736a625959616a727a838f948b82796d6053473a2d20140700000000000000000000000e1b27333e49535c646d757d858e969ea69d93897f746a60564c42382d23190f050000000000000000000000000000000000000000000000000000000d1925313d48525b636c747c848c959da59f948a80766c61574d43392f241a1006000000000000000000000000000000000000000000000000000915212d39454f5961697179828a929aa3a2988d83796f655a50463c32281d13090000000000000000000000000000000009131c252c32373939393939393939393939393939393939393939393937322c251c1309000000000000000000000000000000000000040d17202a333b414546464646464646464646433e372e251b1107000000000000000000000000000000000000000000000000000005101a242d363d424546464646464646464645423c352c23180e020005101a252e373e4346464646464646464646464646464646464646464646433e372e251a1005000000010910161a1e1f202020202020201f1e1a150f12181c1f20202020202020201f1c18120c0400000000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d11040000000000000000000000000000101d2935424e5a66727e8a96a1a49d92877d736b635e5956535150505050515355585d646c76818d98a4a99d9185796d6054473b2e2215090000000000000000000000000000000000000000000000000003070b0f1215181a1c1d1e1f2020201f1e1d1c1a1815120f0b070200000000000000000000000000000000000005111d2934404b56626c77828c969fa9a9a0978f88817c777471706f6f717275797e858c949da6afa69c91877c70655a4e42362a1e120600000000000000000000000000000000000000000000000000000000000000000915202c3844505b67737f8b96a2ab9f93877b6f6357606c7884909ca8a69a8e83776b5f53473c3024180c000000000000000000000000000000000000000000000000000000000006111c26313c46515c66717c86919ca6a89e93887d73685d5256616b76818c96a1aca2978c82776c62574c42372c22170d0200000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e2215080000000000000000000a141e272e35393c3c3c3c434f5c69768390908376695c4f433c3c3c3c39352e271e140a000013202c3946535f6c7986938b7e7165584b3e3d3d3d3d3d3d3d3d3d3d3d3d3a362f281f150b0000121f2c3945525e6a747c858e928981786f675e5e666f778089928e867d746b5f5246392d2013070000000000000000000000111d2a36434f5b656e767e878f979fa0a0968b81776d63584e443a30261b1107000000000000000000000000000000000000000000000000000000000f1c2835414d59646d757e868e969ea0a0978d83786e645a50453b31271d130800000000000000000000000000000000000000000000000000000b1825313d4a56616a737b838b949ca0a09a90867b71675d53493e342a20160c0100000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a26211a130a0100000000000000000000000000000000000000050e1821293035383939393939393939393937322c251c13090000000000000000000000000000000000000000000000000000000008121b242b3236393939393939393939393936312b231a110700000009131c252c32373939393939393939393939393939393939393939393937322c251c1309000000000000050a0e11131313131313131313110e0a04070c1012131313131313131312100c07010000000000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d11040000000000000000000000000000121f2c3845515e6a76838f929597978c81756b6159524d494645444343434446484c525a65707c8895a1ada195887c6f63564a3d3024170a000000000000000000000000000000000000000000000000000000000306090b0e0f1112121313131212100f0d0b090602000000000000000000000000000000000000000000000c18232f3a45505b66707a848d979fa7a9a199938d8884817e7d7c7c7d7f82868a90979ea6aea69d948a80756a5f54493d32261a0e02000000000000000000000000000000000000000000000000000000000000000004101c27333f4b57626e7a86929da9a3978b8073685c65717d8995a0aca1968a7e72665a4e43372b1f130800000000000000000000000000000000000000000000000000000000030d18232d38434d58636d78838d98a3aca2978c81766c61564c4f5a646f7a85909aa5a99e93897e73695e53493e33291e140900000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e221508000000000000000006111c263039404548494949494f5c69768390908376695c4f494949494845403930261c11060013202c3946535f6c7986938b7e7165584b4a4a4a4a4a4a4a4a4a4a4a4a4a47413a31271d120600111d2936424d58626a737c858d928a817970686770788189928e857c746b62594e42362a1e11050000000000000000000000121f2c3845525e6b7780889193939393938e84796f655b51473c32281e140a0000000000000000000000000000000000000000000000000000000000101d2a3743505d69767f879093939393938f857b71665c52483e34291f150b0100000000000000000000000000000000000000000000000000000c1926333f4c5966727c858d939393939392887e746a5f554b41372d22180e04000000000000000000000000000000000000010910161a1e1f20202020202020202020202020202020202020201f1e1a16100901000000000000000000000000000000000000000000060f171e24292c2c2c2c2c2c2c2c2c2c2c2a27211b130a01000000000000000000000000000000000000000000000000000000000009121a21262a2c2c2c2c2c2c2c2c2c2c2c2a262019110800000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a26211a130a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000000000000000000000000000013202c3946535f6c79818386888b8d877b6f64594f47413d3a383736363738393c414854606c7985929faba4978b7e7165584b3e3225180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d29343f49545e68727b858d959da4aba49e9894908d8b8989898a8c8e92969ba1a8aaa39c948b82786e63594e43382c211509000000000000000000000000000000000000000000000000000000000000000000000b17232e3a46525d6975818d99a4a89c9084786c606975818d99a5a89d9185796d61564a3e32261a0f03000000000000000000000000000000000000000000000000000000000a141f2a343f4a545f6a747f8a949faaa59b90857a70655a4f4548535e68737e89949ea9a59a90857a70655a50453a30251b1005000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000b17222e38424b515555555555555c69768390908376695c555555555555514b42382e22170b0013202c3946535f6c7986938b7e7165585757575757575757575757575756524c43392e23170b000d1925313c465059616a737b848d948b837a717179828a938d857c736a625950473d32261a0e020000000000000000000000121f2c3845525f6b788586868686868686867c72685d53493f352b20160c020000000000000000000000000000000000000000000000000000000000111d2a3744505d6a778486868686868686867d73695f554a40362c22180d030000000000000000000000000000000000000000000000000000000d192633404c59667380868686868686868681766c62584e43392f251b1106000000000000000000000000000000000000000000050a0e1113131313131313131313131313131313131313131313110e0a05000000000000000000000000000000000000000000000000050d13191c1f2020202020202020201f1e1b1610090100000000000000000000000000000000000000000000000000000000000000080f151a1e1f2020202020202020201f1d1a150e07000000000000010910161a1e1f20202020202020202020202020202020202020201f1e1a1610090100000000000000000000000000000000000000000000000407080808080808080808080704010000000003060808080808080808080807050100000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d11040000000000000000000000000000121f2b3844515d68717477797c7e8183766a5e53483d36312d2b2a2a2a2a2b2d303845515e6b7784919eaba5988c7f7265594c3f3226190c000000000004090e10121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212100d090400000000000000010c17222d38424c566069727b838b93999fa5a9a4a09c999796969697989b9ea2a7a9a59f99928a82796f665c52473c31261b10040000000000000000000000000000000000000000000000000000000000000000000006121e2935414d5965707c8894a0aba094887c70646e7a86929eaaa4988c8074695d5145392d21160a0000000000000000000000000000000000000000000000000000000006111b26313b46515b66717b86919ba6a99f94897e74695e53493e414c57626c77828d97a2aca1978c81776c61574c41372c22170c020000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e22150800000000000000000f1b27333f4a545c616262626262626976839090837669626262626262615c544a3f33271b0f0013202c3946535f6c7986938b7e71656363636363636363636363636363635d554b3f34281c0f000914202a353e474f586069727a838c948c837b7a838b948c847b726a615850473e352b20150a000000000000000000000000121f2b3845515e6a76797979797979797979746a60564c41372d23190f04000000000000000000000000000000000000000000000000000000000000101d2a3643505c6974797979797979797979756b61574d43392e241a1006000000000000000000000000000000000000000000000000000000000c1926333f4c586571797979797979797979786f645a50463c32271d1309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d101213131313131313131313110e0a0500000000000000000000000000000000000000000000000000000000000000000000040a0e111313131313131313131313110e0903000000000000000000050a0e1113131313131313131313131313131313131313131313110e0a050000000000000000000000000000000000000000000000060c10131515151515151515151513110c0701050b10131515151515151515151514110d08020000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d11040000000000000000000000000000101c2935404c565f65686a6d6f72747671665a4e42362b25211f2024272a2d32363d46525f6b7885919eaba6998c807366594c403326190d00000000080f151a1d1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1d19150f080000000000000006111b26303a444e576069717981888e94999ea2a5a8a6a4a3a2a3a3a5a7a7a4a19d99948e87807870675e544a40352b20150a0000000000000000000000000000000000000000000000000000000000000000000000010d1925313c4854606b77838f9ba7a5998d817568727e8a96a2ab9f93877b7064584c4034291d1105000000000000000000000000000000000000000000000000000000020d18222d38424d58626d78828d98a2ada2988d82776d62574c42373a45505b65707b86919ba6a89e93897e73685e53493e33291e13090000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e2215080000000000000000121e2b3744505b666e6f6f6f6f6f6f6f7683909083766f6f6f6f6f6f6f6e665b5044372b1e120013202c3946535f6c7986938b7e717070707070707070707070707070706f675c5044382b1e1200030e19232c353d464e576068717a838b948d84848c948c837a726960584f463e352c23190f04000000000000000000000000101d2936424e59646b6c6c6c6c6c6c6c6c6c6a62584e443a30251b1107000000000000000000000000000000000000000000000000000000000000000f1b2834404c58626a6c6c6c6c6c6c6c6c6c6b635a4f453b31271c120800000000000000000000000000000000000000000000000000000000000b1724303d49545f686c6c6c6c6c6c6c6c6c6c665d53483e342a20150b010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11181c2021222222222222222222201d18120b10171c1f21222222222222222222201d19130c0500000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000000000000000c18242f3a444d55595b5e606365676a675f554a3e32262326292d3033363a3e42484e57626e7a8793a0aca5988c7e7265594c3f3226190c00000009121a2026292b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b292520191209000000000000000a141e28323c454e575f676f767d83898d9295989b9d9e9f9f9f9f9e9c9a9895918d88837c756e665e554c42382e24190e040000000000000000000000000000000000000000000000000000000000000000000000000814202c37434f5b67737e8a96a2a99d9185796d76828e9aa6a69a8e83776b5f53473b3024180c0000000000000000000000000000000000000000000000000000000009141f29343f49545f69747f89949fa9a69c91867b71665b50463b30343e49545f69747f8a959faaa59a8f857a6f655a50453a30251a100500000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e221508000000000000000013202c3946535f6c787c7c7c7c7c7c7c7c839090837c7c7c7c7c7c7c7c786c5f5346392c20130013202c3946535f6c7986938b7e7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d786c5f5346392c2013000007111a222b343c454e565f687079828a938f8e948b827a716860574e463d342c231a1107000000000000000000000000000e1a26313d48525a5f5f5f5f5f5f5f5f5f5f5e5950463c32281e140900000000000000000000000000000000000000000000000000000000000000000c1824303b4650595e5f5f5f5f5f5f5f5f5f5e5951483d33291f150b0000000000000000000000000000000000000000000000000000000000000814202c38434d565d5f5f5f5f5f5f5f5f5f5f5b544b41362c22180e0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030507090a0b0c0c0c0c0b0b090806030100000000000000000000000000000000000000000000000000000000000000000000000307090a0a0a0a0a0a0a0a0a090703000000000000000000000000000000000000000000000000000306080a0b0c0c0c0c0b0a090705020000000000000101010101010101010100000000000000000000000000000206090a0a0a0a0a0a0a0a0a0a08040000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2d29241d151b22282c2e2e2e2e2e2e2e2e2e2e2d2a251e160e05000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000000000000000000000000000007131e29323b43494c4f515456585b5d5b564d44392d2c2f3236393c3f43464a4e53596069747f8a96a3afa3978a7d7164574b3e3125180b000008121b242b313638383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383836312b231b1208000000000000020c16202a333c454d565d646b72777d8286898c8e90919292929291908e8c8985817c77716b645c544c433a30261c120700000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333e4a56626e7985919da9a195897d717a86929eaaa1958a7e72665a4e43372b1f130700000000000000000000000000000000000000000000000000000006101b26303b46505b66707b86909ba6aa9f958a7f746a5f54493f34292d38424d58636d78838e98a3aca1978c81766c61574c41372c21170c01000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000000000000b1724313e4a5764717d8a95887b6e6155483b2e221508000000000000000013202c3946535f6c798689898989898989899292898989898989898986796c5f5346392c20130013202c3946535f6c7986938f8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a86796c5f5346392c2013000000081019222a333c444d565e677078818a92938a827970685f564e453c342b221a110800000000000000000000000000000915202b3640484e52535353535353535353524e473e352a20160c02000000000000000000000000000000000000000000000000000000000000000008141f2a353e474e52535353535353535353524e483f362c21170d0300000000000000000000000000000000000000000000000000000000000004101b27313b444c5153535353535353535353504a42392f251a1006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105090c0f1214151718191919191817161412100d0a0602000000000000000000000000000000000000000000000000000000000000030a0f131617171717171717171716130f0a04000000000000000000000000000000000000000105090d10121516181819191918171614110e0b070304080c0e0e0e0e0e0e0e0e0e0d0b080300000000000000000001080e12151717171717171717171614100b050000000000000a141d262e34383b3b3b3b3b3b3b3b3b3b39352f271f252d33383b3b3b3b3b3b3b3b3b3b3935302820170d020000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d11040000000000000000000000000000010c17202932383d404245474a4c4e504f4b443b3235383c3f4245484c4f52565a5f646b727b85909ba7aca094877b6f6256493c3023170a00040f1a242e363d42454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545423d352d23190f04000000000000050e18212a333b444b535a60666c7175797d80828485868686858483817f7c7975716c666059524a423a31281e140a0000000000000000000000000000000000000000000000000000000000000000000000000000000a16222e3a45515d6975818c98a4a5998d81757e8a96a2a89d9185796d61564a3e32261a0e030000000000000000000000000000000000000000000000000000020d17222d37424d57626d77828d97a2ada3998e83786e63584d43382d2226313b46515c66717c87929ca7a89e93887d73685e53483e33281e1308000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000000000040b111724313e4a5764717d8a95887b6e6155483b2e2215100a0200000000000013202c3946535f6c798693969696969696969b9b969696969696969386796c5f5346392c20130013202c3946535f6c798693939393939393939393939393939393939386796c5f5346392c201300000000071018212a323b444c555e666f7880898a81786f675e564d443c332a22191008000000000000000000000000000000040f1a242e363d434546464646464646464645423c352c23190e04000000000000000000000000000000000000000000000000000000000000000000020e18232c353c424546464646464646464645423d362d241a100500000000000000000000000000000000000000000000000000000000000000000a152029323a404446464646464646464646443f3830271d130900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003080d1115181b1e2022242525262625252423211f1c1a16130e0a05000000000000000000000000000000000000000000000000000000060e151b1f22242424242424242424221f1b150e060000000000000000000000000000000001070c1115191c1f21232425262626252422201e1b17140f0f14181a1b1b1b1b1b1b1b1b1a18140f0901000000000000040c13191e2223242424242424242423201c1710080000000006111c262f383f454848484848484848484845403931272e373e444748484848484848484846413a32291f14090000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000000000000000000000000000000050e1720272d313336383b3d404244433f39393d4144484b4e5255585b5f62666a6f757c858d97a2ada79b9084786b5f53463a2e211508000a15212c3640484e5152525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252514e473f352b20150900000000000000060f182129323a41484f555b6065696d70737577787979797877767572706d6965605b554e47403830281f160c0200000000000000000000000000000000000000000000000000000000000000000000000000000006111d2935414c5864707c88939fa99d918579828e9aa6a4988c8074685d5145392d21160a00000000000000000000000000000000000000000000000000000009141e29343e49545e69747e89949ea9a79c92877c71675c51463c31261b1f2a353f4a55606a75808b96a0aba59a8f857a6f655a4f453a2f251a0f050000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110000000000050e151c2226313e4a5764717d8a95887b6e6155483b2e25211b140c03000000000013202c3946535f6c798693a0a2a2a2a2a2a3a6a6a3a2a2a2a2a2a09386796c5f5346392c20130013202c3946535f6c798686868686868686868686868686868686868686796c5f5346392c20130000000000060f182029323a434c545d666e778080776f665d554c433b322a21181007000000000000000000000000000000000008121b242c3236393939393939393939393936312b231a1107000000000000000000000000000000000000000000000000000000000000000000000007111a232b3136393939393939393939393936322b241b1208000000000000000000000000000000000000000000000000000000000000000000030e1720292f35383939393939393939393937332e261e150b010000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090e14181d2125282b2d2f30313232323232312f2e2b2926221f1a16110b05000000000000000000000000000000000000000000000000060f1820262b2f3030303030303030302f2c26201810060000000000000000000000000000060d13181d2125292b2e30313232323232312f2d2a27241f1b1b20242728282828282828282724201a130b0200000000030d161e252a2e3030303030303030302f2d28221a12090000000b17222d38424a5154555555555555555554514b43392f3640495054555555555555555555524c443b30251a0e0200101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000000000000000000050e151c212427292c2e31333537383d4145494d5154575b5e6164686b6e72767b81878e969fa9aba0968a7f73675b4f43372b1e1205000e1a26323d4852595e5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5e5951473d3125190d0000000000000000060f1720282f373d444a4f55595d616466686a6b6c6c6c6b6b6a686663605d59544f49433d362e261e160d0300000000000000000000000000000000000000000000000000000000000000000000000000000000010d1824303c48535f6b77838e9aa6a195897c86929eaa9f93877b6f64584c4034281d1105000000000000000000000000000000000000000000000000000005101b25303b45505b65707b85909ba5aba0968b80756b60554a40352a1f1518232e39434e59646e79848f99a4aca1968c81766c61564c41362c21160c0100000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100000000050e1720272d32353e4a5764717d8a95887b6e6155483b35312c261e150c030000000013202c3946535f6c798693a0acafafafafafb2b2afafafafafaca09386796c5f5346392c201300131f2c3946525f6b767979797979797979797979797979797979797979766b5f5246392c1f13000000000000060e172028313a424b545c656d76776e655d544b433a312920180f060000000000000000000000000000000000000009121a21262a2c2c2c2c2c2c2c2c2c2c2c2a25201911080000000000000000000000000000000000000000000000000000000000000000000000000008111920262a2c2c2c2c2c2c2c2c2c2c2c2a26211a12090000000000000000000000000000000000000000000000000000000000000000000000050e171e24292b2c2c2c2c2c2c2c2c2c2c2b27221c140c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d141a1f24292d313437393b3d3e3f3f3f3f3e3d3c3a3835322f2b26221c17110a03000000000000000000000000000000000000000000030e18212a31373b3d3d3d3d3d3d3d3d3d3b37322a22180e040000000000000000000000020a11181e24292d3235383a3c3e3f3f3f3f3e3d3c393733302b27252c3134343434343434343433302b251d140b010000000b151f282f363a3d3d3d3d3d3d3d3d3d3c39332c241b110600000f1b27333f4a545c616161616161616161615d554b40343d48525b606161616161616161615e564c42362b1e120600101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d11040000000000000000000000000000000000040a1015181a1d1f242c32383e44484d5155595d6064676a6d7174777a7e82878c9299a0a8aca3998f84796e62574b3f33271b0f0200111e2a36434e5a646a6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6a63594e4236291d10000000000000000000060e161d252c32393e44494d5154575a5c5d5e5f5f5f5f5e5d5b595754514d48433e38322b241c140c0400000000000000000000000000000000000000000000000000000000000000000000000000000000000008141f2b37434f5a66727e8a96a1a5998d818a96a2a69a8e82776b5f53473b3024180c0000000000000000000000000000000000000000000000000000020d17222c37424c57626c77828c97a2aca4998f84796e64594e43392e23180e111c27323c47525d67727d88939da8a89d93887d73685d53483d33281d130800000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000000050e17202931393e42424a5764717d8a95887b6e61554842413d3730271e150c0300000013202c3946535f6c798693a0acb9bcbcbcbcbebebcbcbcbcb9aca09386796c5f5346392c201300111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b645a4f43372a1e1100000000000000050e161f283039424a535b646b6b655c534b423931281f170e05000000000000000000000000000000000000000000080f151a1e1f2020202020202020201f1d1a140e07000000000000000000000000000000000000000000000000000000000000000000000000000000070e151a1d1f2020202020202020201f1e1a150f0800000000000000000000000000000000000000000000000000000000000000000000000000050c13181c1f202020202020202020201e1b17110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11181f252b3035393d414446484a4b4c4c4c4c4b4a494744423f3b37322d28221c150e07000000000000000000000000000000000000000009141f2a333c43484a4a4a4a4a4a4a4a4a48433c342a20150a00000000000000000000040c141c23292f35393e414447494a4b4c4c4c4b4a484643403c373230373d404141414141414141403c362f261d1308000006121d27313a41474a4a4a4a4a4a4a4a4a49443e362d23180d0100121e2b37434f5b666d6e6e6e6e6e6e6e6e6d675c514539414e59646c6e6e6e6e6e6e6e6e6e685e53473b2e22150800101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d11040000000000000000000000000000000000000004080d161f272f363d444a4f54595d6265696d7073777a7d8184878a8e93989da3aaa9a29a91877d72685c51463a2f23170b0000131f2c3945525f6b7678787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878756a5e5145382b1f1200000000000000000000040c131a21272d33383d4145484b4d4f51525253525251504f4d4a4844413c38332d272019120a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26323e4a56616d7985919ca89d928b909aa6a1958a7e72665a4e42372b1f1307000000000000000000000000000000000000000000000000000009131e29333e49535e69737e89939ea9a89d93887d72685d52473d32271c12070b15202b36404b56616b76818c96a1aca49a8f847a6f645a4f443a2f241a0f05000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110000040e172029323b434a4e4f4d5764717d8a95887b6e61554d4f4d49423930271e150c02000013202c3946535f6c798693a0acb9c6c9c9c9cacac9c9c9c6b9aca09386796c5f5346392c2013000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a52483e32261a0e0000000000000000040d161e272f384149525a5f5f5a534a413930271f160d050000000000000000000000000000000000000000000000040a0e111313131313131313131313110d0903000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e111313131313131313131313110e0a0400000000000000000000000000000000000000000000000000000000000000000000000000000001070c101213131313131313131313120f0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c141c232a30363c4145494d50535556575859595858575553514e4b47433e39332d2720181109010000000000000000000000000000000000030e1a26313b454d54575757575757575757544e463c32261b0f030000000000000000040d161e262d343a40454a4e5153565758595958585755524f4c48433e3942484d4e4e4e4e4e4e4e4e4c4841382f241a0e03000b17232e39434c525657575757575757575550483f34291e12060013202c3946525f6c777b7b7b7b7b7b7b7b796d6154473b44505d6a767b7b7b7b7b7b7b7b7a6f6356493d3023160a00101c2936434f5c697683909ca9aa9d9084776a5d5044372a1e110400000000000000000000000000000000000000030d161f28313941484f555b6065696e7275797c8083868a8d9093979a9fa3a9aaa59e9790887e756b61564b4035291e1206000013202c3946535f6c7985858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585858585786b5f5245382c1f12000000000000000000000001090f161c22272c3135393c3e4143444546464645454442403e3b3835302c27221c150f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003060a16222d3945515d6874808c98a3a49b989aa2a89c9185796d61554a3e32261a0e030000000000000000000000000000000000000000000000000005101a25303a45505a65707a85909aa5aca1968c81766b61564b40362b20150b00040e19242f39444f5a646f7a85909aa5aba1968b81766b61564b41362c21160c010000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100010c162029323b444d555a5c595764717d8a95887b6e61555a5c5a544b423930271e140a000013202c3946535f6c798693a0acb9c6d3d5d5d7d7d5d5d3c6b9aca09386796c5f5346392c2013000a16212c3740484f525353535353535353535353535353535353535353524f4840372c21160a000000000000000000040c151e262f3740484f52524f4941382f271e150d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e161e262e353b42474d5155595c5f61636465656565646362605d5a57534f4a443e38312a231b130a010000000000000000000000000000000006121f2b37424d575f6363636363636363635f584e43372c1f130700000000000000030d161f2830383f464c51565a5d606264656565656463615f5c58544f49434b53595b5b5b5b5b5b5b5b59534b41362b1f1307000f1c28343f4b555d636363636363636363615a51463a2f23160a0013202c3946535f6c7986888888888888887b6e6154483b44515d6a7784888888888888887d7063564a3d3023170a00101c2936434f5c697683909ca9aa9e9184776b5e5144382b1e1105000000000000000000000000000000000000010b151f28313a434b525a60666c71757a7e8285898c8f9396999ca0a3a7aba8a49f99938d867e756c63594f443a2f24180d01000013202c3946535f6c7986929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929285786b5f5245382c1f1200000000000000000000000000050b11161c2025292c2f32343637383939393938373534312f2c2824201b16100a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f1315161d2934404c58646f7b87939fa8a7a4a6a8a3988c8074685c5145392d21160a00000000000000000000000000000000000000000000000000020c17222c37414c57616c77828c97a1aca59a90857a6f655a4f443a2f24190f04000008121d28333d48535e68737e89949ea9a89d92887d72685d52483d33281d13080000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110007121d28323b444d565f6668645c64717d8a95887b6e615d6569655d544b423930261b10050013202c3946535f6c798693a0acb9c6d3dfe2e3e3e2dfd3c6b9aca09386796c5f5346392c20130005101a252e373e4346464646464646464646464646464646464646464646433e372e251a100500000000000000000000030c141d252e373e434646433e372f261d150c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000002040607080808080807060503010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000103050607080808080707050402000000000000000000000000000000000000000000000000000000000000000000000000000000000002040607080808080707050301000000000000000000000000000000000000000000000000000000000000000000050e17202830383f464d53585d6265696c6e70717272727271706e6c6a67635f5a55504a433c342d251c130a010000000000000000000000000000000815222e3b47535f697070707070707070706a5f54483b2f221609000000000000000b151e28313a424a51575d62666a6d6f707172727271706e6b68645f5a544e535d656767676767676767645d52473c2f23170a00121e2b3844505c676f70707070707070706c62574b3f3226190c0013202c3946535f6c7986939595959594887b6e6154483b44515d6a77849195959595958a7d7063564a3d3023170a00101c2936434f5c697683909ca9ab9e9285786b5f5245392c1f130600000000000000000000000000000000000008131d27313a434c555d646b71777c81868a8e9295989c9fa2a5a9aaa7a4a09c98938e88827b746c635a51473d33281d120700000013202c3946535f6c7986939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939285786b5f5245382c1f12000000000000000000000000000000050b1015191d20232528292b2c2c2c2c2c2b2a292725221f1c1814100b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e151b1f22232324303b47535f6b76828e9a9b9b9b9b9b9b93877b6f64584c4034281d11050000000000000000000000000000000000000000000000000009131e28333e48535e68737e89939ea8a99e93897e73685e53483d33281d1208000000010c16212c37414c57626c77828d97a2ada4998f84796f64594f443a2f241a0f0400000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e11000c18242f3a444d565f6871756e6564717d8a95887b6e61666f756f665d544b42382d21160a0013202c3946535f6c798693a0acb9c6d3dfecf0f0ecdfd3c6b9aca09386796c5f5346392c2013000009131c252c32373939393939393939393939393939393939393939393937322c251c1309000000000000000000000000020b131c252c3237393937332d251d140b030000000000000000000000000000000000000000000000000000000000000000000000000000000003070a0d0f1112131415151515141312100e0c090602000000000000000000000000000000000000000000000000000000000000000000000000000105080b0e1012131415151515141312100e0c0906030000000000000000000000000000000000000000000000000000000000000000000105090c0f11121414151515141312100d0b0704000005080a0a0a0a0a0a0a0a0a09070400000000000000000000000000040d172029323a424a51585e64696e7275787a7c7d7e7f7f7e7e7d7b7976736f6b66615b544e463f362e251c130a000000000000000000000000000000091623303c4956626f7b7d7d7d7d7d7d7d7c7063574a3d3024170a00000000000007121c27303a434c545b62686e7276797b7d7e7e7f7e7e7c7a7874706b665f5859656f74747474747474746f64584b3f3226190c0013202c3946535f6c787d7d7d7d7d7d7d7d73665a4d4034271a0d0013202c3946535f6c798693a0a2a2a194887b6e6154483b44515d6a7784919ea2a2a2968a7d7063564a3d3023170a00101c2936434f5c697683909ca9ac9f9386796d6053473a2d2114080000000000000000000000000000000000040f1a242f39434c565e676e767d83888d92969a9ea1a5a8aba8a5a19e9b9794908c87827d777069625a51483f352b21160c0100000013202c3946535f6c7986868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868685786b5f5245382c1f12000000000000000000000000000000000004090d101416191b1d1e1f1f201f1f1e1e1c1a181613100c080400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101920262b2e3030303037424e5a66727d898e8e8e8e8e8e8e8e82766b5f53473b2f241a130d05000000000000000000000000000000000000000000000005101a252f3a454f5a656f7a858f9aa5ada2978d82776c62574c41372c21160c0100000000050f1a25303a45505b65707b86919ba6aba0968b81766b61564b41362b21160b01000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100101c2834404b565f68717a80776d64717d8a95887b6e666f7882786f665d54493e32261a0d0013202c3946535f6c798693a0acb9c6d3dfececececdfd3c6b9aca09386796c5f5346392c20130000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a26211a130a0100000000000000000000000000010a131a21262a2c2c2a27211b130b02000000000000000000000000000000000000000000000000000000000000000000000000000003070c101316191b1d1f20212222222121201e1c1a1815120e0a0601000000000000000000000000000000000000000000000000000000000000000004090d1114181a1c1e20212122222121201f1d1b1816120f0b06010000000000000000000000000000000000000000000000000000000004090d1215181b1d1f202122222221201e1c1a1714100b0c11141617171717171717171614100b0500000000000000000000010c151f29323b444c545c63696f757a7e828587898a8b8c8c8c8b89888583807b77726c665f58504840372e251c12080000000000000000000000000000091623303c4956636f7c898a8a8a8a8a8a7d7063574a3d3024170a0000000000030e19242e39424c555e666d73797e8285888a8b8c8c8c8b898784817c77716a635b687481818181818181807366594d4033261a0d0013202c3946535f6c79868a8a8a8a8a8a8173675a4d4034271a0d0013202c3946535f6c798693a0acaea194887b6e6154483b44515d6a7784919eaaaea3968a7d7063564a3d3023170a00101c2936434f5c697683909ca9ada194887b6e6255493c2f23170a00000000000000000000000000000000000a15202b36414b555e68707981888e94999ea2a6aaa8a5a29e9b9895928f8b8784807b76716c655f5850483f362d23190f0500000000131f2c3946525f6b7679797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979766a5e5145382b1f12000000000000000000000000000000000000000004070a0c0e1011121313131212110f0e0c0907040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f19222b32373b3c3c3c3c3c3d4955616d788282828282828282827d72665a4e4237302b251e170f07000000000000000000000000000000000000000000010c17212c37414c56616c76818c96a1aca69b90867b70655b50453a30251a100500000000000009131e29343e49545f69747f8a959faaa79d92887d72685d52483d32281d1208000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100121f2b3844515d68717a838980766d717d8a95887b6e6f78818b82786f665a4e4235291c100013202c3946535f6c798693a0acb9c6d3dfdfdfdfdfdfd3c6b9aca09386796c5f5346392c2013000000010910161a1e1f20202020202020202020202020202020202020201f1e1a16100901000000000000000000000000000000010910161a1e1f201e1b161009010000000000000000000000000000000000000000000000000000000000000000000000000003090e13181c202326282a2c2d2e2e2e2e2e2d2c2b292724221e1b16120d070200000000000000000000000000000000000000000000000000000000050b1015191d212427292b2c2d2e2e2e2e2e2d2b2a2725221f1b17120d080200000000000000000000000000000000000000000000000003090f15191e2125282a2c2d2e2e2e2e2e2d2b292623201c17171d2123242424242424242423201c17100800000000000000000009131d27313b444d565e666d747b81858a8e9194969798999998979694928f8c87837d77716a625a524940372d241a0f0500000000000000000000000000091623303c4956636f7c8996979797978a7d7063574a3d3024170a00000000000914202b35404a545e6770777e858a8e92959698989998979694908c88827c746d646975828e8e8e8e8e8b7e7265584c3f3225190c0013202c3946535f6c798693979797978d8173675a4d4034271a0d0013202c3946535f6c798693a0acaea194887b6e6154483b44515d6a7784919eaab0a3968a7d7063564a3d3023170a00101c2936434f5c697683909ca9afa3968a7d7064584b3f32261a0e06080a0b0a0804000000000000000000030f1b26323d48525d67707a838b92999fa5aaa8a4a09c9995928f8c8986827f7b77736f6b66605a544d463e362d241b11080000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b64594e4236291d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212b343c434749494949494744505c6872757575757575757575746c61554944403c36302921191007000000000000000000000000000000000000000007121d28333d48535d68737d88939ea8aa9f948a7f74695f54493e34291e130b0b0b0b0a080400020d17222d38424d58636d78838e98a3aea4998f84796f64594f44392f24190e030013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000000000000000815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e110013202c3946535f6c79838c92898076717d8a95887b6f78818a948b82766a5d5044372a1d110013202c3946535f6c798693a0acb9c6d3d3d3d3d3d3d3d3c6b9aca09386796c5f5346392c20130000000000050a0e1113131313131313131313131313131313131313131313110e0a0500000000000000000000000000000000000000050a0e111313110f0a050000000000000000000000000000000000000000000000000000000000000000000000000002080f141a1f24282c2f323537383a3b3b3b3b3b3a39383634312e2a27221e19130d0700000000000000000000000000000000000000000000000000030a10161c2125292d30333637393a3b3b3b3b3a39383634312e2b27231e19130d0700000000000000000000000000000000000000000000070e141a20252a2e313436383a3b3b3b3b3a39383533302c282322282d3030303030303030302f2c28221a12080000000000000005101b252f39434d565f6870787f868c91969a9da0a2a3a2a1a1a2a3a3a19e9b98938e89827c746c645b52493f362b21170c01000000000000000000000000091623303c4956636f7c8996a3a4a4978a7d7063574a3d3024170a00000000030e1a25313c47525c667079828990969a9ea1a3a4a5a6a5a4a2a09d98938d867e766d697683909b9b9b988b7e7164574b3e3125180b0013202c3946535f6c798693a0a4a49a8d8173675a4d4034271a0d0013202c3946535f6c798693a0a3a3a194887b6e6154483b44515d6a7784919ea3a3a3968a7d7063564a3d3023170a00101c2936434f5c697683909ca9b2a5998c8073675b4e42362a1e13131417171714100b05000000000000000814202c37434e59646f79838c949ca4aba8a29c9894908c898683807c7976736f6b67635f5a554f49423b342c241b12090000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a52483d31261a0e0000000000000003090d10121212121212121211100c080200000000000000000000000000000000060b0e111212121212121212110f0b0701000000000000000000000000000000000000000000000000000000000004101c28333d464e545656565656534e4b56606668686868686868686868635a5553504c47413a332b22190f06000000000000000000000000000000000000000c18232f3a444f5a646f7a858f9aa4a7a3988d83786d62584d42382d221717171717171614100b0506101b26313b46515c66717c87929ca7a7a0968b80756b60564b40362b1f13070013202c3946535f6c798693a0acada09386796d6053463a2d201307030302000000000000010203030815212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100121f2c3845515d69737c858e928980767d8a95887b78818a948c837a71675b4f4236291d100013202c3946535f6c798693a0acb9c6c6c6c6c6c6c6c6c6c6b9aca09386796c5f5346392c201300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c131a20252b3034383b3f41434546474848484847464442403d3a37332e29241e18120b0300000000000000000000000000000000000000000000070e151b22272c3135393d40424446474848484847464543403e3b37332e2a241e18120b03000000000000000000000000000000000000010911181f262c31363a3e4143454647484848474644423f3c38342f2d34393c3d3d3d3d3d3d3d3d3c38332c241a10060000000000010c17222c37414b555f68717a828a91979da2a5a09c99979594949596989b9ea3a49f9a948d867e766d645b51483d33281e1308000000000000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a0000000008131f2b37424d58636e78828b949ba1a6aaa6a19e9b99989898989a9c9f98918980766d7783909da8a4978a7d7164574a3e3124170b0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0013202c3946535f6c7986939696969694887b6e6154483b44515d6a77849196969696968a7d7063564a3d3023170a00101c2936434f5c697683909ca9b4a89c8f83776a5e52463b2f251f1f21232423211c1710080000000000000c1824303c48545f6b76818b959ea6aca49d96918c8884807d797673706d6a66635f5b57534e49443e38312a221f1b160f0800000000000a16212c3740484f5253535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353524e4840362b201509000000000000070e14191c1e1e1e1e1e1e1e1e1e1c19140d0600000000000000000000000000030a11171b1d1e1e1e1e1e1e1e1e1e1b17120c04000000000000000000000000000000000000000000000000000000000815212d39444f586063636363635f584e4e555a5b5b5b5b5b5b5b5b5e61636362605d58534c453d342b21170d030000000000000000000000000000000000000f1c2834404b56616b76818b969a9a9a9a91877c71665c51463b31262324242424242423201c1710080a141f2a353f4a55606a75808b969a9a9a9a92877d72675d52473c3023170b0013202c3946535f6c798693a0acada09386796d6053463a2d20130f0f0f0f0d090500060a0d0f0f0f0f15212e3b4854616e7b8894a1aeaa9e9184776a5d5144372a1e1100101d2935414c57616a737c858e9289807d8a95887b818a948c837a71685f554a3f33271a0e0013202c3946535f6c798693a0acb9b9b9b9b9b9b9b9b9b9b9b9aca09386796c5f5346392c2013000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004070808080808080808080705010000000000000000000000000000000000080f171e252b31363b4044484b4e50525354555555545352514f4d4a47433f3a352f29231c150d06000000000000000000000000000000000000000109111920262d33383d4246494c4f515253545555545453514f4d4a47433f3a35302a231c150e0600000000000000000000000000000000010a131b232a31373d42464a4d505253545555545453514f4c48443f3a363e45494a4a4a4a4a4a4a4a48443e362c22180c010000000007121d28333e49535d67717a838c949ba2a7a09a94908c8a88888888898c8e92979ca3a59f98908880766d63594f453a2f24190e030000000000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a000000000c1824303c47535e6a75808a949da5ada8a19a95918e8c8b8b8b8c8d9094989a92897f757784919eaaa4978a7d7063574a3d3024170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0013202c3946535f6c79868a8a8a8a8a8a887b6e6154483b44515d6a77848a8a8a8a8a8a8a7d7063564a3d3023170a00101c2936434f5c697683909ca9b6ab9f93877b6f63574c41362e2c2c2d3031302d28221a120800000000020f1b2834404c5864707c87929da7ada39a928b85807b7874706d6a6764605d5a56534f4b47423e383432312f2e2b27211911080000000005101a252e373e43464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464645433d362e241a0f0400000000000911192025292b2b2b2b2b2b2b2b2b28241f1810070000000000000000000000030c151c22272a2b2b2b2b2b2b2b2b2a28231d160e050000000000000000000000000000000000000000000000000000000b1724303d4955606a6f6f6f6f6f6a6055494a4e4e4e4e51575c62676b6e6f6f6f6c69645e574f463d33291f1409000000000000000000000000000000000000121e2b3844505c68727d888d8d8d8d8d8d8b80756a5f554a3f352a2c2f313131313131302d28211a130c0e18232e39434e59646e79848d8d8d8d8d8d8d84796e64584c3f33261a0d0013202c3946535f6c798693a0a2a2a09386796d6053463a2d201c1c1c1c1b1915100b11161a1c1c1c1c1c212e3b4854616e7b8894a1a2a29e9184776a5d5144372a1e11000d1924303b454e57616a737c858e9289808a9588818a948c837a71685f564d43392e22160a0013202c3946535f6c798693a0acacacacacacacacacacacacacaca09386796c5f5346392c2013000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c101314151515151515151514110d0802000000000000000000000000000009111a212930363c42474c5054575a5c5e606161616161605f5d5b5956534f4b46413b352e271f170f070000000000000000000000000000000000020b131b232a31383e44494e5255595b5d5f6061616161615f5e5c5957534f4b46413b352e271f180f070000000000000000000000000000000a131c252d353c42484d5256595c5e6061616161615f5d5b5854504b453f4850555757575757575757554f483e34291e1206000000010c18232f3a45505a656f79838c959ea6a59d958f8984807d7b7b7b7b7d7f82868b9198a0a8a29a92897f756b61564c41362b1f14080000000000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000003101c2834404c58646f7b86919ca6afa89f968f898582807e7e7e7f8184878c929991877d7784919eaba3978a7d7063574a3d3024170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0013202c3946535f6c787d7d7d7d7d7d7d7d7a6e6154473b44515d6a767d7d7d7d7d7d7d7d7b6f6356493d3023160a00101c2936434f5c697683909ca9b0a7a0978b8074685d5348403a38393a3d3e3c39332c241a100600000005121e2b3743505c6975818d98a4aea59b9188817a746f6b6864615d5a5754514e4a47434345454442413f3d3c3a37322b231a11060000000009131c252c323739393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393936322c241b1208000000000008121b232b313538383838383838383735302a221a1006000000000000000000010c151e272e3337383838383838383837342e2820170d0300000000000000000000000000000000000000000000000000000c1825323f4b5865717c7c7c7c7c7164584b3f434950565c62686d73777a7c7c7b79756f6861584f453b31261b10040000000000000000000000000000000000131f2c3946525f6c79818181818181818181796e63594e43382e32383c3e3e3e3e3e3e3c39332c251d160f111c27323c47525d67727d81818181818181818074675a4d4134271a0e0013202c3946535f6c798693959595959386796d6053463a2d29292929292825211b161d22262829292929292e3b4854616e7b8894959595959184776a5d5144372a1e110008131f29333c454e57616a737b858e928b8f978d8b938c837a71685f564d443b31271c11060013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09386796c5f5346392c201300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181d20212121212121212121201e19140d0500000000000000000000000009121b232b333a41484d53585c606467696b6c6d6e6e6e6e6d6c6a6865625f5b56514c463f38312921191007000000000000000000000000000000020b141d252d353c43494f55595e6265686a6c6d6e6e6e6e6d6c6a6866635f5b57524c464039312a211910070000000000000000000000000008121c252e373f464d53595e6266696b6c6d6e6e6e6d6c6a6764605c57514a515a616363636363636363615a50453a2e22160a00000006121d2934404b56616c76818b959ea7a59c938b847d7874716f6e6e6f7073767a80878e969fa8a49b91877d73685d52473c3025190e0200000000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000007131f2c3844505c6874818c98a3aeaaa0968d857e7975737271717274777b81878f968f847985929eaba3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00121e2b3744505c676e70707070707070706f685d514539424e5a656e70707070707070706f695f53473b2e22150900101c2936434f5c697683909ca9a99e959190857a6f645a514a46454647494a49443e362c22170c0100000713202d3946535f6c7885919da9aa9e93897f766f69635f5b5854514e4b4845413e41494f5252504f4d4c4a4947433d352c22180d02000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a26211a12090000000000040f19242d353c42444545454545454544413b342c22180d02000000000000000008131e2731383f43454545454545454543403932291f150a00000000000000000000000000000000000000000000000000000b1825323e4b5864717d8989898073675b4f4a4f555b61676d73797e838789898885817a736a61574d42372c21150a0000000000000000000000000000000000121f2b3844515d687173737373737373737371675c52473c32343d44484a4a4a4a4a4a49443e362f2820191215202b36404b56616b737373737373737373736f64584c4033261a0d0013202c3946535f6c798688888888888886796d6053463a36363636363635322d2620282e32353636363636363b4854616e7b8888888888888884776a5d5144372a1e1100020d17212a333c454e576169727b858e979a9f99958c837a71685f564d443b32291f150b000013202c3946535f6c798693939393939393939393939393939393939386796c5f5346392c2013000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d151d23292c2e2e2e2e2e2e2e2e2e2d2a251f170f060000000000000000000009121b242d353d454c53595e64686c70737678797a7b7b7b7a79787774726f6b67625d57514a433b332b2219100600000000000000000000000000010b141d262f373f474e545b60656a6e717476787a7b7b7b7b7a797775726f6b67635d57514a433b332b221a1007000000000000000000000005101a242e37404951585f656a6e727577797a7b7b7b7a797674706c68625c5558636c70707070707070706c62564a3e3225190c0000000b17232e3a45515c68737d88939da7a79d938a8179726c67646261616263666a6f757c848d97a1aba3998f847a6f63584d41362a1e130700000000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a0000000a16222f3b4854606c7985919da9afa4998e847b736d696665646466686b70767d858d968b8085929faca3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000f1c28343f4a555d626363636363636363635e564c41353d49535c626363636363636363635f574d42372b1f130600101c2936434f5c697683909ca9a6998d848c8b81766c635c565352525355575550483e34291d120600000815222e3b4854616e7a8794a0ada6998e82776d645d58534f4c4845423e3b38353f49535b5f5f5d5b5a585755534f473e342a1e130700000000010910161a1e1f202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201f1e1a150f080000000000000915202b353f474d5151515151515151514d463e342a1f130800000000000000030e19252f39424a4f5151515151515151504b443b31261b1004000000000000000000000000000000000000000000000000000a1723303d4956636f7c89959083776b6057565a60666c72797f858a8f93959694918c857c73695f54493d32261a0f0300000000000000000000000000000000101c2835404c576066676767676767676767655f554b4035323d464e54575757575757554f484139322b241c1519242f39444f596266676767676767676767645d53483c3024170b0013202c3946525f6c787b7b7b7b7b7b7b7b786c60534642424242424242413d38302a32393f42424242424242424754616d797b7b7b7b7b7b7b7b766a5d5044372a1e110000060f18212a333c454e576069727b858e979f958c837a71685f564d443b322920170d04000013202c3946535f6c798686868686868686868686868686868686868686796c5f5346392c20130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f272f34393b3b3b3b3b3b3b3b3b3936302921180e03000000000000000008121b242e373f474f575e646a6f74797c808284868788888887868583817e7b77736e68625c554d453d342b22180e0400000000000000000000000009131d262f38414951585f666c71767a7e8183858687888888878684827e7b78736e69635c554d453d342c22190f05000000000000000000010c17222c364049525b626a70767a7e82848687888888878583807d78736d675f5b67747d7d7d7d7d7d7d7d7366594d4033261a0d000004101c27333f4b56626d79848f9aa5aba0968b81786f67615b5856545455575a5e636a727b858f99a4aba1968b8075695e52473b2f23170b00000000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a0000000c1825323e4b5763707c8995a1adaa9e93877c7269615c5a585758595b5f646b727b848e928787939faca3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000b17232e39434b5256565656565656565656534c443a2f37414a5155565656565656565656534d453c31261a0f0300101d2a3643505d697683909ca9a5998c7f8892887e756d6762605f5f606264615a50453a2e22160900000916222f3c4855626f7b8895a2aea3968a7d71655b534c47433f3c3835322f2c3844505b656b6b6a68676563625f5950463b2f23170b000000000000050a0e11131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313110e0a04000000000000000e1a26313d4751595e5e5e5e5e5e5e5e5d5850463b3024190d0200000000000008141f2a36414b545b5e5e5e5e5e5e5e5e5c564d43382c201408000000000000000000000000000000000000000000000000000815222e3b4754616d7a869394887d72696463666b71777d848a90969b9fa2a3a19d968e857b70655a4e43372b1f1307000000000000000000000000000000000c18242f3a454e55595a5a5a5a5a5a5a5a5a59544d43392f38444e5860646464646464615a534b443d352e271f181d28333d4750575a5a5a5a5a5a5a5a5a5a58534b41362b20140800121e2b3743505b666d6f6f6f6f6f6f6f6f6d665c504f4f4f4f4f4f4f4f4e49423a323c444a4e4f4f4f4f4f4f4f4f515d676e6f6f6f6f6f6f6f6f6d64594e4235291c10000000060f18212a333c454e576069727b85929c8f837a71685f564d443b322920170e05000000131f2c3946525f6b767979797979797979797979797979797979797979766b5f5246392c1f13000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d273139404547484848484848484846413b332a20150a0000000000000005101a242d374049515961686f757b8085898c8f919394949594949392908e8b87837f7a746d665f574f463d342a20160c010000000000000000000007111b252f38414a535b636a71777d82868a8d909293949595949392908e8b88847f7a746d675f574f473e342b21170d03000000000000000007121e29333e48525b646d747b81868b8e9192949495949392908d89847e78716a616875828a8a8a8a8a8a7e7265594c3f3326190d00000814202c3844505c67737e8a95a1aca69a8f84796f665d56504b494848494a4e52586069737d88939ea9a89d91867a6f63574b3f33271b0f03000000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a0000000e1b2734404d5966737f8c98a4b1a69a8e82766b6057504d4c4b4b4c4f53596169727c8690929299a3afa3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0006121c2731394146494c4c4c4c4c4c4c4c4a47423a32282f384045494b4c4c4c4c4c4c4c4a47423c332a1f15090000101d2a3643505d697683909daaa5988c7e848f91888078736e6c6b6c6d6e716c62564a3e3125180c00000916222f3c4955626f7c8995a2aea295887b6e625549413b3733302c2a2b2e333c4854606c777876757372706e6b62574c3f33271a0e010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111d2a36424e59636a6b6b6b6b6b6b6b6962584c41352a1e13070000000000020e1925303c47535d666b6b6b6b6b6b6b6b675f54493d3024180b000000000000000000000000000000000000000000000000000613202c3945525e6b778490998e847a74707072767c83898f959ba1a5a1a0a0a1a5a0978d82766b5f53473b2f23170b0000000000000000000000000000000007131e29333c44494d4d4d4d4d4d4d4d4d4d4c49433b322f3c4854606a7071717171716c645d564e474038312a231b212c353e454b4d4d4d4d4d4d4d4d4d4d4c4741392f251a0f03000f1b27333f4a545c616262626262626262615c54595c5c5c5c5c5c5c5c5a544c423a444e565b5c5c5c5c5c5c5c5b57555d616262626262626262615b52483d3125190d0000040d161f28313a434c555e677079828b9591938980776e655c534b42392f261e150c020000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b645a4f43372a1e1100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c18242f39434b51545454545454545454524d453c31261b0f040000000000020d17212c353f49525b636b737a81878c9195989b9d9fa0a1a2a1a1a09e9c9a97948f8a857f78716961584f463c32281e1308000000000000000000030e18232d37414a535c656d747c82888e92969a9c9ea0a1a1a2a1a09f9d9b9894908b857f787169615850463d33291f140a00000000000000010d18242f3a454f5a646d767e868d92979a9d9fa0a1a2a1a09e9c9995908a837b736b6976828f979797978b7e7165584b3e3225180b00000b1824303c4854606c7884909ba7aca094897d72685d544b443f3c3b3b3c3e42474e57616b76818d98a4aea3978b8074685c5044372b1f1307000000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a000000101c2936424f5b6875828e9ba7afa2968a7d7165594e45413f3e3e4043484f57606a747f8a959ea3abb0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000b17232e39444d5458595959595959595650473d32272d38424b5358595959595959595751493f34291d12060000111d2a3744505d6a7783909daaa4988b7e7f8b97918a847e7b797879797b7d7266594c403326190d00000915222f3c4855626e7b8895a1aea295887b6e6255483e3a3836363636383a3f454e5864707c858382807e7d7b74685b4e4235281c0f0200000000000004080b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b080400000000000000121f2c3845525e6a757878787878787874695d52463b2f24180d010000000008131f2a36414d58636f78787878787878787165594c3f3326190d0000000000000000000000000000000000000000000000000004111d2a36434f5c6874818d99968d85807d7c7e82888e949aa0a39e9895939395989e9e93877b7064584c3f33271b0e02000000000000000000000000000000020c17212a32383d40404040404040404040403d383129313e4a5764707c7d7d7d7d7d766f676059514a433c342d261e232c343a3e404040404040404040403f3c362f261d130800000b17222d38424a5155555555555555555555515c646969696969696969665e53483f4b566067696969696969696862585255555555555555555554504940362c20150900010b161f28313a434c555e677079828b948b858d928981776e655d544b423930271e140900000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a52483e32261a0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935404b555c6161616161616161615e574d43382c201407000000000009141e29333d47515b646d757d858c92989da1a5a39f9d9b9a9a9a9a9b9da0a3a3a09b96908a837b736a61584e443a2f251a0f0400000000000000000a151f2a343f49535c656e777f868d94999ea2a4a09d9a999898999a9c9fa2a4a09b96908a837b736a62584f453b31261c110600000000000006121e2935404b56616c76808890989ea3a7a9a5a19f9d9c9c9c9c9ea09b958d857d746a7683909da4a4978a7d7164574b3e3124180b00020f1b2734404c5864707c8994a0aca79b8f84786c61564c423933302e2e2f32363c454f5a65707c88939faba89c9084786c6054473b2f23160a000000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a000000111e2a3744505d6a7683909ca9aca093877a6e6155493d3432313233373d454e58626d7884909ba7b3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000f1b28343f4b555f656666666666666661594f44382c323e49545d6466666666666666625b51453a2e2215090000111e2a3744505d6a7784909daaa4978b7e7a86919c958f8b878685858688807366594c403326190d00000814212e3b4754616d7a8693a0aca396897d716459504a47444343424344474a5057606a75818c908e8d8b898074675b4e4235281b0f0200000000030a101417191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191919191714100a040000000000121f2c3945525f6b77838585858585857a6e63574c4035291e1307000000020d1924303b47525e6975808585858585857d7266594c4033261a0d00000000000000000000000000000000000000000000000000010e1b2733404c5864717d89949f97908c8a898b8e93999fa59e98928d888686888d939b988c8074685b4f43362a1e110500000000000000000000000000000000050f1820272d313334343434343434343433312c2624313e4a5764717d878a8a8a888179726b635c554d463f3730292122292e323434343434343434343433302b251d140b01000006111c26303840454848484848484848484a56626e75757575757575757065594c434f5c687275757575757575746a5e5248484848484848484848443f372e251a0f040007121d28313a434c555e677079828b948b827a848d938a81776f665d544b423930261b1005000a16212c3740484f525353535353535353535353535353535353535353524f4840372c21160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3945515d676d6e6e6e6e6e6e6e6e695f54483c3023170a00000000040f1a25303b454f59636d767f878f969da3a7a19b9793908e8d8d8d8e8f9194979ca1a7a29b958d857c736a60564c41362b20150a0000000000000005101b26313c46515b656e77808991989fa5a39d9894908e8c8c8c8c8d8f92969ba0a6a29b958d857c746a61574d42382d22170c0100000000000a17222e3a46515d68737d88929aa2a9aba49e999592908f8f8f909194979c978f867c737784909daaa4978a7d7064574a3d3124170b0005121e2b3743505c6874818d99a5afa3978b7f73675b50453a302823222123252a333d48545f6b77838f9ba7aca094887c7063574b3f3226190d000000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a000000121f2b3845525e6b7884919eabaa9e9184786b5f5246392d262525272b333c46515c67737f8b97a3afb0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0000111e2b3744505c6770737373737373726b6054483c2f35424e5a666f737373737373736d62564a3e3124180b0000111e2b3744515d6a7784919eaaa4978a7d75808c97a09b9794929292938c807366594c403326190d00000613202c3945525f6b7884909da9a5998d81756b625b565351504f4f505153575b6169727c86929c9b9995897d7064584b3f33261a0d01000000050d151b20242526262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262524201c150e0600000000111e2a37434f5b66727d89929292928b8074685d51463a2f23180d01000008131e2a35414c58636f7a86919292928f83786c61564a3e3125180c00000000000000000000000000000000000000000000000000000b1724303c4854606c78848f9aa19c989696979a9fa4a099938d87817c79797c8189929c9084776b5f5246392d2014070000000000000000000000000000000000060e161c2125272727272727272727272624211b23303c4955616c757e889197928b847c756e665f585049423b332c251e22252727272727272727272726241f1a130b02000000000a141e262e34393b3c3c3c3c3c3c3c3e4b5764717e8282828282828173675a4d44505d6a7782828282828282796d6053463c3c3c3c3c3c3c3c3b38342d251c130800000c18232f39434d555e677079828b948b8279717a848d938a81786f665d544b42372c21150a0005101a252e373e4346464646464646464646464646464646464646464646433e372e251a1005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4854616d797b7b7b7b7b7b7b7a7164584b3e3125180b000000000a15202c37424c57616b757f889199a1a8a39c958f8a878482818080818284878b90959ca3a69f978e857c72685d53483d32261b10040000000000000b16212d38434d58626d76808a929ba3a8a099928c888481807e7e808183868a8f959ca3a69f978f867c73695f544a3f34291d120700000000020e1b27333f4b57626e79848f9aa3acaba29a938d8986848282828385878b9096988e857a7784919eaaa4978a7d7063574a3d3024170a000814212d3a46535f6b7884919da9aca093877b6e62564b3f33281e1715151619212c37434f5b67737f8b98a4b0a4988c8073675a4e4135291c10030000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a000000131f2c3946525f6c7985929faca99c8f8376695d5043372a1e18181a212a343f4b57626e7b87939facb0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0001121f2c3845525f6b788080808080807d7063574a3d303643505d69768080808080807e7265594c3f3226190c0000111e2b3844515e6b7784919eaba3968a7d707a85909aa4a3a19f9f9f998c807366594c403326190d000004111e2a37434f5c6874818d99a4a99d92877d736c6662605e5d5c5c5d5e6063676c737b848e98a3a79c9085796d6154483c3023170b000000050e171f262c3032323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232302c2720180f050000000e1b27333e4a55606c77838e9a9e9c9185796e62574c4035291e120700020d1924303b46525d6974808b979e9e94897d72675b5044392d21150900000000000000000000000000000000000000000000000000000814202c3844505b67727d88929ba4a5a3a3a4a5a09b958e88827b75706d6d7077808a9593877a6e6155483c2f23160a000000000000000000000000000000000000040b1015181a1a1a1a1a1a1a1a1a1a1a181514212d3945505a636c767f88919b958e878078716a625b544c453e362f2820191a1a1a1a1a1a1a1a1a1a1917130e08010000000000020c141c23292d2f2f2f2f2f2f2f313e4b5764717e8b8f8f8f8f8d8173675a4d44505d6a77848f8f8f8f8f86796d6053463a2f2f2f2f2f2f2f2e2c28221b130a010000101c2834404b555f677079838c948b82797068727b848d938a81786f665d54493e32261a0d000009131c252c32373939393939393939393939393939393939393939393937322c251c130900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b888888888888887e7165584b3e3225180b000000040f1b26323d48535e69737d87919aa3aba299918a847e7a77757373737475787b7f848a9199a1a9a0978e84796f64594e43372c201509000000000005101c27333e49545f6a747e89929ca4a89f968e87817b78757372727374767a7e848a9199a2a9a1988e857b70665b50453a2f23180c0000000006121e2b37434f5b67737f8a96a1acada2999088817c797776757576787b80858b92968c827885929eaba3968a7d7063564a3d3023170a000a1723303c4955626e7b8794a0aca99c9084776b5f52463a2e22170c0808090f1b26323e4b57636f7c8895a1aea89b8f82766a5d5144372b1e12050000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca89b8e8275685b4f4235291c0f0b0f18232e3a46525e6b7784909ca9b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0004121f2c3945525f6b78858c8c8c8c8a7d7063574a3d313743505d6976838c8c8c8c8c7f7265594c3f3326190c0000121f2b3845515e6b7885929ea2a296897c6f747e89929ba2a7aaaca6998c807366594c403326190d0000020e1b2734404c5864707c88939ea9a3998f867e77726f6c6a696969696a6c6f73787e858d96a0aaa1968b8074685c5044382c2014070000010c16202931383c3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3d38322a21170d0200000a16222d38444f5b66727d89949fa1968b7f73685c51453a2f23180c0107131e2a35414c57636e7a85919ca59a8f83786c61564a3f33281d1105000000000000000000000000000000000000000000000000000004101c27333f4a56616b76808992999d9f9f9d9a958f89837d77706a646060656e798490968a7d7064574b3e3225180c000000000000000000000000000000000000000005090c0d0d0d0d0d0d0d0d0d0d0d0b08111c28333e48515a646d767f89929b99918a837b746d655e574f484139322b22190f0d0d0d0d0d0d0d0d0d0b07030000000000000000020b12181d2022222222222224313e4b5764717e8b989c9c9a8d8173675a4d44505d6a7784909c9c9c9386796d6053463a2d22222222222222201c17110901000000121f2b3844505c677179838c948b827970676069727b848d938a81786f655a4e4235291c100000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a26211a130a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8894949494948b7e7165584b3e3225180b0000000915202c37434e5965707a858f99a3aca29990878079736e6b6867666667696b6f737980878f98a1a9a0968b81766b5f54493d31251a0e02000000000a15212d38444f5a66717b86909aa4aaa0968d847c75706b6866656566676a6e72787f879099a3aaa0978d82776d62564b4034291d11050000000915222e3a47535f6b77848f9ba7b1a69b90877e76716d6a696868696c6f737980889094897e85929eaba3968a7d7063564a3d3023170a000c1926323f4b5864717d8a97a3afa69a8d8174685b4f43362a1e12060000000a16222f3b4754606d7986929fabab9e9285786c5f53463a2d2014070000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79b8e8174675b4e4134281b0e0206121e2a36424f5b6874818e9aa7b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0006131f2c3946525f6c7986929999978a7d7164574a3e313744505d6a7784909999998c807366594c403326190d0000121f2c3945525f6b78859295959595887c6f6c76808990969b9d9fa0998c807366594c403326190d0000000b1824303c4854606b76828d97a1aaa1988f89837e7b79777675757677797b7f83898f979fa8a3998f84796e63574c4034281c1004000007131e28323b43484b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c49433c33291f1408000005111c27333e4a55606c77838e9aa59c9085796e62574b4034291d12060d18242f3b46525d6974808b97a2a094897d72675b5044392e22170b000000000000000000000000000000000000000000000000000000000b17222e39444f5a646e7780878d919293918e89847e78726c655f5954545c6874808c938c7f7266594d4033271a0d0100000000000000000000000000000000000000000000000000000000000000000000000c17222c363f48525b646d768089929b9c948d867e777068615a534b443d342b21160b000000000000000000000000000000000000000000070c111415151515151824313e4b5764717e8b98a4a79a8d8173675a4d44505d6a7784909da9a09386796d6053463a2d2015151515151513100b06000000000013202c3946535f6c79838c948b827970675e576069727b848d938a81766a5d5044372a1d11000000010910161a1e1f20202020202020202020202020202020202020201f1e1a161009010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8895a1a1a1988b7e7165584b3e3225180b0000010d1925313d48545f6b76818c97a1aba49a90877e756e67625e5b5a595a5b5c5f63686e757d868f99a3a89d92877c7065594e42362a1e1105000000020e1a26323e4955606c77828d98a2aca3988e847a726b645f5c595858595b5e62676d757e87919ba6a99e94897e73685c5145392d22160a0000000b1824313d4a56626f7b8794a0acaba094897e746c65605e5c5b5c5d5f63686e767e8790908585929faca3968a7d7063564a3d3023170a000e1b2734414d5a6773808c99a5b1a4988b7e7265594c4033271a0e0200000006131f2c3845515e6a7784909da9ada094877b6e6155483c2f2216090000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01020e1a2733404d5966727f8c98a5b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000613202c3946535f6c7986939fa4978b7e7164574b3e313744515d6a7784919da6998d807366594d4033261a0d000013202c3946535f6c79868888888888887b6e656e777e858b8e919293928c807366594c403326190d0000000814202c37434f5a65707b858f98a0a8a19a948f8b888584838282838486888b8f949aa1a9a29a91877d73685d52463b2f23180c0000000c18242f3a444d5458595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595959595958554e453b3025190d0100000b16222d38444f5b66727d89949fa1968a7e73685c51453a2e23170c131e2935404c57636e7a85919ca59a8f83786c61554a3f33281d11060000000000000000000000000000000000000000000000000000000006111d28333d48525c656e767c8184868684827d78736d67615a544e484b5764707d8686868174685b4e4235281c0f02000000000000000000000000000000000000000000000000000000000000000000000005101a242d364049525b646d768089929c9f989089827a736c645d564e463d33281c1105000000000000000000000000000000000000000000000407080909090b1824313e4b5764717e8b98a4a79a8d8173675a4d44505d6a7784909daaa09386796d6053463a2d20130909090908070400000000000000121f2c3845515e69737c868b827970675e554e576069727b848d847b71675b4f4336291d100000000000050a0e1113131313131313131313131313131313131313131313110e0a0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000006121e2a36424d5965707c87939ea8a89d93887e756b635c56524f4d4d4d4e5053575c636b737d87919c9d9a968d82766a5e5246392d20140700000006121e2b36424e5a66717d88939fa9a79c91867c72696059534f4d4c4c4d4e51565c636c757f8a95a0aba59b8f84796d61564a3e32261a0e0200000d1a2733404c5965727e8b97a3b0a79b8f83786d625a54514f4f4f5053575d646c757e88938e8e96a2aea3968a7d7063564a3d3023170a00101c2936424f5c6875828e9ba8afa296897d7063574a3d3124180b0000000004101d2936424f5c6875828e9ba8afa296897c7063564a3d3024170a0000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000c1825323e4b5864717e8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000713202d3a4653606d798693a0a4988b7e7165584b3e323844515e6b7784919ea69a8d8073675a4d4034271a0d010013202c3946525f6c777b7b7b7b7b7b7b796d61656d747a7e828486868583807366594c403326190d000000030f1b27323e49545f69737d868e969da3a59f9b97949290908f8f90909294979ba0a5a49e9790887f756b61564c40352a1e1307000000101c2834404c565f6565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656560574d41362a1d1105000005111c27333e4a55606c77838e9aa59b9084796d62564b3f34281d1118242f3a46515d6874808b96a2a094897d72665b5044392e22170b0000000000000000000000000000000000000000000000000000000000000b16212c36404a535c646b71757879797875716c67615c554f49433d4855616d787979797973675b4e4235281b0f0200000000000000000000000000000000000000000000000000000000000000000000000008121b242e374049525b656e77808a939ca29b938c857d766f6760584f44392d211508000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8b98a0a09a8d8173675a4d44505d6a7784909da0a09386796d6053463a2d20130700000000000000000000000000101d2935414d58616a737c827970675e554c454e576069727b847b72695f564b3f33271a0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000a16222e3a46525e6a76818d99a4aea2978c81766c625a524b46424140404143464b5159616b757f8a94918d8a86837a6e6154483b2e2115080000000a16232f3b47535f6b76828e99a5ada2968b80756a60574e4843403f3f4042454a515a636d78838f9aa6aca1958a7e72665a4e42362a1e120600000f1c2835424e5b6874818d9aa6b0a3978b7e73675b51484543424244474b525a636c76818c979aa0a8b0a3968a7d7063564a3d3023170a00111e2a3744505d6a7683909da9aea194887b6e6255483c2f22160900000000000e1b2734414d5a6773818d9aa6b1a4978b7e7164584b3e3225180c0000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1724313d4a5763707d8a97a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000714202d3a4753606d798693a0a5988b7e7165584b3f323845515e6b7784919ea79a8d8173675a4d4134271a0e0100121e2b37434f5b666d6e6e6e6e6e6e6e6d675c5b62696e72757779797877746e63574b3e3225190c000000000a16212c37424d57616b747c848b92979ca0a3a3a19f9d9c9c9c9c9d9fa1a4a4a19d98938d867e766d63594f453a2f24190d02000000121f2b3844515d6871727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727271695e5246392d2013070000000b16222d38444f5b66727d89949fa1958a7e73675c5045392e22171e2935404c57626e7985909ca59a8f83786c61554a3f33281c110600000000000000000000000000000000000000000000000000000000000005101a242e38414a52596065686b6c6c6b6965615c56504a443e373945515c666c6c6c6c6c6961574b3f33261a0d010000000000000000000000000000000000000000000000000000000000000000000000000009121b252e374049535c656e77818a939ca09e978f888179726a6155493d3124180b000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8b939393938d8173675a4d44505d6a7784909393939386796d6053463a2d201307000000000000000000000000000d1925303b464f58616a747870675e554c433c454e5760697279726960574d44392e23170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0d0f0f0f0f0f0f0d0a0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00010d1926323e4a56626e7a86929ea9a99d91867a6f655a5048403a3634333335373a40474f59636e79848885817e7a77736a5f53463a2d2114070000010e1a26323f4b57636f7b87939faaa89d91857a6e63584e453d373432323335393f48515c67727d8995a1ada69a8f83776b5f52463a2e2215090000111d2a3743505d6976838f9ca9ada094877b6f62564a3f38363536373b4048515a656f7a86919da9b1b0a3968a7d7063564a3d3023170a00121f2b3845515e6b7784919eaaada093877a6d6054473a2e21140800000000000d192633404c5966727f8c99a5b2a5988c7f7265594c3f3326190c0000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000714202d3a4753606d7a8794a0a5988c7e7265584c3f323845515e6b7885929ea79a8e8174675a4d4134271a0e01000f1b27333f4a545c6161616161616161615d5551575d6266696b6c6c6c6a68645c52473b2f23160a0000000005101b26313b454f59626a727980868b909497999b9d9e9f9fa09f9e9d9c9a9794918c87827b746c645b51483d33281e13070000000013202c3946535f6c797f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7a6d6154473a2e21140700000005111c27333e4a55606c77838e9aa59b8f84786d61564a3f33281c232f3a46515c68737f8a96a19f94897d72665b5044392d22170b000000000000000000000000000000000000000000000000000000000000000008121c262f3840484e54595c5e5f5f5e5c5955504b453f39332c34404a545b5f5f5f5f5f5e584f453a2f23170a00000000000000000000000000000000000000000000000000000000000000000000000000000009131c252e37414a535c656f78818a9393939393928b847c7265584c3f3226190c000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8686868686868173675a4d44505d6a7784868686868686796d6053463a2d2013070000000000000000000000000008141f2a343d464f58626a6c675e554c433a333c454e5760686c6860574e453b32281d1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b11161a1c1c1c1c1c1c1a16110b040000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0004101d2935424e5a66737e8b97a3afa4988c8175695e53483f362e2a272627282a2f353d47515c68737f7c7875716e6a6761584e42372a1e1205000004111d2a36424f5b6773808b98a3afa4988c8074695d52473c332b27262527292e363f4a55616d7884909ca9ab9f93877b6f62564a3d3125180c0000121e2b3845515e6b7784919eaaab9e9285786c5f53463a2e2929292b2f363f48535e6975818c98a4b0b0a3968a7d7063564a3d3023170a00121f2c3945525f6c7885929fabac9f9286796c5f5346392d20130600000000000c1825323f4b5865717e8b98a5b1a6998d807366594d4033271a0d0000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000714212e3a4754616d7a8794a1a5998c7f7265594c3f323845525f6b7885929fa79b8e8174675b4e4134281b0e01000b17222d38424a51545555555555555554514b464c52565a5c5e5f5f5f5e5b58524a40352a1e1307000000000009141f29333d47505860686f757a8084878a8d8f90929292939292918f8d8b8885817b767069625a52493f362c21170c010000000013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c877a6d6154473a2e211407000000000b16222d38444f5b66727d89949fa095897e72675b5044392d222934404b57626e7985909ca59a8e83786c61554a3f33281c11060000000000000000000000000000000000000000000000000000000000000000010a141d262e363d43484d5052535352504d49443f3a342e28232e38424a505253535353514d463d33291e1206000000000000000000000000000000000000000000000000000000000000000000000000000000010a131c252f38414a535d666f788186868686868686867f7265594c3f3226190c000000000000000000000000000000000000000000000000000000000b1724313e4a57637079797979797979797266594d43505c697479797979797979766b5f5346392d20130600000000000000000000000000020d18222b343d4650585e5f5c554c433a312a333c454e565d5f5d574e453c332920160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e161c222628292929292826221c160e0500000000000000000000000000000000000000000000000000000000000000030406070808080707050815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000713202c3845515e6a76838f9ba7aca094887b7064584d42372d241d1b1a1a1b1e242b35404b57636d726f6c6965625e5b564f463c31261a0e0200000714202d3945525e6a77838f9ca8ada194887c7064584c41352a211b19191a1d242e3944505c6874818d99a5afa3978b7e7266594d4134281b0f0200121f2c3945525f6c7885929faba99d9083766a5d5144372b1e1c1c1e242d37414d5864707c8894a0adb0a3968a7d7063564a3d3023170a0013202c3946535f6c7986929facac9f9285786c5f5245392c1f120600000000000b1824313e4b5764717e8b98a4b1a79a8d8173675a4d4034271a0e0000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000815212e3b4854616e7b8794a1a6998c7f7366594c40333946525f6c7985929fa89b8e8175685b4e4235281b0f020006111c262f383f4548484848484848484845403b41464a4d5052525352514f4c4740382e24190e020000000000030d17212b353e464e565d64696f73787b7e8182848586868686858483817e7c7874706b655f58504840372d241a0f05000000000013202c3946535f6c7986939999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999994877a6d6154473a2e2114070000000005111c27333e4a55606c77838e9aa59a8f84786c61554a3f33282f3a45515c68737f8a96a19f94897d72665b5044392d22170b00000000000000000000000000000000000000000000000000000000000000000000020b141c242b32383c40434546464543413d39332e28231c1c2630383f43464646464645413c342b21170c0100000000000000000000000000000000000000000000000000000000000000000000000000000000010a131d262f38414b545d666f787979797979797979797165584b3f3225190c000000000000000000000000000000000000000000000000000000000916222f3b47535e676c6c6c6c6c6c6c6c6960554a404c58626a6c6c6c6c6c6c6c6b645a4f43372b1e12050000000000000000000000000000061019222b343e464d5253504b433a3128212a333c444c5153514c453c332a21170e040000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1720272e32353636363635322e2720170e04000000000000000000000000000000000000000000000000000003070a0d0f1113141415151413121015222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000916222f3b4854616d7986929eaba99c9084786b5f53473c30252222222222222222232f3b46515b626563605c5955524e4b453d342b2015090000000a16232f3c4855616e7a86939fabaa9d9185786c6054473b3024190f0c0c0d121c2834404c5864707d8996a2afa79a8e8275695c5043372a1e11050013202c3946535f6c7986929faca89b8f8275685c4f4236291c100f121b25303c4854606c7885919daab0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0acac9f9285786b5f5245382c1f120500000000000b1724313e4a5764717d8a97a4b1a79a8e8174675a4d4134271a0e0000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000815222e3b4855616e7b8894a1a6998c807366594c40333946535f6c7986929fa89b8e8275685b4e4235281c0f0200000a141d262e34383b3b3b3b3b3b3b3b3b393530353a3e41434546464544423f3c362e261c120700000000000000060f19232c343d444c52585e63676b6f71747577787979797978777674726f6c68645f5a544d463e362e241b120800000000000013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a094877a6d6154473a2e21140700000000000b16222d38444f5b66727d89949fa095897d72665b4f44392d343f4b56626d7984909ba59a8e83776c61554a3f33281c11060000000000000000000000000000000000000000000000000000000000000000000000020a121a20262c303437383939383734312d28231d1711141e262d333739393939393835302a22191005000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b141d262f39424b545d666c6c6c6c6c6c6c6c6c6c685f54483c3024170b0000000000000000000000000000000000000000000000000000000007131f2b37424c555c5f5f5f5f5f5f5f5f5d574e443b4650595e5f5f5f5f5f5f5f5f5a52493e33271b0f02000000000000000000000000000000071019222c343c424546443f3931281f18212a323a40444645413a332a21180f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16202932393e4242424242423e39322920160b000000000000000000000000000000000000000000000000050a0f1316191c1e1f2021212121201f1d1b222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000b1824313e4a5763707c8995a2aea69a8d8174685c4f43372f2f2f2f2f2f2f2f2f2f2f2f353f495157595754504d4946423f3a332b22190f060000000c1825323e4b5764707d8996a2afa79b8e8275695c5044372b1f13070000010c1723303c4855616d7a86939facaa9d9184786b5f5246392c2013070013202c3946535f6c798693a0aca89b8e8174685b4e4135281b0f0209141f2b3744505c6975828e9ba7b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0acac9f9285786b5f5245382c1f120500000000000b1724313e4a5764717d8a97a4b1a79a8e8174675a4d4134271a0e0000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000815222e3b4855616e7b8895a2a69a8d807366594d40333946535f6c798693a0a89c8f8275685b4f4235281c0f020000020b141c23282c2e2e2e2e2e2e2e2e2e2d2924292e31343738393939383633302b241c140a00000000000000000007101a222b323a41474d52575b5f626567696a6b6c6c6c6c6b6a69676563605c58534e48423b342c241b12090000000000000013202c3946535f6c7986939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393877a6d6154473a2e211407000000000005111c27333e4a55606c77838e9aa59a8f83786c61554a3e333a45515c68737e8a96a19f94897d72665b4f44392d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000080f151b2024282a2c2c2c2c2a2825211c17120c060c141c22272b2c2c2c2c2c2c29251f1810070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141d263039424b545c5f5f5f5f5f5f5f5f5f5f5d564d43382c20140800000000000000000000000000000000000000000000000000000000030e1a25303a434b505353535353535353514c453c353e474e5253535353535353524f4940372c21160a000000000000000000000000000000000007101a222a3136383938342e271f160f1820292f3538393835302921180f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000006111d27323b444a4e4f4f4f4f4e4a443b32271d1106000000000000000000000000000000000000000000050b11161b1f2326282a2c2d2e2e2e2e2d2b2a27252e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000d1a2633404c5965727e8b98a4b0a4978b7e7165584c403c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3f464a4c4b4744403d3c3c3c3a36302921180e0300000e1a2733404d5966727f8c98a5b1a5988c7f73665a4d4134281b0f030000000714202c3945525e6b7784919daaaca093877a6d6154483b2e2215080013202c3946535f6c798693a0aca79a8e8174675a4e4134271b0e01030f1b2834414d5a6673808c99a6b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0acac9f9285786b5f5245382c1f120600000000000b1824313e4b5764717e8b97a4b1a79a8d8174675a4d4134271a0e0000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000915222f3c4855626f7b8895a2a79a8d8173675a4d40343a4653606d798693a0a99c8f8275695c4f4236291c0f03000000020a11181c20212222222222222222201d191e2225282a2b2c2c2c2b2927231f19120a020000000000000000000007101921282f363c42474b4f5356585a5c5d5e5f5f5f5f5f5e5d5b595653504c48433d37312a221a1209000000000000000013202c3946535f6c7986868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686867a6d6154473a2e2114070000000000000b16222d38444f5b66727d89949fa094897d72665b4f44383f4b56626d7884909ba59a8e83776c61554a3e33281c1106000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f14181b1d1f20201f1e1b1815100b060100020a11171b1e20202020201f1d19140e0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141e273039424a5053535353535353535353514c443b31261b1004000000000000000000000000000000000000000000000000000000000009141e2831394044464646464646464645413b332c353c42454646464646464646433e372e251b10050000000000000000000000000000000000000710181f25292c2c2b28231d150d060e171e24292b2c2b29241e170f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16222e39444d555b5c5c5c5c5b554d44392e22160a00000000000000000000000000000000000000020a10171c22272b2f323537393a3b3b3b3a39383634312e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000f1b2835414e5b6774818d9aa6aea295897c6f6356494848484848484848484848484848484848484848484848484848484846423b332a1f150a00000f1c2935424e5b6874818e9aa7b0a3968a7d7064574b3e3225190c0000000004111d2a3643505c6975828f9ba8aea295897c6f6356493d3023170a0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000c1925323f4b5865717e8b98a4b0a3968a7d7063564a3d3023170a00131f2c3946525f6c7986929facac9f9286796c5f5346392c20130600000000000b1825323e4b5865717e8b98a4b1a69a8d8073675a4d4034271a0d0000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000916222f3c4955626f7c8995a2a79a8d8174675a4d41343a4753606d7a8793a0a99c8f8276695c4f4336291c10030000000000060c101315151515151515151513110d1216191b1d1f20201f1e1d1a17130e0800000000000000000000000000070f161e242b30363b3f4346494c4e505152525353525251504e4c4a4744403c37322c261f181008000000000000000000131f2c3946525f6b767979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979776c6053473a2d21140700000000000005111c27333e4a55606c77838e9aa59a8e83776c6055493e45505c67737e8a95a19f94897d72665b4f44392d22160b00000000000000000000000000000000000000000000000000000000000000000000000000000000000004080c0f1112131312110f0c0904000000000000060b0f12131313131312100d0803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c151e2730383f444646464646464646464644403a32291f150a000000000000000000000000000000000000000000000000000000000000020c161f282f3438393939393939393938353029232b313639393939393939393937322c251c13090000000000000000000000000000000000000000060e14191d1f201e1c17120b0300050c13181c1f201f1c18130d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a26333f4a555f6769696969675f554a3f33261a0d010000000000000000000000000000000000050d141b22282d33373b3e4144454747484847464543403d3a3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00101d2a3643505c6976828f9ca8ada094877a6e61555555555555555555555555555555555555555555555555555555555555534d453b31261b0f0300111d2a3743505d6976838f9ca9aea195887b6f6255493c3023160a00000000010f1b2835414e5b6774818d9aa7b0a4978a7d7164574b3e3125180b0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1724313e4a5764707d8a97a4b0a3968a7d7063564a3d3023170a00121f2c3845525e6b7885919eabaca09386796d6053473a2d21140700000000000c1926323f4c5965727e8c98a5b2a6998c807366594c4033261a0d0000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00091623303c4956626f7c8996a2a79a8e8174675a4e41343a4754606d7a8794a0a99c908376695c5043362a1d100300000000000000040708080808080808080807040105090c0f111213131312100e0b0703000000000000000000000000000000050c13191f252a2f33373a3d3f414344454646464645444342403d3b3734302b26211b140d0600000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b655b5044382b1f1206000000000000000b16222d38444f5b66727d89949f9f94887d71665a4f434a56616d78848f9ba59a8e83776c61554a3e33281c11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151e272e33373939393939393939393938342f2820170d0300000000000000000000000000000000000000000000000000000000000000040d161d23282b2c2c2c2c2c2c2c2c2c29241e1920262a2c2c2c2c2c2c2c2c2c2a27211b130a0100000000000000000000000000000000000000000003090d111213120f0b060000000001070c10121312100c08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2935424e5b67717575757571675b4e4235291c0f0300000000000000000000000000000000060f171f262d33393e43474b4e5052535454545453514f4d4a46424855616e7b8895a2aea5988b7e7165584b3e3225180b00111e2b3744515d6a7784909daaaca09386796d626262626262626262626262626262626262626262626262626262626262625e574d43372b1f130700121e2b3844515e6b7784919daaada094877a6d6154473b2e21150800000000000d1a2733404d596673808c99a6b2a5988b7e7265594c3f3226190c0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00111e2b3744515d6a7784909daaada194877b6e6154483b2e22150800000000000d1a2734404d5a6673808c99a6b1a5988b7e7265584b3f3225190c0000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000a1623303c4956636f7c8996a3a89b8e8174675b4e41343a4754616d7a8794a1aa9d908376695d5043362a1d10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080e14191e23272b2e303335363738393939393838363533312e2b28241f1a150f090300000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5b53493f33281c0f030000000000000005111c27333e4a55606c77838e9aa5998e82776b605449505b67727e8995a09f94897d72665b4f44392d22160b00000000000000000000000000000000000000000000000000030507070707070707070707060400000000000000000000000000000000000000000000000000000000000000000000000306070707070707070707070503000000000000000000000000000000000000000000000000000000000000000000000000000000030c151c23282b2c2c2c2c2c2c2c2c2c2c2b28241e160e05000000000000000000000000000000000000000000000000000000000000000000040b12181c1f20202020202020201f1c19130e151a1d1f202020202020201f1e1b161009010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c69768282828276695c4f4336291c1003000000000000000000000000000000060f18212930383e444a4f53575a5d5f60616161605f5e5c5956524d4855616e7b8895a2aea5988b7e7165584b3e3225180b00121f2c3845525e6b7885919eabac9f9285796f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6e695f54483b2f23160900121f2c3845525f6b7885929eabaca09386796c6053463a2d20130700000000000c1925323f4c5865727e8b98a5b2a6998c807366594d4033261a0d0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00101d293643505c6975828f9ca8afa295897c6f6356493d3024170a00000000020f1c2835424e5b6874818e9aa7b0a3978a7d7064574a3e3124180b0000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000a1723303d4a5663707d8a96a3a89b8e8275685b4e42353b4854616e7b8894a1aa9d9084776a5d5044372a1d110400000000000001060a0c0e0e0e0e0e0e0e0d0c090400000000000000000000000000000000000000000000000000000000000000000003090e13171b1e212426282a2b2c2c2c2c2c2c2b2a282724221f1b18130f0a04000000000000000000000000000a16212c3740484f525353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353524f4941372d22170b0000000000000000000b16222d38444f5b66727d89949f9f93887c71655a4e56616d78848f9aa59a8e83776c60554a3e33281c11050000000000000000000000000000000000000000000000050b0f121314141414141414141413100c0701000000000000000000000000000000000000000000000000000000000000060c101214141414141414141414120f0b050000000000000000000000000000000000000000000000000000000000000000000000000000030a11171b1e202020202020202020201f1c18130c05000000000000000000000000000000000000000000000000000000000000000000000001070c1012131313131313131312100d0803090e11131313131313131313110e0a0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003080c0f1111111111100e0a05000000000000000000000000000000000000000000000000000000000000101c2936434f5c6976838f8f8376695c4f4336291c10030000000000000000000000000000050f18212a333b424950555b5f6367696b6d6d6e6e6d6c6b6866625e595455616e7b8895a2aea5988b7e7165584b3e3225180b00131f2c3946525f6c7985929facac9f92857b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7063574a3d3124170a0013202c3946535f6c7986929facac9f9286796c5f5246392c1f130600000000000b1825313e4b5864717e8b98a4b1a69a8d8173675a4d4034271a0d0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000f1b2835414e5b6774818d9aa6b0a4978a7e7164584b3f3226190d0100000005111e2a3744505d6976838f9ca9aea195887b6f6256493c3023160a0000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000a1724303d4a5763707d8a96a3a89b8e8275685b4f42353b4855616e7b8894a1aa9d9084776a5d5144372a1e11040000000000050c1216191a1a1a1a1a1a1a1a1815100a0300000000000000000000000000000000000000000000000000000000000000000002070b0f1215171a1b1d1e1f1f20201f1f1e1d1c1a1815120f0b070300000000000000000000000000000005101a252e373e4346464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646433e372f261b110600000000000000000005111c27333e4a55606c77838e9aa4998d82766b5f545b67727e8995a09f94897d72665b4f44382d22160b00000000000000000000000000000000000000000000010910161b1e202020202020202020201f1d18130c04000000000000000000000000000000000000000000000000000000030a11171c1f202020202020202020201f1b17110a020000000000000000000000000000000000000000000000000000000000000000000000000000060b0f121313131313131313131312100c0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e14191c1d1e1e1e1e1d1a16110a0300000000000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000000030e17212a333c454c545b61666b6f737678797a7b7b7a797775726e6a655f58616e7b8895a2aea5988b7e7165584b3e3225180b0013202c3946535f6c7986939facaca0948a88888888888888888888888888888888888888888888888888888888888888887d7164574a3e3124170b0013202c3946535f6c798693a0acac9f9285786b5f5245382c1f120500000000000b1824313e4b5764717d8a97a4b1a79a8e8174675a4d4134271a0e0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000d1a2633404c5965727e8b98a4b1a6998c8073675a4e4235291d10040000000814212d3946525f6b7885919eaaac9f93867a6d6054473b2e2115080000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000b1724313e4a5764707d8a97a4a89c8f8275685c4f42363c4855626e7b8895a2aa9e9184776a5e5144382b1e1105000000000710171d2225272727272727272725211b150d0400000000000000000000000000000000000000000000000000000000000000000000000205080b0d0f101112131313131212100f0d0b0906030000000000000000000000000000000000000009131c252c32373939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393937332d251d140a00000000000000000000000b16222d38444f5b66727d89949f9e93887c706559616c78838f9aa59a8e83776c60554a3e33271c1105000000000000000000000000000000000000000000010a131b22272b2d2d2d2d2d2d2d2d2d2d2c29241e160e0400000000000000000000000000000000000000000000000000030c151c23282b2d2d2d2d2d2d2d2d2d2d2b27221b140b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040709090909090909080501000105080909090909090907040000000000000000000000000000000911191f25282a2a2a2a2a2926221c150c03000000000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000000b151f29333c454e575e656c72777c80828586878887878684817e7a76706a63616e7b8895a2aea5988b7e7165584b3e3225180b0013202c3946535f6c798693a0acb1a69c96959595959595959595959595959595959595959595959595959595959595958a7d7164574a3e3124170b0013202c3946535f6c798693a0acac9f9285786b5f5245382c1f120500000000000b1724313e4a5764717d8a97a4b1a79a8e8174675a4d4134271a0e0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000b1824313d4a56636f7c8995a1aea89b8f83766a5d5145392d21150a0605060c1824303d4955626e7a8793a0aca99d9184776b5e5245392c2013060000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000b1724313e4a5764717d8a97a4a99c8f8275695c4f42363c4855626f7b8895a2ab9e9184776b5e5144382b1e110500000007101922282e323434343434343433312c261f160d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a27221b130b02000000000000000000000005111c27333e4a55606c77838e9aa4998d82766b5f66727d8994a09f94897d72665b4f44382d22160b0000000000000000000000000000000000000000000009131c252d33373a3a3a3a3a3a3a3a3a3a38352f2820160d020000000000000000000000000000000000000000000000000b151e262e34383a3a3a3a3a3a3a3a3a3a37332d251d1309000000000000000004080b0c0d0d0d0d0d0d0d0c0b0905000000000000000000000000000000000000000000000002070a0c0d0d0d0d0d0d0d0d0d0d0c0b080400000000000000000000000000000000000000060b0f1213131313131313131312100d08020000000000000000000000000000000000000000000000000000000000000000060c11141616161616161614110d070d11141616161616161614100c0600000000000000000000000007111b232a3035373737373736322d261e160c020000000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000007121d27313b454e57606870777d83888c8f91939494949392908e8b86817b746d656e7b8895a1aea5988b7e7165584b3e3225180b0013202c3946535f6c798693a0acb7aea7a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2978a7d7064574a3e3124170b0013202c3946535f6c798693a0acac9f9285786b5f5245382c1f120500000000000b1824313e4b5764717d8a97a4b1a79a8e8174675a4d4134271a0e0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000915222e3b4754606d7986929eaaab9e9286796d6155493d31261c15131213151e2935404c5965717d8a96a3afa69a8e8175685c4f43362a1d11040000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000b1824313e4b5764717e8b98a4a99c908376695c4f43363c4955626f7c8996a2ab9e9285786b5e5145382b1e12050000030e19222b333a3e41414141414141403d3831281f150b0000000000000002070b0e101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100f0e0a06000000000000000000000000010910161a1e1f2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201e1b16100901000000000000000000000000000b16222d38444f5b66727d89949f9e93877b70656c77838f9aa5998e83776c60554a3e33271c110500000000000000000000000000000000000000000005101b252e373e434647474747474747474745403a32281e1409000000000000000000000000000000000000000000000007121d2730383f4447474747474747474746443e372f251b10050000000000030a1014171919191919191919191815110b040000000000000000000000000000000000000001080e13161919191919191919191919191815100a04000000000000000000000000000000030b12171b1e1f1f1f1f1f1f1f1f1f1f1c19140d060000000000000000000000000000000000000000000000000000000000010a11181d2022232323232323211d1812181d2123232323232322201c17110901000000000000000000040f19232d353c414444444444423e3830281e13090000000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000000000020e19232e39434d57616a727a82898f94989b9ea0a1a1a1a09f9d9a97928d867f776e6e7b8894a1aea5988b7e7165584b3e3225180b00131f2c3946525f6c7986929facb4aaa19b9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9da4aeafa3968a7d7063574a3d3024170a0013202c3946535f6c7986929facac9f9286796c5f5246392c1f130600000000000b1825323e4b5864717e8b98a4b1a69a8d8173675a4d4034271a0d0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0006131f2c3845515d6a76828e9ba7aea296897d71655a4e43382e2622201f2022262f3a45515d6975818d99a6afa3978a7e7265594d4034271b0e020000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000b1825323e4b5865717e8b98a4a99c908376695d5043363c4956636f7c8996a2ab9e9285786b5f5245382c1f120500000915202b343d454a4d4d4d4d4d4d4d4d49433a31271c11060000000000060d13171b1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1a17120c04000000000000000000000000050a0e1113131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313110f0a0500000000000000000000000000000005111c27333e4a55606c77838e9aa4988d81766a727d89949f9f94887d71665b4f44382d22160b000000000000000000000000000000000000000000000a16212c3740494f53535353535353535353514b443a30251a0e03000000000000000000000000000000000000000000000c18232e39424a5053535353535353535353504941372d22160b00000000050e151b202426262626262626262624211c160f070000000000000000000000000000000000020b12191f2325262626262626262626262624211c150e0600000000000000000000000000040d151d23282b2c2c2c2c2c2c2c2c2c2b29251f181007000000000000000000000000000000000000000000000000000000010b131c23282d2f30303030302f2d29241d24292d2f30303030302f2d28221b130a0000000000000000000915202b353f474d50515151514f4a423a30251a0e0300000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000008141f2a35404b555f69737c848c949a9fa4a8a7a3a09e9c9c9c9d9fa19e98918981776e7a8794a1aea5988b7e7165584b3e3225180b00121f2c3845525f6b7885929eabafa3988f8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e929ca8afa296897c6f6356493c3023160900121f2c3845525f6b7885929eabaca09386796d6053463a2d20130700000000000c1925323f4c5865727e8b98a5b2a6998c807366594d4033261a0d0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0004101c2935414e5a66727e8a96a2aea69a8e82766a5f54494037322e2c2c2c2e3238414c57626d7985919da9ab9f93877b6e62564a3d3125180c000000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000c1825323f4b5865727e8b98a5aa9d9083766a5d5043373d495663707c8996a3ac9f9285786c5f5245392c1f120600020e1a26313c464f565a5a5a5a5a5a5a59544c43392e22160a000000000810181e2327292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292926221d160e060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16222d38444f5b66727d89949f9e92877b7077838e9aa5998e83776c6055493e33271c1105000000000000000000000000000000000000000000000e1a26323e49525b5f6060606060606060605d564c42372b1f130700000000000000000000000000000000000000000005111d2934404a545c606060606060606060605b53493e33271b0f030000050e1720272c30333333333333333333312d2721191006000000000000000000000000000000010b141d242a2f323333333333333333333333312d2720180f050000000000000000000000020c161f272e34373939393939393939393835302a22190f05000000000000000000000000000000000000000000000000000009131d252d34393c3c3c3c3c3c3c39352e272f353a3c3c3c3c3c3c3c39342d251c120800000000000000000e1a26313d4751585d5d5d5d5d5b544c41362b1f130700000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000020e1925303b46515c67717b858e969ea5aba7a09b979391908f8f909295989d9b938980767a8794a0ada5988b7e7165584b3e3225180b00111e2b3844515e6a7784919daaada09387818181818181818181818181818181818181818181818181818c99a6aea194887b6e6155483b2f22150900121e2b3844515e6b7784919daaada094877a6d6154473b2e21150800000000000d1a2633404d596673808c99a6b2a5988c7e7265594c3f3226190c0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00000d1925323e4a56626e7a86929da9aa9e93877c70665b5249423e3b3938393b3e434a535d68737e8a96a2ada69a8f83776a5e52463a2e211509000000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000c1925323f4c5865727e8c98a5aa9d9084776a5d5044373d4a5663707d8a96a3ac9f9286796c5f5246392c1f13060005121e2a37424e586166676767676767655e554a3f33261a0e01000007111a22292f333636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363635332e2820180e0500000000000002070b0e101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100f0e0a06000000000000000000000000000000000000000000000005111c27333e4a55606c77838e9aa3988c81757d88949f9f94887d71665b4f44382d22160b0000000000000000000000000000000000000000000000111e2a36434f5a646c6d6d6d6d6d6d6d6d6d685e53473b2f24180c0000000000000000000000000000000000000000000a16222d3945515c666c6d6d6d6d6d6d6d6d6c655b4f43372b1e120500010c17202931383d3f404040404040403f3d39322b22180e03000000000000000000000000000009131d262f363b3f404040404040404040403f3d38322a21170d020000000000000000000008131e2831393f4445464646464646464645413b342b21170c01000000000000000000000000000000000000000000000000040f1a252f373f45484949494949494640393039404649494949494948453f372e241a0f0300000000000000111d2a36424e5963696a6a6a6a665d53473b2f23160a00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000000007131f2a36414d58636e78838d97a0a8aca49c958f8b87848382838486888c91979b92887e7a8693a0ada5988b7e7165584b3e3225180b00101d2a3643505c6976838f9ca9ada094877a7474747474747474747474747474747474747474747474808d9aa6aca093867a6d6054473a2e21140700111d2a3743505d6976838f9ca9aea295887b6f6255493c3023160a00000000010f1b2835414e5a6774818d9aa7b0a4978a7d7164574b3e3125180b0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00000915222e3a46525e6975818c98a3aea4988d82776d645b544e4a47464546474a4e545c656f7984909ba6aca1958a7e72665a4e42362a1e1205000000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000c1926323f4c5965727f8c99a6aa9e9184776a5d5144373d4a5763707d8a97a4aca09386796c5f5346392c201306000714212d3a46535f6a7374747474747470675b4f4236291d100300030e19232c343b4042434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343423f39322a20160c0100000000060d13171b1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1a17120c04000000000000000000000000000000000000000000000b16222d38444f5b66727d89949f9d92867b828e99a5998e83776c6055493e33271c10050000000000000000000000000000000000000000000000121f2c3945525f6b767a7a7a7a7a7a7a7a796f64584c4034281c110500000000000000000000000000000000000000030e1a26323e4a56626d787a7a7a7a7a7a7a7a776c5f5346392d2013060007131e29323b43494c4c4c4c4c4c4c4c4c49443c342a1f140900000000000000000000000000050f1a252f3840474b4c4c4c4c4c4c4c4c4c4c4c49433c33291e1308000000000000000000020e1925303a434a50525252525252525252514d463d33291d12060000000000000000000000000000000000000000000000000915202c3641495155565656565655514a4238424b5155565656565655504940362b20140800000000000000131f2c3945525e6a75777777776f64574b3e3225180b00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000c18242f3b47525e6974808a959fa9ada39a928a847e7a7876757677797c80858c939a8f857a8693a0ada5988b7e7165584b3e3225180b000f1c2835424e5b6874818d9aa7aea195887b6f67676767676767676767676767676767676767676875828e9ba8aa9e9185786b5f5245392c1f1306000f1c2935424e5b6874818e9aa7b0a3968a7d7064574b3e3225190c0000000004111d2a36434f5c6975828f9ba8afa295897c6f6356493d3023170a0013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000005111d2935414d5964707b87929da7a99e948980766d655f5a565452525254565a5f666e77818b96a1aca59b8f84796d61564a3e32261a0e02000000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000d192633404c596673808c99a6aa9e9184776b5e5144383e4a5764717d8a97a4aca09386796d6053463a2d201307000815222e3b4855616e7b818181818181776a5d5044372a1d1104000914202a353e464c4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4b443c32281d12060000000810181e2327292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292926221d160e0600000000000000000000000000000000000000000005111c27333e4a55606c77838e9aa3978c8188949f9f94887d71665b4f44382d22160b000000000000000000000000000000000000000000000000121f2c3945525e6b7783878787878787878074685c5145392d2115090000000000000000000000000000000000000007131f2b37434e5a66727e8787878787878783776b5f5346392d201306000c18242f3a444d54585959595959595959554e463c31251a0e020000000000000000000000010b16212c37414a52575959595959595959595959554e453b3024190d01000000000000000006121e2a36414c555c5f5f5f5f5f5f5f5f5f5d584f453a2e23170a0000000000000000000000000000000000000000000000000d1925313d48535b616363636363625c544a3f4a545d626363636363615b52473c3125180c0000000000000013202c3946535f6c798484847e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000004101c2834404c58636f7a86919ca7afa59b91888079736e6b6969696a6c70747a818992968b808693a0aca5988b7e7165584b3e3225180b000d1a2733404c5966727e8b98a4afa3968a7d70645a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5e6b7784909daaa89c8f8376695d5044372a1e1104000e1a2734404d5966737f8c98a5b1a5988c7f73665a4d4134281b0f030000000713202c3945525e6b7784919daaada094877a6e6154483b2f2215090013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0000010d1925313c48535f6a75808b96a0aaa59b91887f77706a6663605f5f5f6063666b71788089939da8a99e94897e73685c5145392d22160a00000000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000d1a2633404d596673808c99a6ab9e9184776b5e5145383e4b5764717d8a97a4ada09386796d6053473a2d201407000915222f3c4855626f7b888e8e8e8e84776a5e5144382b1e1105000d1925313c4650575c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5b564e443a2e23170b000007111a22292f333636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363635332e2820180e050000000000000000000000000000000000000000000b16222d38444f5b66727d89949f9d928a8e99a5998e82776c6055493e33271c1005000000000000000000000000000000000000000000000000111d2a36434e5a66727e8a94949494949185796d6155493e32261a0e020000000000000000000000000000000000000c18242f3b47535f6b77838f94949494948a7e73675b4f43372b1e120500101c2935404c565f65666666666666666560584d42362a1e1105000000000000000000000007121d28333d48535c63666666666666666666666560574c4135291d100400000000000000000915222e3b47535e676c6c6c6c6c6c6c6c6c6961564b3f33261a0d0100000000000000000000000000000000000000000000000f1c2935414e59646d6f6f6f6f6f6e665b4f434f5b666e6f6f6f6f6f6d64594d4134281b0f0200000000000013202c3946535f6c7986918c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000000814202c3945515d6874808c97a2ada99e93897f766e67625f5d5c5c5e6064696f77808992928787939faca5988b7e7165584b3e3225180b000b1825313e4a5763707c8995a2aea5988c8073675a4e4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d55616d7a86939faca6998d8074675b4e4235281c0f03000c1825323e4b5764707d8996a2afa79b8e8275695c5044372b1f13080201020b17232f3b4854616d7a86939facaa9e9185786c5f5346392d2014070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0000000814202b37424e59646f79848e98a1aaa39a9189827b76726f6d6c6b6c6d6f72767c828a929ba5a9a0978d82776d62564b4034281d110500000000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000d1a2733404d596673808d9aa6ab9e9285786b5e5145383e4b5764717e8b98a4ada094877a6d6053473a2d21140700091623303c4956626f7c89969a9a9185786b5e5145382b1f120500111d2936424d5862686969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696760564b3f33271a0e00030e19232c343b4042434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343423f39322a20160c01000000000000000000000000000000000000000005111c27333e4a55606c77838e9aa09b9799a09f94887d71665a4f44382d22160b000000000000000000000000000000000000000000000000000e1a26323e4a55616d7985919ca0a0a095897d72665a4e42362a1f1307000000000000000000000000000000000005101c2834404c58646f7b87939fa0a09d91867a6e62564a3f33271b0f0200121f2b3844515d687173737373737373726a5e52463a2d20140700000000000000000000030e19242f39444f5a646e7373737373737373737371695d5145382c1f130600000000000000000a1724313d4a56636f78797979797979797973675b4e4235281b0f020000000000000000000000000000000000000000000000101d2a3743505d6a767c7c7c7c7c776b5e5245525f6b787c7c7c7c7c75695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000000b1824303c4955616d7985919ca8aea3978c81776d645c5652504f505154585e656d76818b96919299a3afa5988b7e7165584b3e3225180b000916222f3b4854616d7986929eaba89b8f83766a5e5246414141414141414141414141414c5864717d8996a2aea2968a7d7164584c3f33261a0d01000a16232f3c4855616e7a87939facaa9d9185786c6054483c302419110f0e0f121c27333f4b5764707c8995a2aea79b8f8276695d5044372b1e12050013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000030f1a26313c47525d68727c868f98a1a9a39b938d87827e7b7a7978797a7c7e83878d949ca4a8a0978e857b70665b50453a2f23180c0000000000000000000000091623303c4956636f7c8996a3b0a4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000d1a2734404d5a6773818d9aa7ac9f9285786b5f5245383e4b5865717e8b98a5aea194877a6d6154473a2e211407000a1723303d4a5663707d8a96a39f9285786c5f5246392c1f130600121f2c3945525e6a7476767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767672675b4f4236291c10000914202a353e464c4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4b443c32281d12060000000000000000000000000000000000000000000b16222d38444f5b66727d89939393939393938e82776b6055493e33271c1005000000000000000000000000000000000000000000000000000a16212d3945515c6874808c98a3ada69a8e82766a5f53473b2f23170c00000000000000000000000000000000000915212d3945505c6874808c98a4ada4988d8175695d51463a2e22160a000013202c3946535f6c79808080808080807b6e6154483b2e211508000000000000000000000a15202a35404b56606b7680808080808080808080796d6053463a2d20130700000000000000000b1724313e4a5764717d868686868686868275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a778489898985786b5f5246525f6c79868989898376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000020f1b2734404c5965717d8995a1ada99d92867b70655b524b4643424344484c535b656f79848f9b9ea3abb2a5988b7e7165584b3e3225180b000713202c3845515d6a76828e9ba7ab9f92867a6e63574c40363434343434343434343a45515c6874818d99a5ab9f93877a6e6155493c3024170b00000714202d3946525e6b7783909ca8ada194887c7064584c41362b221e1c1b1c1e232d3844505b6774808c98a5b0a4988c7f73665a4e4135281c0f030013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000915202b36414b56606a747d868f979ea5a59e98938e8b888686858686888b8e93999fa6a49e968e857c73695f544a3f34291d12070000000000000000000000091623303c4956636f7c8996a3aea4978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000e1a2734414d5a6774818e9aa7ac9f9286796c5f5246393f4c5865727e8c98a5aea194887b6e6154483b2e211508000b1724313e4a5764707d8a97a49f9386796c5f5346392d2013060013202c3946535f6c7983838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838376695d5043362a1d10000d1925313c4650575c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5b564e443a2e23170b00000000000000000000000000000000000000000005111c27333e4a55606c778386868686868686867d71665a4f44382d21160b000000000000000000000000000000000000000000000000000005111d2834404c58636f7b87939faaab9f93877b6f63574c4034281c1004000000000000000000000000000000020e1a26313d4955616d7985919ca8aba094887c7064584d4135291d1206000013202c3946535f6c79868c8c8c8c8c887b6e6154483b2e21150800000000000000000006111c26313c47525c67727d888c8c8c8c8c8c8c8c86796d6053463a2d20130700000000000000000b1724313e4a5764717d8a92929292928f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a778490969285786b5f5246525f6c79869296908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000005121e2a3743505c6875818d99a6b1a5998d81756a5e5349403a373636383c4149535d68737e8a95a1adb4b2a5988b7e7165584b3e3225180b0004101d2935424e5a66727e8a96a2aea3978b7f73685d52483e352f2a2828292b3038414b56626d7985919da9a79b8f83766a5e5246392d211408000005111d2a36424f5b6773808c98a4b0a4988c8174695d52473d342e2a2828282a2e353f4955606c7884909ca8aca094887c6f63574b3e3225190d000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00000000030e19242f3a444e58626b747d858c939a9fa4a39f9a9795939292929395979b9fa4a49f99938c847c736a61574d42382d22170c010000000000000000000000091623303c4956636f7c8996a1a1a1978a7d7063574a3d3024170a00000013202c3946535f6c798693a0aaa79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3aaa3968a7d7063564a3d3023170a0013202c3946535f6c798693a0a1a19a8d8173675a4d4034271a0d000e1b2834414e5b6774818e9aa7ac9f9286796c5f5346393f4c5965727f8c98a5aea194887b6e6155483b2e221508000b1825313e4b5764717e8b97a4a093867a6d6053473a2d2114070013202c3946535f6c7986909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090908376695d5043362a1d1000111d2936424d5862686969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696969696760564b3f33271a0e000000000000000000000000000000000000000000000b16222d38444f5b6671797979797979797979766b6055493e32271c10050000000000000000000000000000000000000000000000000000000c18242f3b47535f6a76828e9aa6afa3978c8074685c5044382d21150900000000000000000000000000000007131e2a36424e5a66727d8995a1ada79b8f83776b6054483c3024190d01000013202c3946535f6c79869399999994887b6e6154483b2e2115080000000000000000020d18222d38434e58636e79848e999999999999999386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a979f9f9f9c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000814212d3a46535f6b7884919da9ada195897c7165594d42372e2a29292b3037414b56616d7985919ca9b5b2a5988b7e7165584b3e3225180b00010d1925323e4a56626e7a86929da9a79c9085796e645a5047403a37353435383c424a535d68737e8a95a1ada2968a7e72665a4e42362a1d11050000010e1a26333f4b57636f7b87939faba99d91857a6e64594f463f3a37353435373a3f47515b66717d8994a0aca89c9084786c6053473b2f22160a000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000008131d28323c465059626b737b82898e94989ca0a2a4a1a09f9f9fa0a1a4a29f9c98938e88817a726a61584f453b31261c1106000000000000000000000000091623303c4956636f7c8994949494948a7d7063574a3d3024170a00000013202c3946535f6c7986939d9d9d9a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a969d9d9d968a7d7063564a3d3023170a0013202c3946535f6c798693949494948d8173675a4d4034271a0d000e1b2835414e5b6774818e9ba8aca09386796c5f5346393f4c5965727f8c99a6aea295887b6e6155483b2f221508000c1825323f4b5865727e8b98a5a194877a6e6154473b2e2114080013202c3946535f6c7986939c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c908376695d5043362a1d1000121f2c3945525e6a7476767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767672675b4f4236291c100000000000000000000000000000000000000000000005111c27333e4a5560686c6c6c6c6c6c6c6c6c6b645a4f44382d21160b0000000000000000000000000000000000000000000000000000000007131f2b36424e5a66717d8995a1ada89c9084786d6155493d31251a0e0200000000000000000000000000000b17232f3b47535e6a76828e9aa6aea2968a7e72675b4f43372b20140800000013202c3946535f6c798693a0a6a194887b6e6154483b2e211508000000000000000009141e29343f4a545f6a75808b95a0a6a6a6a6a6a09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4aca89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000a1623303c4955626e7b8794a0acaa9e9285796d6054483c31251e1c1d1f252f3a45515c6874808c98a5b1b2a5988b7e7165584b3e3225180b00000916222e3a46525d6975818c98a3aca1968b80766c6259514b464342414244474d535c656f79848f9ba6a89d91867a6e62564a3e32261a0e010000000a17232f3b47535f6b77838e9aa5ada2968b80756b6158504a464342414243464b5159636d77838e99a5aea3978b8074685c4f43372b1f1306000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0000000000010c16202a343e475059616970777d83888c90939698999a9b9b9b9a99979593908c88837d76706860584f463d33291f140a00000000000000000000000000091623303c4956636f7c888888888888887d7063574a3d3024191006000013202c3946535f6c798690909090908e8174675a4d4134271a0e01000a1723303d4a5663707d8a90909090908a7d7063564a3d3023170a0013202c3946535f6c79868888888888888173675a4d4034271a0d000f1b2835424e5b6875828e9ba8ada09386796d6053463a404c596673808c99a6afa295887b6f6255483c2f221509000c1926333f4c5965727f8c99a5a194887b6e6155483b2f2215080013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09d908376695d5043362a1d100013202c3946535f6c7983838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838376695d5043362a1d1000000000000000000000000000000000000000000000000b16222d38444e575d5f5f5f5f5f5f5f5f5f5f5a52483e32271c100500000000000000000000000000000000000000000000000000000000020e1a26323d4955616d7884909ca8ada195897d71655a4e42362a1e12060303030303030303030303030304101c28343f4b57636f7b87939eaaa99d91857a6e62564a3e33271b0f0300000013202c3946535f6c798693a0aca194887b6e6154483b2e2115080000000000000005101a25303b46505b66717c87919ca7b2b3b3b3ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000c1825323e4b5764717d8a96a3afa89b8f8276695d5144382c20140f10131d2834404c5864707c8995a1aeb2a5988b7e7165584b3e3225180b000005111d2935414d5964707b86919ca7a79d92887e746b635c5752504e4e4f5154585e656e77818b96a1aca2978c8075695d52463a2e22160a0000000007131f2b37434f5a66727d89949faaa89c92877d736a625b5652504e4e4e5052565c636b747e89949faaa89d91867a6f63574b3f33271b0f03000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000040e18222c353e474f575e656c72777c808487898b8d8e8e8e8e8d8c8b898683807c77716b655e564e463d342b21170d03000000000000000000000000000916232f3c4956626f797b7b7b7b7b7b7b7a6f63564a3d342b22180d020013202c3946535f6c79848484848484848174675a4d4134271a0e06030b1723303d4a5663707d848484848484847d7063564a3d3023170a0013202c3946525f6c777b7b7b7b7b7b7b7b72665a4d4033271a0d000f1c2835424f5b6875828f9ca8ada094877a6d6053473a404d596673808d9aa6afa295897c6f6255493c2f221609000d1a2633404d596673808c99a6a295887b6f6255493c2f2216090013202c3946535f6c7986939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393908376695d5043362a1d100013202c3946535f6c7986909090909090909090909090909090909090909090909090909090909090909090909090909090909090909090908376695d5043362a1d10000000000000000000000000000000000000000000000005111c27323c454c51535353535353535353524f4840372c21160b0000000000000000000000000000000000000000000000000000000000000915212d3944505c6874808b97a3afa59a8e82766a5e52463b2f231710101010101010101010101010101015202c3844505c6874808b97a3afa4988c8175695d51453a2e22160a0000000013202c3946535f6c798693a0aca194887b6e6154483b2e211508000000000000010c16212c37424c57626d78828d98a3aeadacaeb4ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000e1a2733404d5966737f8c99a5b2a6998c8073675a4e4135281c1004030c18232f3c4854606d7986929fabb2a5988b7e7165584b3e3225180b0000010d1925303c48535e6a75808b95a0aaa49990867d756e68625f5c5b5b5b5d60646970778089939da7a59b90857a6f63584c4135291d120600000000030e1a26323e4a55616c77828d98a2aca3998f857c746d67625f5c5b5b5b5c5f62676d757d87909ba5aba1968b8075695e52463b2f23170b00000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0000000000000007101a232c353d454d545a61666b7074777a7d7e808181828181807e7c7a7774706b66605a534c453c342b22190f0500000000000000000000000000000815212e3a46525e686d6e6e6e6e6e6e6e6e685e534c463d34291e130700131f2c3945525e6a7477777777777777777165594d4033271f17100d151d25303c4955626d7677777777777777766d6255493c3023160900111e2b37434f5b656d6e6e6e6e6e6e6e6e6a61564a3e3225190c000f1c2936424f5c6975828f9ca8ada094877a6d6154473a404d5a6773808d9aa6afa296897c6f6356493c30231609000e1a2734404d5a6773818d9aa6a396897c6f6356493d3023160a0013202c3946535f6c7986868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868376695d5043362a1d100013202c3946535f6c7986939c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c908376695d5043362a1d100000000000000000000000000000000000000000000000000b16202a333a414546464646464646464646433e372e251b100500000000000000000000000000000000000000000000000000000000000005101c2834404b57636f7b87929eaaaa9e92877b6f63574b3f33271c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c25313d4955606c7884909ca8ab9f94887c7064584d4135291d11060000000013202c3946535f6c798693a0aca194887b6e6154483b2e21150800000000000008121d28333e48535e69747e89949faaa7a19fa3aaada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000f1c2835424e5b6874818e9aa7b0a4978a7e7164584b3f3226190d00000713202c3845515d6a7683909ca9b2a5988b7e7165584b3e3225180b0000000814202b37424d58636e79848e98a1aaa29890878079736e6b696867686a6c70757a8189929ba5a79d93897e74695e52473c3024190d0100000000000a16212d39444f5b66717c86909aa4aba1978e867e78736e6b69686768696b6e73787f879099a2aca3998f847a6f63584d41362a1e120700000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0000000000000005111d28333d474e535555555b6064686b6e70727374747574747371706d6b67645f5a555555524c443b30251a0e02000000000000000000000000000005121e2a36414c565d6161616161616161615e5e5d574f463b2f24180c00111d2a36424e5962696a6a6a6a6a6a6a6a675f544940383129221a171f272f373e46515c656a6a6a6a6a6a6a6a6a655c5145392d211408000f1b27333e49535b6061616161616161615f584f45392e22160900101c2936434f5c6975828f9ca9aea194877a6d6154473b414d5a6773818d9aa7b0a396897c6f6356493d3023160a000e1b2834414e5b6774818e9aa7a3968a7d7063574a3d3024170a00131f2c3946525f6b7679797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797974685c4f4336291d100013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09d908376695d5043362a1d10000000000000000000000000000000000000000000000000040e1821293035383939393939393939393937322c251c130900000000000000000000000000000000000000000000000000000000000000000c17232f3b47525e6a76828d99a5afa3978b8073675c5044382c29292929292929292929292929292929292a36414d5965717d8995a1aca79b8f83776b5f54483c3024180d010000000013202c3946535f6c798693a0aca194887b6e6154483b2e2115080000000000040e19242f3a444f5a65707a85909ba6a89d959398a1ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000101d2a3643505c6976838f9ca9afa295897c6f6356493d3024170a000004101c2935424e5b6874818d9aa7b2a5988b7e7165584b3e3225180b000000030f1a25313c47525d67727c868f98a1a9a199918a847f7b787574747576797c80868c939ba4a69e958b81776d62574c41362a1f140800000000000005111c28333e49545f6a747e89929ba4a9a0989089837e7a787675747576787b7e848a9199a2aba39a91877d73685d52473c3025190e0200000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000915222e39454f585f6262626262615b5f616365666768686767666563615e5d6162626262625e564d42362b1f12060000000000000000000000000000020e1925303a434c51545454545c646a6b6b6b6b6961574c4034281b0f000e1a26313c4750585c5d5d5d6062626262626059524a433b342c2521293139414850585f6262626262615d5d5d5d5a534a3f34291d1105000b16222d38414a50545454545454545454534e463d33281d110500101d2936434f5c697683909ca9aea194887b6e6154483b414d5a6774818e9aa7b0a3968a7d7063564a3d3023170a000f1c2835424e5b6875828e9ba8a4978a7d7164574b3e3124180b00111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a62584c4034271b0e0013202c3946535f6c7986939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393908376695d5043362a1d1000000000000000000000000000000000000000000000000000060f171e24292b2c2c2c2c2c2c2c2c2c2c2a26211a130a01000000000000000000000000000000000000000000000000000000000000000007131e2a36424e5965717d8994a0aca89c9084786c6054493d363636363636363636363636363636363636363a46525e6a76828d99a5aea2968a7e72675b4f43372b201408000000000013202c3946535f6c798693a0aca194887b6e6154483b2e21150800000000000a15202b36404b56616c76818c97a2aca1968b86909ca9a09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000111e2b3744515d6a7784909daaaea194887b6e6155483b2f2215090000000d1a2733404c5966727f8c98a5b2a5988b7e7165584b3e3225180b000000000914202b36404b55606a747d868f979fa6a39c95908b8784828181828385888c91979ea5a49c948c83796f655b50463b3025190e03000000000000000b16222d38434e58626d768089929aa1a8a29b948f8a8784828281828284878b8f959ba3a8a19991887f756b61564c41362b1f14080000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e02000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000c1825313e4a56616a6f6f6f6f6f6d655e5757585a5b5b5b5b5a5958565860686e6f6f6f6f6e685e53473b2e22150900000000000000000000000000000008131e28313a4145474d565e666e767777777773685c5043362a1d10000915202b353e464c505059646c6f6f6f6f6f6b635c544d453e362f2c333b434b535a626a6f6f6f6f6f6d665b50504e4841382e23180c010005111b262f383f4447484848484848484846423c342b21170c0000101d2a3643505d697683909da9aea195887b6e6155483b414e5b6774818e9ba7b0a3978a7d7063574a3d3024170a000f1c2936424f5c6975828f9ca8a4988b7e7165584b3e3225180c000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5e5950463b3024180c0013202c3946535f6c7986868686868686868686868686868686868686868686868686868686868686868686868686868686868686868686868376695d5043362a1d100000000000000000000000000000000000000000000000000000050d13181c1f2020202020202020201f1e1a16100901000000000000000000000000000000000000000000000000000000000000000000020e1a25313d4955606c7884909ba7aca094897d7165594d4343434343434343434343434343434343434343434b57636e7a86929eaaa99d9185796e62564a3e32271b0f03000000000013202c3946535f6c798693a0aca194887b6e6154483b2e2115080000000006111c27323c47525d68727d88939ea8a59a8f85828f9ca9a09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000121f2c3845525e6b7885919eabada093867a6d6054473a2d2114070000000c1825323e4b5864717d8a97a4b0a5988b7e7165584b3e3225180b00000000030e19242f39444e58626b747d858d949ba1a6a19b9793918f8e8e8e909295989da2a59f99928b837a71675d53493f34291e1308000000000000000005101b26313c46515b646e77808890979da3a6a09b9793918f8e8e8e8f9193979ba0a6a39d968f877f766d63594f453a2f24190e030000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a110f0b0a1723303d4a5663707d8a96a3aea3968a7d7063564a3d3023170a000000000000000d1a2633404d5966727b7b7b7b7b7770686159524d4e4e4e4e4e4d535a626a727a7b7b7b7b7a6f6356493d3023160a0000000000000000000000000000050d151e262e363e474f575f6770788084848484776a5d5044372a1d1100030e19232c353b4043505d69767b7b7b7b7b756e665f5750484139363d454d555d646c747b7b7b7b7b786c5f5246423d372f261c1107000006111c263039404548494949494949494947433d352c22170c0100111d2a3744505d6a7783909daaaea295887b6f6255483c424e5b6875828e9ba8b0a4978a7d7164574a3e3124170b00101d293643505c697683909ca9a5988c7e7265594c3f3226190c000a16212c3740484f52535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353524e473e342a1f130700131f2c3946525f6b7679797979797979797979797979797979797979797979797979797979797979797979797979797979797979797979797974685c4f4336291d1000000000000000000000000000000000000000000000000000000002080c101213131313131313131313110e0a050000000000000000000000000000000000000000000000000000000000000000000000000915202c3844505c67737f8b97a2aea5998d82756a5e524f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f5b67737f8b97a3aea4988c8175695d51453a2e22160a00000000000013202c3946535f6c798693a0aca194887b6e6154483b2e211508000000020d18232e38434e59636e79848f9aa4a99e93897e83909da9a09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000131f2c3946525f6c7985929facac9f9386796c5f5346392d2013060000000a1724303d4a5663707d8996a3b0a5988b7e7165584b3e3225180b000000000008121d28323c465059626b737b838a90969b9fa3a3a09d9c9b9b9b9c9ea1a4a29e99948e88817970685f554c42372d22180d020000000000000000000a15202a353f49525c656e767e858c92979ca0a3a3a09d9c9b9b9b9c9da0a3a3a09c97928c857d756d645b51473d33281e1308000000000013202c3946535f6c798693a0a1a19a8e8174675a4d4134271e1d1b17121723303d4a5663707d8a96a1a1a1968a7d7063564a3d3023170a000000000000000d1a2633404d5966738088888888827a736b645c554d4642454d555d656c747c84888888887d7063564a3d3023170a00000000000000000000000000060f171f2730384048505961697179828a9191897e74695c5043362a1d10000007111a232a303744505d6a77848888888780787069615a524b4340484f575f676e767e8688888886796c5f534639312c251d140a0000000b17222e38424b51555555555555555555544f473e34291d120600111e2a3744515d6a7784909daaafa295887b6f6255493c424f5b6875828e9ba8b1a4978a7d7164574b3e3124180b00111d2a3744505d6a7683909daaa6998c807366594c4033261a0d0005101a252e373e434646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464645423c352c22180d0200111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a62584c4034271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c27333f4b57636e7a86929ea9aa9e92867a6e625c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c606c7884909ba7ab9f94887c7064584c4135291d110500000000000013202c3946535f6c798693a0aca194887b6e6154483b2e21150800000009141f2a343f4a55606a75808b96a0aba2978c827784919daaa09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986939facac9f9285786c5f5246392c1f13060000000916232f3c4955626f7c8995a2afa5988b7e7165584b3e3225180b0000000000010b16202a343e475059616971787e858a8f9396999b9d9e9f9f9f9e9d9b9895928e89837d766e675e564d433a30261b110600000000000000000000030e18232d37404a535c646c737a81878c9094979a9c9d9e9f9f9f9e9d9b999794908b86817a736b635b52493f362b21170c01000000000013202c3946535f6c798693949494948e8174675a4d41342b2b2a27231d1723303d4a5663707d8a94949494948a7d7063564a3d3023170a000000000000000c1926323f4c58646f79828c95948c857d756e665f5750484f575f676f767e868e95948a80766c6155483c2f23160900000000000000000000000008101821293139414a525a626b737b838b94958b81776d63584c4034281b0f0000000811181f2936434f5b67727b858f95918a827b736c645d554e4a5259616971788188909591877d73695e5145382c211a130b020000000f1b27333f4a545c616262626262626262605950453a2e22160a00111e2a3744515d6a7784919eaaaca296897c6f6255493c424f5b6875828f9ca8aca4988b7e7164574b3e3124180b00111e2b3744515d6a7784919daaa69a8d8073675a4d4034271a0d000009131c252c3237393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393936312b231a110600000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5e5950463b3024180c000000000000000000000000000000000000000000000106090b0b0a0804000000000000000000000000000000000000000000000206090a0a09060200000000000000000000000000000000000000000000000b17232e3a46525e6975818d99a5aea2978b7f7369696969696969696969696969696969696969696969696969707c8894a0aca69b8f83776b5f54483c3024180d0100000000000013202c3946535f6c798693a0aca194887b6e6154483b2e211508000005101b26303b46515b66717c87929ca7a69b90867b7885919eaba09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c798693a0acac9f9285786b5f5245382c1f12050000000915222f3c4855626f7b8895a2aea5988b7e7165584b3e3225180b000000000000040e18222c353e474f575f666d73797e83878a8d8f909292929291908e8c8986827d78726b645d554c433a31281e140900000000000000000000000007111b252e38414a525a62696f757b8084888b8d8f909292929291908f8d8a8784807a756f68615a514940372d241a0f0500000000000013202c3946535f6c79868888888888888174675a4d4138383837332e282023303d4a5663707d888888888888887d7063564a3d3023170a000000000000000b1723303c47535d67707a848d97968f8780787169625a535a6169717981889098958c82786e645a5045392d20140700000000000000000000010a121a222a333b434b535c646c747c858d95988e84796f655b51463b3024180c00000000070e1a27333f4b566069737d86909a948d857e766f676058545c636b737b838b929a93897f756b62584d4135291d10090100000000121e2b3744505b666e6f6f6f6f6f6f6f6f6b62564a3e3225190c00111e2b3844515e6b7784919ea0a0a096897c6f6356493c424f5c6975828f9ca0a0a0988b7e7165584b3e3225180b00121e2b3845515e6b7884919ea0a09a8e8174675a4e4134281b0e0000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a25201911080000000a16212c3740484f52535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353524e473e342a1f1307000000000000000000000000000000000000000000070d121517181714100b0400000000000000000000000000000000000001080e1215171715120e080200000000000000000000000000000000000000000006121e2a35414d5965707c8894a0aca79b8f84787676767676767676767676767676767676767676767676767676818d99a5ada2968a7e72665b4f43372b1f14080000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e21150800010c17222c37424d57626d78838e98a3aa9f948a7f747885929faca09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c798693a0acac9f9285786b5f5245382c1f12050000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000006101a232c353d454d555c62686d72777a7d80828485858685848382807d7976716c66605a524b433a31281f160c020000000000000000000000000009131c262f38404850575e646a6f74787b7e81828485858685858482817e7b77736f69645e574f483f372e251b12080000000000000013202c3946525f6c777b7b7b7b7b7b7b7b73665a4d44444444433f39322a23303d4956636f7a7b7b7b7b7b7b7b7a6f6356493d3023160a0000000000000007131f2b36414b555e68727b858f9899928a837b746c645d646b737b838b929a978d837a70665c52493e33281c1004000000000000000000030b131b242c343c454d555d656e767e868f979a90867c72675d53493f352a1f140800000000000b17232e39444e57616b747e88919b978f888179716a625e666e757d858d959c948b81776d635950463b3025190d01000000000013202c3946535f6c787c7c7c7c7c7c7c7c73665a4d4034271a0d00121e2b3845515e6b7885919393939393897d7063564a3d434f5c6976838f93939393938b7e7265584c3f3225190c00121f2c3945525f6b788592939393938e8275685b4e4235281b0f000000010910161a1e1f2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201f1d1a140e070000000005101a252e373e434646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464645423c352c22180d0200000000000000000000000000000000000000020a12191e22242423201c160f0700000000000000000000000000000000030c13191e222323221e1a140c040000000000000000000000000000000000000000010d1925313c4854606c77838f9ba7aca0948883838383838383838383838383838383838383838383838383838386929da9a99d9185796d62564a3e32271b0f030000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e2115080008131d28333e49535e69747e8a949faaa3988e83786d7986939faca09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c798693a0acac9f9285786b5f5245382c1f12050000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000008111a232b343b434a51575d62666a6e717475777878797878777573706d6965605b554f48413931281f160d040000000000000000000000000000010a141d262e363e454c53595e63686b6f727476777878797878777574716e6b67635e58524c453e362d251c13090000000000000000111e2b37434f5b656d6e6e6e6e6e6e6e6e6a61565151515151504b443c332b2e3a47535e686e6e6e6e6e6e6e6e6e685e53473a2e22150800000000000000030e1a252f39434c566069737c8690999c948d857e766f676e757d858d959d998f857b71685e544a40372d22170c000000000000000000020c151d252d363e464e575f676f77808890989d93897e746a60564b41372d23180e02000000000006121d28323c454f59626c768089939c9a928b837c746d68707880878f979f968c82786f655b51473e342a1f140800000000000013202c3946535f6c79868989898989898173675a4d4034271a0d00121f2c3845525e6b7885868686868686867d7063564a3d43505d697683868686868686867e7265584c3f3226190c0013202c3946535f6c79868686868686868275685c4f4236291c0f0000000000050a0e111313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313110d090300000000000009131c252c3237393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393936312b231a110600000000000000000000000000000000000000020b141c242a2e3131302c27211910070000000000000000000000000000040d151d242a2e30302e2a251e160d0400000000000000000000000000000000000000000814202c38434f5b67737e8a96a2aea59a929090909090909090909090909090909090909090909090909090909198a2aea4988c8175695d5145392e22160a000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e211508040f19242f3a454f5a65707b86909ba6a79c92877c716d7a8693a0ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c7986929facac9f9285796c5f5246392c1f13060000000915222f3c4855626f7b8895a2aea5988b7e7165584b3e3225180b000000000000000000081119222a31383f464c51565a5e626567696a6b6c6c6b6b6a686664615d59554f4a443d362f271f160d0400000000000000000000000000000000020b141c242c343b41484d53575c5f626567696a6b6c6c6b6b6a696765625f5b57524d47413a332c241c130a0100000000000000000f1b27333e49535b6061616161616161615f585b5e5e5e5e5e5c564e453d352d36424c565d6161616161616161615d564c42362a1e1206000000000000000008131d27313a444e57616a747e88919b9f9790888179727880878f979f9a91877d73695f564c42382e251b10060000000000000000000a141e272f373f485058606871798189929a9f958b81776c62584e443a2f251b1107000000000000000b16202a333d47505a646d77818a949d9d958e867e77727a828a9199a1988e847a70675d53493f352c22180d0200000000000013202c3946535f6c798693969696968d8173675a4d4034271a0d00121f2b3845515e6a767979797979797979786f63564a3d434f5c68747979797979797979797165584b3f3225190c00131f2c3946525f6b76797979797979797973685b4f4235291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a252019110800000000000000000000000000000000000000020b141d262e353a3d3e3c38322b22191007000000000000000000000000040d161f272f363a3d3d3b3630281f160d0400000000000000000000000000000000000000040f1b27333f4a56626e7a86919da9aca39e9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9da2aaab9f93887c7064584c4035291d1105000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e2115080b15202b36414b56616c77828c97a2aba0968b80756a6d7a8794a0ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000121f2c3945525f6b7885929eabac9f9386796c5f5346392d2013060000000916232f3c4956626f7c8995a2afa5988b7e7165584b3e3225180b000000000000000000000710181f272e343a40454a505b646a6b6b6b6b69625f5e5d5c5a5754514d49443f39322c241d150d04000000000000000000000000000000000000020a121a222930363c42474b545f676b6b6b6b6b665f5f5e5d5c5a5856534f4b46423c363029211a120a010000000000000000000b16222d38414a50545454545454545454535d666b6b6b6b6b6760574f473f36303a444c51545454545454545454514c443a30251a0e020000000000000000010b151f28323c454f59626c757f89929ca19a938b837c828a9299a19c92897e756b61574e443a30261d130900000000000000000006111c2630394149515a626a727a838b939ba2988d83796f655b50463c32281e13090000000000000000040e18212b353e48525b656f78828c959f9f989089817c848c949ca39990867c72685e554b41372d241a10060000000000000013202c3946535f6c798693a0a2a29a8d8173675a4d4034271a0d00101d2936424e59646b6c6c6c6c6c6c6c6c6c675d52473a404c58626a6c6c6c6c6c6c6c6c6c685f54483c3024170b00111e2a37434f5a646b6c6c6c6c6c6c6c6c6a62574b3f33271a0e000000000000000000000003070a0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b080400000000000000000000000000000000010910161a1e1f2020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201f1d1a140e0700000000000000000000000000000000000000020b141d262f3840464a4b49443d342b2219100700000000000000000000040d161f2831394146494a47413a31281f160d04000000000000000000000000000000000000000b16222e3a46515d6975818c98a4b0aeaaa9a8a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a7a9a9adb2a69a8f83776b5f53483c3024180c01000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e211508111c27323d47525d68737d88939ea9a49a8f84796e646e7b8894a1ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000121e2b3845515e6b7784919eaaada093877a6d6054473a2e2114070000000a1724303d4a5763707d8a96a3b0a5988b7e7165584b3e3225180b0000000000000000000000060e151c23292f353b4754606c7677777777746b635b534f4d4b4845413d38332d27211a130b030000000000000000000000000000000000000000000810171e252b31363f4c596571777777777770686058514f4e4c4946433f3b36302b251e171008000000000000000000000005111b262f383f4447484848484848484a57636f77777777777169615951484038323a414547484848484848484745413a32281e140900000000000000000000030d16202a333d47505a636d77818a949da49d958e878c949ca39e948a80766d63594f453c32281e140b010000000000000000000b17222e38424b535b636c747c848c959da49a90867c71675d53493f342a20160c02000000000000000000060f19232c364049535d667079838d96a0a29b938c878e969ea59b91877e746a60564c43392f251b1208000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000e1a26313d48525a5f5f5f5f5f5f5f5f5f5f5c554c41363b4650595e5f5f5f5f5f5f5f5f5f5d564d43382c201408000e1a26323e48525a5f5f5f5f5f5f5f5f5f5e5850453a2f23170b000000000000000000030a0f1417181919191919191919191919191919191919191919191919191919191919191919191919181714100b0400000000000000000000000000000000050a0e111313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313110d090300000000000000000000000000000000000000010a141d262f38414a525657554f463d342b221910070000000000000000040d161f28313a434b525656534c433a31281f160d0400000000000000000000000000000000000006121d2935414d5864707c88949fabb7aea49d99999999999999999999999999999999999999999999999ba2acb7ada2968a7e72665a4f43372b1f140800000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e21150d18232e39434e59646f79848f9aa5a89e93887d7268616e7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000111d2a3744505d6a7683909da9aea194887b6e6155483b2f2215090000000c1925323e4b5864717e8b97a4b1a5988b7e7165584b3e3225180b000000000000000000000000030a11181e242e3b4855616e7b848484847d756d655c544c443c3935312c27221c160f08010000000000000000000000000000000000000000000000060d141a202633404d59667380848484837a726a62595149413d3a37332f2a251f1a130c05000000000000000000000000000a141d262d34383a3b3b3b3b3b3b3e4b5865717e848484847b736b635a524a423a3135393b3b3b3b3b3b3b3b3b39352f2820160c020000000000000000000000040e18212b353e48515b656e78828b959fa7a09894979ea69f968c82786e655b51473d332a20160c02000000000000000000000f1b27333f4a545d656d757e868e969ea79d92887e746a5f554b41372d23180e04000000000000000000000007111a242e37414b545e67717b858e98a1a59e969498a0a79d938980756c62584e443b31271d130900000000000000000013202c3946535f6c798693a0a0a09a8d8173675a4d4034271a0d000915202b3640484e52535353535353535353504b433a2f343e474e52535353535353535353514c443b31261b1004000a16212c3740484f525353535353535353524d463e34291e12070000000000000000050d141b20232525252525252525252525252525252525252525252525252525252525252525252525252524211c160f0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131c262f38414a535c636460584f463d342b22191007000000000000040d161f28313a434c555d63635e564d433a31281f160c030000000000000000000000000000000000010d1924303c48545f6b77838f9aa6b2a99d928c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c909aa6b2a99d9185796d62564a3e32261b0f0300000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e2115141f2a353f4a55606b75808b96a1aba2978c81766c61626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000101c2936424f5c6875828e9ba8afa296897c7063564a3d3024170b0000010e1b2734404d596673808c99a5b2a5988b7e7165584b3e3225180b0000000000000000000000000000060d15212e3b4854616d78828c918f877f766e665e564e453d352d241c17110b04000000000000000000000000000000000000000000000000000002090f192633404c5965717c8690918c847c746b635b534a423a322a231e19140e08020000000000000000000000000000020b141c23282c2e2e2e2e2e2e313e4b5764707a858f918d857d756c645c544b433b332d2e2e2e2e2e2e2e2e2e2d29241e160e0400000000000000000000000000060f19232c363f49535c667079838d96a0a0a0a0a0a0a0978e847a70665c53493f352b22180e040000000000000000000000121e2b3744505b666f777f879098a0a09f958b81766c62584e44392f251b11060000000000000000000000000008121c252f39424c555f69727c868f99a0a0a0a0a0a09e958b81776d635a50463c32291f150b0100000000000000000013202c3946535f6c798693939393938d8173675a4d4034271a0d00040f1a242e363d4345464646464646464646443f3931282c353c424546464646464646464644403a32291f150a000005101a252e373e4346464646464646464645423c342c22170d0100000000000000040e171f262c3032323232323232323232323232323232323232323232323232323232323232323232323232302d27211910060000000000000000000000000106090b0b0a0804000000000000000000000000000000000000000000000206090a0a0906020000000000000000000000000000000003070a0c0c0c0c0c0c0c0c0c0c0b0804000000000000000009131c252e38414a535c656e716a61584f463d342b2219100700000000040d161f28313a434c555e676f6f685f554c433a31281e150b01000000000000000000000000000000000008141f2b37434f5b66727e8a96a1ada79a8d81808080808080808080808080808080808080808080808a97a4b0a4988c8175695d5145392d22160a0000000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e21151b26313b46515c67717c87929da7a59b90857a70655a626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000e1b2834414e5a6773808d99a6b0a4978b7e7165584c3f3226190d000005111d2a36434f5c6875818e9aa7b2a5988b7e7165584b3e3225180b0000000000000000000000000000000713202c3845515c66707a858f999189817870685f574f473f362e261e160d05000000000000000000000000000000000000000000000000000000000b1824313d4955606a747e8993968e867d756d655c544c443c332b231b130a0200000000000000000000000000000000020a11171c1f2121212121232f3c48535e69737d8791978f877e766e665d554d453d342c2421212121212121201d19130c0400000000000000000000000000000007111a242d37414a545e67717a848e939393939393938f857b72685e544a41372d2319100600000000000000000000000013202c3946535f6c7881899193939393938d83796f655a50463c32271d13090000000000000000000000000000000a131d27303a434d57606a747d8791939393939393938c83796f655b51483e342a20170d030000000000000000000013202c3946535f6c79868686868686868173675a4d4034271a0d000008121b242c32363939393939393939393938342e271f232b31363939393939393939393938342f2820170d0300000009131c252c32373939393939393939393836312a2219100600000000000000010c16202931373c3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3d38322b22180e0300000000000000000000070d121517181714100b04000001040608090a0b0b0a0a08070502000001080e1215171715120e0802000000000000000000000000030a0f1417181919191919191919181714100b04000000000005101a252e37404a535c656e777c736a61584f463d342b231a10070000040d161f28313a434c555e6770797a71675e554c433a30271d13080000000000000000000000000000000000030f1b27323e4a56626d7985919da8a99d9185797373737373737373737373737373737373737376828e9aa6ab9f93877b7064584c4035291d11050000000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e2117222d37424d58636d78838e99a3a99f94897e74695e55626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000d1926333f4c5865727e8b97a4b0a6998d8073675a4e4135291c1004020915212d3946525e6b7784909da9b2a5988b7e7165584b3e3225180b00000000000000000000000000000004101c28343f4a545e69737d87919b928a827a716961595148403830281f170f070000000000000000000000000000000000000000000000000000000915212d38434e58626c76818b95988f877f766e665e564e453d352d241c140c040000000000000000000000000000000000060c101314151515151f2b37424d57616b75808a9499908880786f675f574f463e362e251d151515151413110d0801000000000000000000000000000000000008121c252f38424c555f69727c8686868686868686867d736a60564c42382f251b11070000000000000000000000000013202c3946535f6c798686868686868686867b71675d53483e342a20160b01000000000000000000000000000000010b151e28323b454e58626b757e8686868686868686847a71675d53493f362c22180e050000000000000000000000131f2c3946525f6b7679797979797979797266594d4033271a0d00000009121a21262a2c2c2c2c2c2c2c2c2c2c2b28231d151920252a2c2c2c2c2c2c2c2c2c2c2b28241e160e0500000000010a131a21262a2c2c2c2c2c2c2c2c2c2c29251f181007000000000000000007121d28323b42484b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b49443d342a20150a0000000000000000020a12191e22242423201c160f070a0d1012141617171717161513110f0b080c13191e222323221e1a140c0400000000000000000000050d141b20232525252525252525252524201c160f06000000000a16212c374049525c656e7781867c736a61584f463d352c231a1007040d161f28313a434c555e67707982837970675e554c42392f24190d0200000000000000000000000000000000000a16222d3945515d6974808c98a4ada1958a7e7266666666666666666666666666666666666f7b87929eaaa69a8f83776b5f53473c3024180c000000000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e211e29333e49545f69747f8a959faaa3988d82776d625755626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000b1724313d4a56636f7c8895a1aea89b8f83766a5d5145382c20140e0e111a26313d4955626e7a87939facb2a5988b7e7165584b3e3225180b000000000000000000000000000000000c18232e38424c57616b75808a949c948c847b736b635a524a423a312921191008000000000000000000000000000000000000000000000000000004101c27323c46505a656f79838d98999189817870685f574f473f362e261e160d050000000000000000000000000000000000000406080808080f1a26303b454f59636e78828c969a928a817971696058504840372f271f170e080807040100000000000000000000000000000000000000000a131d26303a434d57606a73797979797979797979756b61584e443a30261d13090000000000000000000000000000131f2c3946525f6b7679797979797979797974695f554b41372c22180e040000000000000000000000000000000000030c162029333c465059636d7679797979797979797972685f554b41372e241a1006000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6960554a3d3125180c00000000080f151a1e1f2020202020202020201e1c17120b0e141a1d1f2020202020202020201f1c18130c05000000000000010910161a1e1f20202020202020201f1d19140e060000000000000000000c18242f3a444d5458585858585858585858585858585858585858585858585858585858585858585858585858554f463c31261b0f03000000000000020b141c242a2e3131302c27211912161a1c1f2123242424242322201e1b1814151d242a2e30302e2a251e160d040000000000000000040e171f262c3032323232323232323232302d27201810060000000e1a26323e48525b646e7780898f867c736a61584f473e352c231a100d161f28313a434c555e677079828b8c837970675e544b41352a1e1206000000000000000000000000000000000005111d2935404c58646f7b87939faba69a8e82766a5f595959595959595959595959595c67737f8b97a3ada1968a7e72665a4f43372b1f1308000000000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e21252f3a45505b65707b86919ba6a79c91867b71665b5055626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000915222e3b4754606d7986929fabab9e9286796d6155483d31251c1b1b1d232c37424e5a66727e8a96a2afb2a5988b7e7165584b3e3225180b0000000000000000000000000000000006111c26303b454f59636d78828c969e958d857d756c645c544b433b332b221a120900000000000000000000000000000000000000000000000000000b15202a343e49535d67717b86909a9b928a827a716961595148403830281f170f05000000000000000000000000000000000000000000000009141f29333d47515c66707a858f999c938b837b736a625a524941393129201810060000000000000000000000000000000000000000000000010b141e28313b454e58626a6c6c6c6c6c6c6c6c6c6b63594f463c32281e150b010000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6a62584d43392f251b100600000000000000000000000000000000000000040e17212a343e47515b646b6c6c6c6c6c6c6c6c6c6960574d43392f251c1208000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5d574e44392d2115090000000000040a0e1113131313131313131313120f0b060003090d111313131313131313131312100c0701000000000000000000050a0e1113131313131313131312110d090300000000000000000000101c2834404b565f6465656565656565656565656565656565656565656565656565656565656565656565656560584e43372b1f12060000000000020b141d262e353a3d3e3c38322b221e2226292b2e2f30313131302e2d2a2724201f272f363a3d3d3b3630281f160d04000000000000010c16202931373c3e3f3f3f3f3f3f3f3f3f3d38322a22180e030000111e2a37434f5a646d76808992988f867c736a615950473e352c231a161f28313a434c555e677079828b94948b827970665d52463a2e2115080000000000000000000000000000000000000c1824303b47535f6b76828e9aa6ab9f93877b6f63574c4c4c4c4c4c4c4c4c4c4c54606c7884909ca7a99d9185796d61564a3e32261a0f03000000000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e212b36414c57616c77828d97a2aba0958a80756a5f544a55626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000006131f2c3845515e6a76838f9ba7aea195897d7165594d42372e2927282a2e343e48535f6a76828e9aa6b2b2a5988b7e7165584b3e3225180b00000000000000000000000000000000000a141f29333d47515c66707a848f999f978f877e766e665d554d453d342c241b110700000000000000000000000000000000000000000000000000040e18222d37414b555f6a747e88929d9c948c847b736b635a524a423a312921170d0300000000000000000000000000000000000000000000020d17212b36404a545e68727d87919b9d958d857c746c645b534b433b322a22180e040000000000000000000000000000000000000000000000020c161f29333c4650585e5f5f5f5f5f5f5f5f5f5e5951473e342a20160c030000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5e5850463c31271d1309000000000000000000000000000000000000000000050f18222c353f49525a5f5f5f5f5f5f5f5f5f5f5d574e453b31271d130a00000000000000000000000000000a16212c3740484f525353535353535353514c453c32271c11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2b3844515d68707272727272727272727272727272727272727272727272727272727272727272727272716a5f53473b2e21150800000000020b141d262f3840464a4b49443d342b2a2e3235383a3c3d3e3e3d3d3b393734302c2831394146494a47413a31281f160d04000000000007121d28323b42484b4c4c4c4c4c4c4c4c4b49443c342a2015090000131f2c3946525f6b768089929ba1988f867c736b625950473e352c231f28313a434c555e677079828b949d9d948b82786e6256493d3023170a00000000000000000000000000000000000007131f2b37424e5a66727d8995a1ada3978c8074685c504440404040404040414d5965717c8994a0aca4988c8074695d5145392d22160a00000000000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e27323d48525d68737e89939ea9a4998e84796e63584d4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000004101d2935424e5a67737f8b97a3afa5998d81756a5e5349403935343436393f47505a65707b87929eaab6b2a5988b7e7165584b3e3225180b0000000000000000000000000000000000030d17212b35404a545e68727d87919ba199908880786f675f574f463e362d23180d020000000000000000000000000000000000000000000000000006111b252f39434e58626c76818b959f9e958d857d756c645c544b433b33291f14090000000000000000000000000000000000000000000000050f19242e38424c57616b757f89949e9f968e867e766d655d554d443c342a20160a000000000000000000000000000000000000000000000000040d17212a343e464d52535353535353535353524e473f352c22180e04000000000000000000000000000000000a16212c3740484f52535353535353535353524d463e342a20150b010000000000000000000000000000000000000000000006101a232d3740484f52535353535353535353514c453c33291f150b02000000000000000000000000000005101a252e373e4346464646464646464645413b332a20160b00000000000000000000000000000000000000000000040a0e10121212121212121212110e0b060000000000000000000000000000000000000003070a0c0c0c0c0c0c0c0b08040000000000000000000013202c3946535f6c797e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7c6f6255493c2f221609000000010a141d262f38414a525657554f463d34363a3e424547494a4a4a4a49484643403c38343a434b525656534c433a31281f160d04000000000c18242f3a444d5458585858585858585858554e463c31261a0e0200131f2c3946525f6b768089929ba4a1988f867d746b625950473e352c28313a434c555e677079828b949da69e958c837a6f63564a3d3024170a000000000000000000000000000000000000030e1a26323e4955616d7985909ca8a89c9084786c6155493d33333333333a46525d6975818d99a5ab9f93877b7064584c4034291d110500000000000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e2e39444e59646f7a858f9aa5a89d92887d72675c51474855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000000d1926323e4b57636f7b87939fabaa9e92877b70655b524a4542414143454a5058626c76818c98a2a6aeb2a5988b7e7165584b3e3225180b000000000000000000000000000000000000050f19242e38424c56616b757f89949ea29a928a81797169605850483f352a1e1307000000000000000000000000000000000000000000000000000009131d27323c46505a646f79838d97a19f978f877e766e665d554d453b31261a0e02000000000000000000000000000000000000000000000008121c26303a454f59636d77828c96a0a098908880776f675e564e463c32271c1004000000000000000000000000000000000000000000000000050f18222c343c424546464646464646464645423d362d231a1006000000000000000000000000000000000005101a252e373e434646464646464646464645423c342c22180e0400000000000000000000000000000000000000000000000008111b252e373e434646464646464646464645413b332a21170d030000000000000000000000000000000009131c252c32373939393939393939393835302921180e040000000000000000000000000000000000000000010910151a1d1e1e1e1e1e1e1e1e1e1d1b17110b0300000000000000000000000000000003090f1417181919191919181714100b04000000000000000013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c897c6f6255493c2f2216090000010a131c262f38414a535c636460584f463d42474b4e51535556575757565452504c48443f434c555d63635e564d433a31281f160c03000000101c2834404b565f6465656565656565656560584d42372b1e120600111e2a37434f5a646d768089929ba4a1988f867d746b625950473e35313a434c555e677079828b949da69e958c837a71685e53473b2e221509000000000000000000000000000000000000000a15212d3945505c6874808c97a3ada195897d7165594d42362a2627333f4a56626e7a86929ea9a69a8e83776b5f53473c3024180c0000000000000000000000000013202c3946535f6c798693a0aca194887b6e6154483b2e35404b55606b76818b96a1aca1968b81766b60554b404855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000000a16222e3b47535f6b77838e9aa5aea3988c81776d645c55514f4d4e4f52565b626a747e889395959ca6b2a5988b7e7165584b3e3225180b0000000000000000000000000000000000000008121c26303a454f59636d77828c96a0a49c938b837b726a625a51463b2f23170b0000000000000000000000000000000000000000000000000000010b16202a343e48535d67717b85909aa4a199908880786f675f574d42372b1f13060000000000000000000000000000000000000000000000000a141e29333d47515b66707a848e99a3a29a91898179706860584e43382c20140800000000000000000000000000000000000000000000000000061019222a3136383939393939393939393936322b241b11080000000000000000000000000000000000000009131c252c3237393939393939393939393836312a221a1006000000000000000000000000000000000000000000000000000009131c252c3237393939393939393939393835302921180f050000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c29241e170f060000000000000000000000000000000000000000010b131b2126292b2b2b2b2b2b2b2b2b2a27221c150d0400000000000000000000000000050d141b20232525252525252524201c160f060000000000000013202c3946535f6c7986939898989898989898989898989898989898989898989898989898989898989896897c6f6255493c2f221609000009131c252e38414a535c656e716a61584f484e53575a5e60626364646363615f5c5955504b4c555e676f6f685f554c433a31281e150b010000121f2b3844515d68707272727272727272716a5f53473a2e211408000e1b27323e49525b646d768089929ba4a1988f867d746b625950473e3a434c555e677079828b949da69e958c837a71685f564d42362b1f13060000000000000000000000000000000000000005111c2834404c57636f7b87939eaaa5998e82766a5e52463a2e232b37434f5b67737e8a96a2ada1968a7e72665a4e43372b1f13070000000000000000000000000013202c3946535f6c798693a0aca194887b6e6154483b313c46515c67727c87929da8a59a8f857a6f64594f443c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000006121e2a36424e5a66727d89949faaa99e93897f766d66615d5b5a5b5c5e62666d747c869092898a95a1aea5988c7e7265584c3f3225190c00000000000000000000000000000000000000000a141e29333d47515b66707a848e98a0a09d958d857c746c63574c3f33261a0d010000000000000000000000000000000000000000000000000000040e18222c37414b555f69747e88929ca0a09a928a817971695f53473b2e221509000000000000000000000000000000000000000000000000020d17212b353f4a545e68727c87919ba0a09b938b837a726a6055493c3023170a00000000000000000000000000000000000000000000000000000710181f25292c2c2c2c2c2c2c2c2c2c2c2a26201a12090000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c29251f181007000000000000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c29241f170f0600000000000000000000000000000000000000010910161a1e1f20202020202020201f1c19130d050000000000000000000000000000000000000000000a131d252c323638383838383838383837332e271f160c020000000000000000000000040e171f262b3032323232323232302d272018100600000000000013202c3946535f6c798693a0a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a296897c6f6255493c2f2216090005101a252e37404a535c656e777c736a615854595e63676a6d6f707171706f6e6b6865615c57555e6770797a71675e554c433a30271d1308000013202c3946535f6c797e7e7e7e7e7e7e7e7b6f6255483c2f221509000a16212c374049525b646d768089929ba4a1988f867d746b62595047434c555e677079828b949da69e958c837a71685f564d443b30251a0e0200000000000000000000000000000000000000000c18232f3b47535e6a76828e9aa5aa9e92867a6e63574b3f3327303c48545f6b77838f9ba7a89d9185796d61564a3e32261a0f030000000000000000000000000013202c3946535f6c798693a0aca194887b6e6154483b38424d58636e78838e99a4a99e93897e73685d53483d3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000020e1a26323e4a55616c78838e99a3ada59b91888078726d6a686767686b6e72787e868f978c818794a0ada5988c7e7265584c3f3225190c0000000000000000000000000000000000000000020c17212b353f4a545e68727c879193939393938e867e74675b4e4135281b0e0200000000000000000000000000000000000000000000000000000006101a252f39434d58626c76808b9393939393938b837b6f6356493d3023160a00000000000000000000000000000000000000000000000000050f19232e38424c56606b757f899393939393938c847c7164584b3e3225180b000000000000000000000000000000000000000000000000000000060e14191d1f2020202020202020201f1d1a150f0800000000000000000000000000000000000000000000010910161a1e1f2020202020202020201f1d19140e060000000000000000000000000000000000000000000000000000000000010910161a1e1f2020202020202020201f1d19130d0600000000000000000000000000000000000000000000050a0e1113131313131313131312100d080200000000000000000000000000000000000000000006111b252f373d42454545454545454545433f3931281e130900000000000000000000010c16202931373c3e3f3f3f3f3f3f3d38322a22180e03000000000013202c3946535f6c798693a0acb2b2a79e9998989898989898989898989898989898989898989898989896897c6f6255493c2f221609000a16212c374049525c656e7780867c736a615f656a6f7376797b7d7d7d7d7c7a7875716d68625e67707982837970675e554c42392f24190d020013202c3946535f6c79868c8c8c8c8c8c887b6f6255483c2f2215090005101b252e374049525b646d768089929ba4a1988f867d746b6259504c555e677079828b949da69e958c837a71685f564d443b32291f140900000000000000000000000000000000000000000007131f2a36424e5a65717d8995a0aca3978b7f73675b4f44382c35404c5864707c8894a0aba4988c8074685d5145392d21160a000000000000000000000000000013202c3946535f6c798693a0aca194887b6e6154483b3e49545f6a74808a95a0aaa2978d82776c61574c41363c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000000000010507101c2936434f5c69768390908376695c4f4336291c1007050100000000000000000a16212d3944505b66717c87919ca5ada39a918a837d797675747475777a7e8389909890857a8693a0ada5988c7e7265584c3f3225190c000000000000000000000000000000000000000000050f19232d38424c56606a757f86868686868686868275685b4e4235281b0f020000000000000000000000000000000000000000000000000000000009131d27313b46505a646e788386868686868686867d7063564a3d3023170a000000000000000000000000000000000000000000000000000007111c26303a444f59636d778186868686868686867e7165584b3e3225180b0000000000000000000000000000000000000000000000000000000003090d111213131313131313131313110e090400000000000000000000000000000000000000000000000000050a0e111313131313131313131312110d09030000000000000000000000000000000000000000000000000000000000000000050a0e111313131313131313131312100d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3741494e5151515151515151514f4a433a30251a0e0300000000000000000007121d28323b42484b4c4c4c4c4c4b49443c342a20150a000000000013202c3946535f6c7986939faab4ada1958c8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b897c6f6255493c2f221609000e1a26323e48525b646e7780898f867c736a6a70767b7f838688898a8a8a898784817d78736e677079828b8c837970675e544b41352a1e12060013202c3946535f6c7986939898989895887b6f6255483c2f221509000009131c252e374049525b646d768089929ba4a1988f867d746b6259555e677079828b949da69e958c837a71685f564d443b322920170d02000000000000000000000000000000000000000000020e1a26313d4955616c7884909ca7a79b9084786c6054483c303945515d6975818c98a4ab9f93877b7064584c4034291d1105000000000000000000000000000013202c3946535f6c798693a0aca194887b6e6154483b45505b66707b86919ca6a69b91867b70655b50453a2f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000000000000000111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c000000000000000000000000000000000000000000070d1114161c2936434f5c69768390908376695c4f4336291c1614110d070000000000000005111c28333f4a55606b75808a939ca5aca39b948e8986838181818284868a8f949b92887e7986939faca6998c7f7265594c3f3226190c0000000000000000000000000000000000000000000007111c26303a444e59636d7779797979797979797973675a4e4135281b0e0200000000000000000000000000000000000000000000000000000000010b151f2a343e48525c6771797979797979797979786e6256493c3023160a0000000000000000000000000000000000000000000000000000000a141e28323d47515b6570787979797979797979797064574b3e3125180b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000206090a0a0a0a0a0a0a0a0a0a0804000000000000000000000000000004101c28333f49535a5e5e5e5e5e5e5e5e5e5b554c41362b1f13070000000000000000000c18232f39444d5458585858585858554e463c31261b10050000000013202c3946535f6c79838e98a2acab9e92857e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7b6f6255493c2f22160900111e2a37434f5a646d76808992988f867c73757c82878b8f9294969797979593918d89847f797279828b94948b827970665d52463a2e2115080013202c3946535f6c798693a0a5a5a295887b6f6255483c2f2215090000010a131c252e374049525b646d768089929ba4a1988f867d746b625e677079828b949da69e958c837a71685f564d443b322920170e0500000000000000000000000000000000000000000000000915212d3844505c68737f8b97a3aca094887c7065594d41353e4a56616d7985919da9a69a8e83776b5f53473b3024180c00000000000000000000000000000013202c3946535f6c798693a0aca194887b6e615448414c57626c77828d98a2aa9f958a7f74695f54493e332f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f02000000000000000000000000000000000000000002070b111d2a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000000030b12181d2022222936434f5c69768390908376695c4f4336292222201d18120b030000000000000b17222d39444e59636e78818a939ba2a8a69f9a9592908e8e8e8f9093969a9a928980767885929faca6998c807366594c403326190d00000000000000000000000000000000000000000000000a141e28323d47515b656b6c6c6c6c6c6c6c6c6c6961564b3f3226190d000000000000000000000000000000000000000000000000000000000000030e18222c36404b555f686c6c6c6c6c6c6c6c6c6c675d52463a2e211508000000000000000000000000000000000000000000000000000000020c17212b353f49535e676c6c6c6c6c6c6c6c6c6c685e53483c2f23160a00000000000000000000000000000000000000000000000000000000000000000306080a0b0c0d0d0d0d0c0b0a080604010000000000000000000000000000000000000000000000000000000000000000000003070809090909090909090907040000000000000000000000000000000000000000000206090a0a0a0a0a0a0a0a0a0a080400000000000000000000000000000307090a0a0a0a0a0a0a0a0a0907030000000000000000000001080e12151717171717171717171614100b0500000000000000000000000006131f2c3844505b656a6b6b6b6b6b6b6b6b675e53473b2f23160a0000000000000000000f1c2834404b565e6465656565656560584d43382c21160a00000000121f2b3844505c67717c86909aa5ada1968c8277717171717171717171717171717171717171717171717171716a5f53473a2e21150800131f2c3946525f6b768089929ba1988f867c80878d92979b9fa1a3a4a4a3a2a09d9995908a847d828b949d9d948b82786e6256493d3023170a0013202c3946535f6c798693a0acafa295887b6f6255483c2f221509000000010a131c252e374049525b646d768089929ba4a1988f867d746b677079828b949da69e958c837a71685f564d443b322920170e0500000000000000000000000000000000000000000000000004101c28343f4b57636e7a86929eaaa5998d8175695d51463a424e5a66727e8a96a2ada1958a7e72665a4e42372b1f130700000000000000000000000000000013202c3946535f6c798693a0aca194887b6e61544848535e68737e89949ea9a3998e83786d63584d42372d2f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f0200000000000000000000000000000000000001070d13171c202a3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c000000000000000000000000000000000000020c151d24292d2f2f2f36434f5c69768390908376695c4f43362f2f2f2d29241d150c02000000000006111c27323d47525c666f78818990979da2a5a6a29e9c9b9a9a9b9d9f9c97908880776e7885919ea9a6998c807366594d4033261a0d0000000000000000000000000000000000000000000000020c16212b353f49535a5f5f5f5f5f5f5f5f5f5f5e584f453a2e22160a0000000000000000000000000000000000000000000000000000000000000006101a242f39434d565d5f5f5f5f5f5f5f5f5f5f5c554b41352a1e120500000000000000000000000000000000000000000000000000000000050f19232d38424c555c5f5f5f5f5f5f5f5f5f5f5c564d42372b1f1307000000000000000000000000000000000000000000000000000000000106090d101214161819191a1a191918171513110e0b07030000000000000000000000000000000000000000000000000000000000050b0f131516161616161616161514110c07000000000000000000000000000000000001080e12151717171717171717171614100b0500000000000000000000040a0f131617171717171717171716130f0a0300000000000000040c13191e2223242424242424242423201c17100800000000000000000000000815212e3b4754606d7678787878787878786f64574b3e3125180b000000000000000000121e2b3744505c67707272727272716a5f54493e32271b10040000000f1c2834404b55606a747e89939da7a89e94897f756b656565656565656565656565656565656565656565656460584e42372b1f120600131f2c3946525f6b768089929ba4a1988f868b92989ea3a7a8a5a3a2a2a3a4a6a9a5a19b958f888b949da69e958c837a6f63564a3d3024170a0013202c3946535f6c798693a0acafa295887b6f6255483c2f22150900000000010a131c252e374049525b646d768089929ba4a1988f867d747079828b949da69e958c837a71685f564d443b322920170e0500000000000000000000000000000000000000000000000000000b17232f3b46525e6a76828d99a5a99d91867a6e62564a3e47535f6b77838e9aa6a89c9185796d61554a3e32261a0e0300000000000000000000000000000013202c3946535f6c798693a0aca194887b6e6154484f5a646f7a85909aa5a79d92877c71675c51463b31262f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000000000050c13191e23282c2f3744505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c0000000000000000000000000000000000000a141e272e35393c3c3c3c434f5c69768390908376695c4f433c3c3c3c39352e271e140a0000000000000b16202b36404a545d666f777e868c9196999c9e9fa09f9e9d9b9995918b857e766e6a7784919c9c9c9a8d8073675a4d4034271a0d000000000000000000000000000000000000000000000000050f19232d3741494f52535353535353535353514d463d33281d1206000000000000000000000000000000000000000000000000000000000000000008131d27313b444b5153535353535353535353504a43392f24190d02000000000000000000000000000000000000000000000000000000000007111b26303a434b5053535353535353535353504b443b30261a0f03000000000000000000000000000000000000000000000000000003090d1216191c1f212324252626262626252322201d1a17130f0b0601000000000000000000000000000000000000000000000000000810161b1f22222222222222222222201d18120a020000000000000000000000000000040c13191e2223242424242424242423201c1710080000000000000000060e151b1f22242424242424242424221f1b150e060000000000030d161e252a2e3030303030303030302f2d28221a1209000000000000000000000815222e3b4855616e7b858585858585857e7165584b3e3225180b000000000000000000131f2c3946525f6c787e7e7e7e7e7b71655a4f43382c2115090000000c17232e39444e58626c76818b959faaa59b91877d72685e585858585858585858585858585858585858585858554e463c31261a0f0300111e2a37434f5a646d768089929ba4a19893959ca3a9a49f9b9997969696979a9da1a6a7a09a94969da69e958c837a71685e53473b2e2215090013202c3946535f6c798693a0a3a3a295887b6f6255483c2f2215090000000000010a131c252e374049525b646d768089929ba4a1988f867d79828b949da69e958c837a71685f564d443b322920170e0500000000000000000000000000000000000000000000000000000006121e2a36424d5965717c8894a0aca2968a7e72675b4f434c58636f7b87939faba4988c8074685d5145392d21160a0000000000000000000000000000000013202c3946535f6c798693a0aca194887b6e61544b56606b76818c96a1aba1968b80756b60554a3f352a222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f02000000000000000000000000000000000810171e242a2f34383c3f44505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c000000000000000000000000000000000006111c263039404548494949494f5c69768390908376695c4f494949494845403930261c11060000000000040f19242e38424b545d656d747a8085898d8f9192939292918f8c8985807a736c6469768390909090908e8174675b4e4134281b0e0000000000000000000000000000000000000000000000000007111b252f373e434646464646464646464645413b342b21170c010000000000000000000000000000000000000000000000000000000000000000010b151f29323a404446464646464646464646443f3931271d1308000000000000000000000000000000000000000000000000000000000000000a141e2831393f444646464646464646464644403a32291f14090000000000000000000000000000000000000000000000000003090f14191e2225292b2e303132333333333231302e2c2a27231f1b16110c06000000000000000000000000000000000000000000000008121a21272c2e2f2f2f2f2f2f2f2f2f2d29231c140b02000000000000000000000000030d161e252a2e3030303030303030302f2d28221a120900000000000006101820262c2f3030303030303030302f2b2620180f06000000000b151f282f363a3d3d3d3d3d3d3d3d3d3c39332c241b11060000000000000000000815222e3b4855616e7b8892929292928b7e7165584b3e3225180b000000000000000000121f2b3844515d69737e898c8c8c82776b6054493d31251a0e02000007121d27323c46505a656f79838e98a2aca3998f847a70665c514b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b49433c342a20150900000e1b27323e49525b646d768089929ba4a3a0a1a7a59e98938f8c8a8989898b8d91969ba1a8a4a1a2a79e958c837a71685f564d42362b1f13060013202c3946535f6c7986939696969695887b6f6255483c2f221509000000000000010a131c252e374049525b646d768089929ba4a1988f86828b949da69e958c837a71685f564d443b322920170e0500000000000000000000000000000000000000000000000000000000020d1925313d4854606c78848f9ba7a79b8f83776b5f5347505c6874808c98a4ab9f93877b6f64584c4034281d11050000000000000000000000000000000013202c3946535f6c798693a0aca194887b6e6154525c67727d88929da8a49a8f84796f64594e43392e23222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000000000000020a121a22292f353b4044484b4e505d6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000b17222e38424b515555555555555c69768390908376695c555555555555514b42382e22170b00000000000008121c263039424b535b62696f75797d818384868686858482807d79746f69625b6875818383838383838275685b4f4235281c0f00000000000000000000000000000000000000000000000000000a131d252d3337393939393939393939393835302a22190f0500000000000000000000000000000000000000000000000000000000000000000000030d1720282f34383939393939393939393937342e271f150c0100000000000000000000000000000000000000000000000000000000000000020c161f272e34383939393939393939393938342f2820170d02000000000000000000000000000000000000000000000000070e141a20252a2e3235383a3c3e3f404040403f3e3d3b3936332f2b27221d17110b04000000000000000000000000000000000000000006111a242c33383b3c3c3c3c3c3c3c3c3c39342e261d140a0000000000000000000000000b151f282f363a3d3d3d3d3d3d3d3d3d3c39332c241b110600000000040e18222a32373b3d3d3d3d3d3d3d3d3d3b37312a21180e03000006121d27313a41474a4a4a4a4a4a4a4a4a49443e362d23180d0100000000000000000815222e3b4855616e7b88959e9e9e988b7e7165584b3e3225180b000000000000000000101c2935414c57626c77828e9893887c71655a4e42362a1e12060000010b16202a343e49535d67717c86909aa5aba0968c82786d63594f453e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3c38322a22180e0300000a16212c374049525b646d768089929eaaaca9a19a938d8783807d7c7c7c7e81858a90969ea5aeaea3978c837a71685f564d443b30251a0e020013202c3946535f6c7986898989898989887b6f6255483c2f22150900000000000000010a131c252e374049525b646d768089929ba4a1988f8d949da69e958c837a71685f564d443b322920170e050000000000000000000000000000000000000000000000000000000000000914202c3844505b67737f8b96a2ab9f93887c7064584c55616d7985919ca8a69a8e82766b5f53473b3024180c000000000000000000000000000000000013202c3946535f6c798693a0aca194887b6e615458636e79848e99a4a89e93887d73685d52473d32271c222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f0200000000000000000000000000020b141c242c333a41464b5054575a5c5e6a7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c00000000000000000000000000000000000f1b27333f4a545c616262626262626976839090837669626262626262615c544a3f33271b0f000000000000000a141e273039414951585e64696d7174767879797978777573706d68635e57596570767676767676767671665a4e4135281b0f0000000000000000000000000000000000000000000000000000010b131b21272a2c2c2c2c2c2c2c2c2c2c2c29251f181007000000000000000000000000000000000000000000000000000000000000000000000000050e161d24282b2c2c2c2c2c2c2c2c2c2c2b28231c150d03000000000000000000000000000000000000000000000000000000000000000000040d151d23282b2c2c2c2c2c2c2c2c2c2c2b28231d160e050000000000000000000000000000000000000000000000030b121920262b31363a3e414447494a4c4c4d4d4c4c4b494745423f3c38332e28231c160f07000000000000000000000000000000000000020d18232c363d44484949494949494949484540382f261b10050000000000000000000006121d27313a41474a4a4a4a4a4a4a4a4a49443e362d23180d010000000a15202a343c43484a4a4a4a4a4a4a4a4a48433c332a20150a00000b17232e39434c525657575757575757575550483f34291e120600000000000000000815222e3b4855616e7b8895a2aba5988b7e7165584b3e3225180b0000000000000000000c1824303b45505b66717c8893998d82766a5e52463a2e221609000000040e18222d37414b55606a747e89939da7a89e948a80756b61564c4238323232323232323232323232323232302c272018100600000005101b252e374049525b646e79838f9ca9a9a0989088827c7773716f6f707275797e858c939ca4ada195887d73685f564d443b32291f1409000013202c3946535f6c787c7c7c7c7c7c7c7c7a6e6255483b2f2215090000000000000000010a131c252e374049525b646d768089929ba4a19b999ea69e958c837a71685f564d443b322920170e050000000000000000000000000000000000000000000000000000000000000004101b27333f4b56626e7a86929da9a4988c8074685d515a65717d8995a1ada1958a7e72665a4e42372b1f1307000000000000000000000000000000000013202c3946535f6c798693a0aca194887b6e61545f6a75808a95a0aba2978c81766c61564b41362b2015222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f02000000000000000000000000010a141d262e363e454c52575c606467696b6c7784909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c0000000000000000000000000000000000121e2b3744505b666e6f6f6f6f6f6f6f7683909083766f6f6f6f6f6f6f6e665b5044372b1e1200000000000000020c151e272f373f464d53585d616467696b6c6c6c6b6b696764615c58524c545e666969696969696969675f554a3e3226190d000000000000000000000000000000000000000000000000000000010910161b1e202020202020202020201f1d19140d060000000000000000000000000000000000000000000000000000000000000000000000000000040c12181c1f202020202020202020201e1c17120b030000000000000000000000000000000000000000000000000000000000000000000000030b12171c1e202020202020202020201f1c18120c040000000000000000000000000000000000000000000000050d151d242b31373c41464a4e51535557585959595959575654524f4c48433f39342e2720191109010000000000000000000000000000000007121e29343e484f54555555555555555555514a41382d22160a000000000000000000000b17232e39434c525657575757575757575550483f34291e12060000030f1b26323c464e54575757575757575757544e453c31261b0f03000f1c28343f4b555d636363636363636363615a51463a2f23160a00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000008131e29343f4954606b76828e9992877b6e62564a3e3225190d0000000006111b252f39444e58626c76818b959faaa69b91877d72685e544a40352b2525252525252525252525252523201c160e06000000000009131c252f3b47525e6974808a95a0aaa0978e867e76706b676463626365696d737a818a929ba5a4998f84796e63584c41352920170d020000121e2b3744505c666e6f6f6f6f6f6f6f6f6f685e52463a2d211407000000000000000000010a131c252e374049525b646d768089929ba6a7a6a99f958c837a71685f564d443b322920170e050000000000000000000000000000000000000000000000000000000000000000000b17222e3a46525d6975818d99a4a99d9185796d61555e6a76828e9aa6a89c9185796d61554a3e32261a0e02000000000000000000000000000000000013202c3946535f6c798693a0aca194887b6e615b66717b86919ca7a69b90857a70655a4f453a2f241915222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f0200000000000000000000000009131d262f38404850575d63686c70737677797984909d9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c000000000000000000000000000000000013202c3946535f6c787c7c7c7c7c7c7c7c839090837c7c7c7c7c7c7c7c786c5f5346392c20130000000000000000030c151d252d343b41474c5155585b5d5e5f5f5f5f5e5c5a5854504c47424c545a5c5c5c5c5c5c5c5c5b554d43392d22160a0000000000000000000000000000000000000000000000000000000000050a0f111313131313131313131312100d08020000000000000000000000000000000000000000000000000000000000000000000000000000000001070c101213131313131313131313120f0b06000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f121313131313131313131312100c07010000000000000000000000000000000000000000000000060e171f272e353c42484d52565a5d6062646566666666656463615e5b58544f4a453f39322b231b130b020000000000000000000000000000000a17232f3b46505a606262626262626262615c53493e33271b0e020000000000000000000f1c28343f4b555d636363636363636363615a51463a2f23160a000007131f2c37434e585f6363636363636363635f574e43372b1f130600121e2b3844505c676f70707070707070706c62574b3f3226190c00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000020d17222d38434e5a65717d8995978b7e72665a4d4135281c0f030000000009131d27323c46505a656f79838d98a2aca3998f847a70665c51473d33291e18181818181818181818181714100a04000000000000030f1b2834404b57636f7a86919ca7a2988e857c746c655f5b58565556595d626870778089939da7a1968b8074695d52463a2e22160a0000000f1b28333f4a545d626363636363636363625e564c41362a1e110500000000000000000000010a131c252e374049525b646d76808995a2afb3a79a8e837a71685f564d443b322920170e050000000000000000000000000000000000000000000000000000000000000000000006121e2935414d5964707c8894a0aba195897d72665a636f7b87929eaaa3988c8074685c5145392d21150a00000000000000000000000000000000000013202c3946535f6c798693a0aca194877b6e61626d77828d98a3aa9f94897e74695e53493e33281d1315222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f02000000000000000000000006101b252f38414a525a61686e74787c808284858687929e9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3225190c070200000000000000000000000000000013202c3946535f6c798689898989898989899292898989898989898986796c5f5346392c2013000000000000000000030b131b232a30363c4045494c4e50525253535251504e4b4844403b3a42494e4f4f4f4f4f4f4f4f4e4a433b31271c110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f182029313940474d53595e62666a6c6f70727373737372716f6d6b6764605b56504a443d352d251d140b0200000000000000000000000000000d1a26333f4b57626b6f6f6f6f6f6f6f6f6d655b4f43362a1d1104000000000000000000121e2b3844505c676f70707070707070706c62574b3f3226190c00000916222f3b48545f6a7070707070707070706a5f54473b2f2215090013202c3946535f6c787d7d7d7d7d7d7d7d73665a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000000000009141e27323d4955616c7885919b8e8276695d5044372b1e120500000000010b16202a343e49535d67717c86909aa4aba0968c82786d63594f453a30261c120b0b0b0b0b0b0b0b0b0a0804000000000000000007131f2c3844505c6874808b97a2a59b90867c736a625a544f4b49494a4d51575e666e77818b95a0a79c91857a6e62564a3e32261a0e0100000b17232e38424b5255565656565656565656534c443a3025190d0100000000000000000000040d161f28313a434c555e677079828b96a2afafa89b8f867c736a615950473e352c231a100700000000000000000000000000000000000000000000000000000000000000000000010d1925303c4854606b77838f9ba7a69a8e82766a5e6773808b97a3ab9f93877b6f63584c4034281d110500000000000000000000000000000000000013202c3946535f6c798693a0aca094877a6d6169737e89949faaa3988d83786d62574c42372c21170c15222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f0200000000000000000000020d18222d37414a535c646c73798084898c8f91929393999f9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f32251916130e08010000000000000000000000000013202c3946535f6c798693949494949494949494949494949494969386796c5f5346392c201300000000000000000000020911181f252b3035393c3f424445464646454443413f3c38342f31383e424343434343434343423e39322920150b000000000000000000000000000000000000000000000000000002050708090a0b0b0b0b0b0a090706030100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000305060708080808070604020000000000000000000000000000000000000000000000000000000000000000000000000000000306090c0e101112131313131212110f0d0b09060300000000000000000000000000000000000000000000000000040e17212a323b434a52585f656a6e7276797b7d7e808080807e7d7c7a7774706c67615c554e473f372f261d140a00000000000000000000000000000e1b2834414e5a67747c7c7c7c7c7c7c7c776b5e5245382c1f120500000000000000000013202c3946535f6c787d7d7d7d7d7d7d7d73665a4d4034271a0d01000a1724303d4a5763707c7d7d7d7d7d7d7d7c706356493d3023160a0013202c3946535f6c79868a8a8a8a8a8a8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000004101b2530394147505c6875818d9a9185786c5f53463a2d2014070000000000040e18222d37414b55606a747e88939da7a89e948a80756b61574c42382e24190f050000000000000000000000000000000000000a16232f3b4854606c7884909ca89f94897e746a61585049433f3c3c3d40454c545c656f79848e99a5a2968a7e73675a4e4236291d1104000006111c27303940464949494949494949494947423b32281e130800000000000000000000040d161f28313a434c555e677079828b949da7a3a2a6a1988f867c736b625950473e352c231a1108000000000000000000000000000000000000000000000000000000000000000000000814202c37434f5b67727e8a96a2aa9e92867a6e626c7884909ca8a69a8e82766b5f53473b2f24180c0000000000000000000000000000000000000013202c3946535f6c798693a0aca093877a6d656f7a85909ba5a79c91877c71665b50463b30251b100915222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000008131e29343e49525c656e767e858b9095989b9d9fa0a0a49f9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f322625231f19120b0200000000000000000000000013202c3946535f6c7986878787878787878787878787878787878d9386796c5f5346392c2013000000000000000000000000060d14191f24292d303335373839393939383635322f2c2824262d3235363636363636363635322e2720170e04000000000000000000000000000000000000000000000105090c0f1113151617181818181717151412100d0a07030000000000000000000000000000000000000000000000000206090a0a0a0a0a0a0a0a0a0907030003070a0d0f111314151515151412110e0c090501000000000000000000000000000000000000000000000000000000000000000003080c101316181a1c1e1f1f2020201f1e1d1c1a1815120f0b0702000000000000000000000000000000000000000000020c162029333c444d555c636a70757a7e8285888a8b8c8d8d8c8c8a898684807c78726d676059514941382f261c1208000000000000000000000000000e1b2834414e5b67748189898989898985786b5f5245382c1f120500000000000000000013202c3946535f6c79868a8a8a8a8a8a8173675a4d4034271a0d01000a1724303d4a5763707d8a8a8a8a8a8a8a7d7063564a3d3023170a0013202c3946535f6c798693979797978d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000000000915212c37414b52575965717e8a9794877a6e6155483b2f22150900000000000006111b252f39444e58626c76818b959faaa69b91877d73685e544a40352b21170d0200000000000000000000000000000000000d1926323e4b5764707c8895a1a59a8e83776d62584e463e3732302f31343a424a535d67727d8894a0a79b8f83776a5e5245392d2014070000000a151e272f353a3c3c3c3c3c3c3c3c3c3c3a36302920170c02000000000000000000040d161f28313a434c555e677079828b949da69d96959ba4a1988f867d746b625950473e352c231a1108000000000000000000000000000000000000000000000000000000000000000000030f1b27333e4a56626e7985919da9a3978b7e7367707c8894a0aca195897d72665a4e42372b1f13070000000000000000000000000000000000000013202c3946535f6c798693a0aca09386796d6b76818c97a1aba0958b80756a5f544a3f34291f14090915222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f02000000000000000000020e1925303b46505a646e7780888f969ca1a5a8aaabacadac9f9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3232322f2a241d140b02000000000000000000000013202c3946525f6b777a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7e8b9386796c5f5346392c20130000000000000000000000000002080e13181c202426282a2b2c2c2c2c2b2a282623201c181c21262829292929292929292926221c160e0500000000000000000000000000000000000000000004080d1115181b1e2021232424252525242322211f1c1a1713100b07020000000000000000000000000000000000000001080e121517171717171717171716130f0b0f1316191c1e202121222221201f1d1b1815110d080300000000000000000000000000000000000000000000000000000000040a0f14181c1f222527292a2b2c2c2c2c2c2b2a282724221f1b17130e09030000000000000000000000000000000000000009141e28323b454e565f676e757b81868b8f9294969899999a9998979593908c88847e78726a635b534a41382e241a10050000000000000000000000000e1b2834414e5b6774818e969696969285786b5f5245382c1f120500000000000000000013202c3946535f6c798693979797978d8173675a4d4034271a0d01000a1724303d4a5763707d8a97979797968a7d7063564a3d3023170a0013202c3946535f6c798693a0a4a49a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000000000d1925313d49535d6365656f7c889596897c6f6356493d3023170a0000000000000009131d27323c46505a656f79838d98a2aca3998f857a70665c51473d33291e140a00000000000000000000000000000000000f1b2834414e5a6773808c98a5a195897d72665b50463c342c26232224293038414b55606c77838f9ba79f93867a6d6155483c2f221609000000030c151d24292d2f3030303030303030302e2a251e170e05000000000000000000040d161f28313a434c555e677079828b949da69d948b89929ba4a1988f867d746b625950473e352c231a11080000000000000000000000000000000000000000000000000000000000000000000a16222e3a45515d6975818c98a4a79b8f83776b74818c98a5a89c9185796d6155493e32261a0e020000000000000000000000000000000000000013202c3946535f6c798693a0ac9f9386796c727d88939ea8a4998e84796e63584e43382d23180d020915222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f0200000000000000000008131f2b36414c57626c768089929aa1a7adb1b4b7b8b9b8ac9f9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c3f3e3f3e3b362e261d140b0200000000000000000000111e2a37434f5a656c6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d717e8b9386796c5f5346392c201300000000000000000000000000000003080c1014171a1c1e1f1f20201f1e1d1b191713100c1016191c1c1c1c1c1c1c1c1c1c1a16110b040000000000000000000000000000000000000000040a0f14191d2125282a2c2e30313132323131302f2d2b292623201c17130d080200000000000000000000000000000000040c13191e22232424242424242424221f1b161b1f2326282b2c2d2e2e2e2e2d2c2a2725211d19140e080200000000000000000000000000000000000000000000000002090f151b1f24282c2f3134363738393939393938373533312e2b27231f1a140e08020000000000000000000000000000000006101b25303a444d576068717880878d92979b9ea1a3a2a1a0a0a1a2a4a29f9c98948f89837c756d655c534a40362c22170d0200000000000000000000000e1b2834414e5b6774818e9ba2a29f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0a4a49a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4a4a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000000000f1c2835414e5a656f7272727a8794978a7d7164574a3e3124180b00000000000000010b16202a343e49535d67717c86909aa4aba1968c82786e63594f453b30261c120800000000000000000000000000000002111d2a3643505c6975828f9ba89e9185796d61554a3f342b221b1716181e262f39444f5b67737f8b98a4a296897d7063574a3e3124180b00000000030b12191d2123232323232323232323211e1a140d05000000000000000000040d161f28313a434c555e677079828b949da69e958b828089929ba4a1988f867d746b625950473e352c231a1108000000000000000000000000000000000000000000000000000000000000000006111d2935414c5864707b87939fab9f93877b6f7885919da9a3988c8074685c5045392d21150a000000000000000000000000000000000000000013202c3946535f6c798693a0ac9f9286796e79848f99a4a89d92887d72675c52473c31271c1106000915222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000000c1824303c47535e69747e88929ba4acb2b8bdc1c3c5c5b8ac9f9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c454a4c4b4740382f261d140b020000000000000000000f1b27333e49535b60606060606060606060606060606065717e8b9386796c5f5346392c201300000000000000000000000000000000000004080b0d0f11121313131212100f0d0a070400050a0d0f10101010101010100f0d0a06000000000000000000000000000000000000000002080f151b2025292d313437393b3c3d3e3e3e3e3e3d3b3a3835332f2c28231e19130d070000000000000000000000000000030d161e252a2e3030303030303030302f2c2622272b2f323537393a3b3b3b3b3a383634312d29241f19130d0600000000000000000000000000000000000000000000060d141b20262b3034383b3e404244454646464645454342403d3a37332f2a25201a130c050000000000000000000000000000010c17222d37424c565f69727a838a91989ea3a49f9b98969494949495979a9da2a5a09b958e877f776e655c52483e33291e130800000000000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000101c2936434f5c69767e7e7e7e8693988b7e7165584b3e3225180b0000000000000000040e18222d37414b555f6a747e88939da7a89e948a80756b61574c42382e24190f05000000000000000000000000000004121f2b3845515e6b7784919da89b8f8276695d5144392d2219100a090c141d27333e4a57636f7c8895a2a4988b7e7265594c3f3326190c000000000001070d11141616161616161616161615120e0902000000000000000000040d161f28313a434c555e677079828b949da69e958c8379768089929ba4a1988f867d746b625950473e352c231a110800000000000000000000000000000000000000000000000000000000000000010d1824303c48535f6b77838e9aa6a3978b7f737c8895a1aa9f93877b6f63584c4034281c1105000000000000000000000000000000000000000013202c3946535f6c798693a0ab9f92857875808b95a0aba1968c81766b60564b40352a20150a00000915222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f02000000000000000004101c2935404c58636f7a85909aa4adb6bdc4c9cdd0d2c5b8ac9f9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265584c50565957524a41382f261d140c0300000000000000000a16212d3741494f53535353535353535353535353535865717e8b9386796c5f5346392c2013000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c131a20262c3135393d40434547494a4b4b4b4b4a49484644423f3c38342f2a241e18110a030000000000000000000000000b151f282f363a3d3d3d3d3d3d3d3d3d3b37322e33373b3f4144464748484847474543403d3935302b251e17100800000000000000000000000000000000000000000810181f262c32373c4044474a4d4f5051525353535251504e4c4a47433f3b36312b251e170f070000000000000000000000000007121e29343e49535e68717b848c959ca3a69f99948f8c8988878787898b8e91969ca2a6a099918980776e645a50453a30251a0e03000000000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000101c2936434f5c6976838c8c8c8e97988c7e7265584c3f3225190c00000000000000000006101b252f39434e58626c76818b959faaa69c91877d73685e544a40362b21170d030000000000000000000000000006131f2c3946525f6c7985929fa69a8d8073675a4e4135281c11070000020b16222e3b4754616d7a8793a0a6998d8073665a4d4034271a0d010000000000000105080909090909090909090908060200000000000000000000040d161f28313a434c555e677079828b949da69e958c8379706d768089929ba4a1988f867d746b625950473e352c231a11080000000000000000000000000000000000000000000000000000000000000008141f2b37434f5a66727e8a95a1a89b8f8377808c99a5a69a8e82766a5f53473b2f23180c00000000000000000000000000000000000000000013202c3946535f6c798693a0ab9e9184787c87919ca7a59a90857a6f645a4f44392e24190e0300000915222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f0200000000000000000814202d3945515d6974808c97a2acb6bfc8cfd5d9dcd2c5b8ac9f9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e726558515a6265635c534a41392f261e150c030000000000000005101b252f373e44464747474747474747474747474b5865717e8b9386796c5f5346392c2013000000000000000000000000000000000000000000000004080a0b0c0c0d0d0d0c0b0a080604010000000000000000000000000000000000000000000000000000000000000000070f171e252b32373c4146494d50525456575758585757565553514e4b4844403b35302a231c150d050000000000000000000006121d27313a41474a4a4a4a4a4a4a4a4a48433c393f43474b4e5052535455555453524f4d4945413c363029221a120a01000000000000000000000000000000000109121a222930373d43484c505457595b5d5e5f5f5f5f5f5e5d5b595653504b47423c363029211911090000000000000000000000010d18242f3a45505b65707a838d969ea6a59c958e88837f7c7b7a7a7b7c7e81858b91989fa8a39b928980766c61574c41362b201409000000000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000101c2936434f5c697683909898999f988c7e7265584c3f3225190c0000000000000000000009131d27323c46505a656f79838d98a2aca3998f857a70665c52473d33291f140a000000000000000000000000000613202c3946535f6c798693a0a6998c7f7266594c3f3326190d000000000613202c3946535f6c7986929fa79a8d8173675a4d4034271a0d0100000000000000000000000000000000000000000000000000000000000000040d161f28313a434c555e677079828b949da69e958c83797067646d768089929ba4a1988f867d746b625950473e352c231a1108000000000000000000000000000000000000000000000000000000000000030f1a26323e4a56616d7985919ca89f93877b84909ca9a195897d72665a4e42362b1f130700000000000000000000000000000000000000000013202c3946535f6c798693a0aa9d918478838d98a3a99e94897e73685e53483d32281d12070000000915222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f0200000000000000000b1724303c4955616d7985919da8b3bec8d1dae0e5dfd2c5b8ac9f9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265585a636c726e655c534b423930271e150c030000000000000009131d252d33373a3a3a3a3a3a3a3a3a3a3a3a3e4b5865717e8b9386796c5f5346392c2013000000000000000000000000000000000000000000050b1014161819191919191918171513100d09050100000000000000000000000000000000000000000000000000000000081119212830363d43484d5256595c5f61626364656564646361605d5b5854504b46413b352e261f170f060000000000000000000b17232e39434c52565757575757575757544e46454a4f54575a5d5f6061616161605e5c5956514d47413b342c241c130a010000000000000000000000000000000a131b242c343b42484e54585c606366686a6b6c6c6c6c6c6b696865635f5c57534d47413a332b231b12090000000000000000000007121e2935404b57616c77818c959fa8a59b938a837c7773706e6d6d6e6f72757a7f868d969fa8a49b92887e73685e53473c31251a0e020000000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000101c2936434f5c697683909ca5a6a5988c7e7265584c3f3225190c00000000000000000000010b16202a343e49535d67717c86909aa4aba1968c82786e63594f453b30261c12080000000000000000000000000613202c3946535f6c7986939fa6998c7f7266594c403326190d000000000713202d3946535f6c7986929fa79a8d8173675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000000030c161f28313a434c555e677079828b949da69e958c837970675e5b646d768089929ba4a1988f867d746b625950473e352c231a11070000000000000000000000000000000000000000000000000000000000000a16212d3945515d6874808c98a3a3978b7e8894a0a89c9085796d6155493d32261a0e0200000000000000000000000000000000000000000013202c3946535f6c798693a0a99d90837e89949faaa2988d82776c62574c41362c21160b010000000915222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f0200000000000000000d1a26333f4c5864717d8996a2adb9c5d0dae3ebebdfd2c5b8ac9f9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e72655a636c757e776e655d544b423930271e150c030000000000000b151f282f363a3d3d3d3d3d3d3d3d3d3d3d3d3e4b5865717e8b9386796c5f5346392c20130000000000000000000000000000000000000000070f161c2023252526262626262523221f1d1916110c07010000000000000000000000000000000000000000000000000008111a232b333a41484e54595e6265696b6d6f7071717171716f6e6c6a6764605c57524c463f38312921180f0600000000000000000f1c28343f4b555d6363636363636363635f584e50565b606467696b6d6e6e6e6e6d6b6865625d58534c453e362e251c130a000000000000000000000000000009121c252d363e464d53595f64696c70727576787979797978777674726f6c68635e59534c453d352d241b12080000000000000000000b17232f3a46515d68737e89939da7a79d93898178716b6763616060616365696e747b848c96a0aaa49a8f857a6f64594d42362a1f13070000000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000101c2936434f5c697683909ca9b2a5988c7e7265584c3f3225190c0000000000000000000000040e18222d37414b555f6a747e88939da7a89e948a80756b61574c42382e241a0f05000000000000000000000006121f2c3945525f6b7885929ea69a8d8174675a4e4135281c11070000030c17232f3b4854616d7a8793a0a6998c807366594d4033271a0d000000000000000000000000000000000000000000000000000000000000000a151e28313a434c555e677079828b949da69e958c837a70675e55525b656e778089929ba4a1988f867d746b625950473e352c23190f04000000000000000000000000000000000000000000000000000000000005111d2834404c58636f7b87939fa79b8f858c98a4a3978c8074685c5045392d2115090000000000000000000000000000000000000000000013202c3946535f6c798693a0a99c8f8285909ba6a69c91867b70665b50453a30251a0f04000000000915222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f0200000000000000000f1c2935424e5b6774818d99a5b2becad6e1ecf5ebdfd2c5b8ac9f9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e7265636c757e8781776f665d544b423930271e150c030000000006121d27313a41474a4a4a4a4a4a4a4a4a4a4a4a4a4b5865717e8b9386796c5f5346392c20130000000000000000000000000000000000000007111921272c303132333333333231302e2c2926221d18120c05000000000000000000000000000000000000000000000008111a232c353d454c53595f65696e7275787a7c7d7e7e7e7e7d7c7b797674706c68635d57514a433b332a21180f0500000000000000121e2b3844505c676f70707070707070706a5f545b61676c70737678797b7b7b7a797775726e69645e57504840372e251c120800000000000000000000000006111b242e37404850575e656b7075797c7f81838485868686858483817e7b78746f6a645e574f473f362d241a10060000000000000004101c28343f4b57626e79848f9aa5aba0958b81776e67605b575554535456595d6369717a848e99a4aca1968c81756a5e53473b2f23170b0000000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000101c2936434f5c697683909ca9b0a5988c7e7265584c3f3225190c00000000000000000000000006101b252f39434e58626c76818b959faaa69c91877d73695e544a40362b21170d030000000000000000000004121e2b3844515e6a7784909da89b8f8276695d5145392e2319110b0a0d151e28333f4b5763707c8995a2a4978b7e7165584c3f3225190c00000000000000000000000000000000000000000000000000000000000006111c27313a434c555e677079828b949da69e958c837a71685e554c49535c656e778089929ba4a1988f867d746b625950473e352b21160b0000000000000000000000000000000000000000000000000000000000020d18242f3b47535f6a76828e9aa6a09792959ea99f93877b6f63574c4034281c10050000000000000000000000000000000000000000000013202c3946535f6c798693a0aa9d91898c97a2aa9f958a7f746a5f54493e34291e130900000000000915222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000111e2a3744505d6a76838f9ca8b5c1cedae6f2f8ebdfd2c5b8ac9f9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e726568747e87908a81786f665d544b423930271e150d040000000b17232e39434c5256575757575757575757575757575865717e8b9386796c5f5346392c2013000000000000000000000000000000000000050f19232b33383c3e3f3f4040403f3e3d3b3835322e29231d160f0700000000000000000000000000000000000000000006101a232c353e474f565e646b70757a7e818487888a8b8b8b8b8a89878683807c78746e69625c544d453c332a21170d0300000000000013202c3946535f6c787d7d7d7d7d7d7d7c70645f666c72777c80838586878888878684817e7a756f69625a524940372e241a100500000000000000000000030e18222d364049525a626970767c8185888b8e90919293939292918f8d8b8884807b756f68615951483f362c22180e030000000000000814202c3844505c68737f8a96a1aca59a8f84796f655c554f4b484747484a4d51585f68727c87929ea9a89d92867b6f63584c4034281c0f0300000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000101c2936434f5c697683909ca3a3a3988c7e7265584c3f3225190c0000000000000000000000000009131d27323c46505a656f79838d98a2aca3998f857a70665c52473d33291f140a0000000000000000000001101d2936434f5c6875828e9ba79e9285796d61554a3f352b231b1716191f27303a45505b6773808c98a4a195897c6f63564a3d3124170b0000000000000000000000000000000000000000000000000000000000000b17222e38424c555e677079828b949da69e958c837a71685f564c43414a535c656e778089929ba4a1988f867d746b625950473d32271b0f030000000000000000000000000000000000000000000000000000000008131e29333e47515a66717d8995a1a9a29fa1a7a69a8e82766a5f544a40362c21170b0000000000000000000000000000000000000000000013202c3946535f6c798693a0aca39a95979ea9a3998e83786e63584d42382d22170c0200000000000915222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f020000000000000000121f2c3845525e6b7885919eaab7c4d0dde9f6f8ebdfd2c5b8ac9f9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e726567727b848d938a81786f665d544b423930271f160d0300000f1c28343f4b555d63636363636363636363636363636365717e8b9386796c5f5346392c20130000000000000000000000000000000000000b16212b353d44484b4c4c4c4c4c4c4b494745423e39342f282119110800000000000000000000000000000000000000030d18222c353e47505961686f767c81868a8e9193959697989898979694928f8c8984807a746d665f574e453c33291f150b000000000000121f2c3945525f6b78858a8a8a8a8a8a7e72656970777e83888c8f91939495959493918e8a86807a736c645b524940362c22170c020000000000000000000a151f2a343e48525b646c747b81878c9195989a9c9e9f9fa09f9f9e9c9a9794908c86817a736b635a51483e342a1f150a0000000000000c1824303c4854606c7884909ba7aba094897d72675d534b433e3b3a3a3b3d41464e56606b76818c98a4aea3978c8074685c5044382c1f130700000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000101c2936434f5c6976839096969696968c7e7265584c3f3225190c00000000000000000000000000010b16202a343e49535d67717c86909aa4aba1968c82786e63594f453b30261c1208000000000000000000000e1b2734404d5966727e8b97a4a295897d72665b51473d352d272423252a3139424c56616c7884909ca89e9286796d6054473b2e2215090000000000000000000000000000000000000000000000000000000000000e1b27333f4a545e677079828b949da69e958c837a71685f564d433a38414a535c656e778089929ba4a1988f867d746b62594f44382c1f1307000000000000000000000000000000000000000000000000000000030e1925303b454f59636c757d86929fa4a2a1a1a3a4978b7f776f665c52483e33281d110600000000000000000000000000000000000000000013202c3946535f6c798693a0acaca5a2a3a8a79d92877c71675c51463c31261b10060000000000000915222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f02000000000000000013202c3946535f6c7986929facb8c5d2dfebf8f8ebdfd2c5b8ac9f9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e72656069727a838c938a81786f665d544b423931281f150b0000121e2b3844505c676f707070707070707070707070707070717e8b9386796c5f5346392c2013000000000000000000000000000000000005101c28333d474f5557585959595958575654514e4a45403a332b231a11080000000000000000000000000000000000000a151f29343e475059626b727a81878d92969a9da0a2a3a2a2a2a2a3a2a19f9c9995908b857f78706960574e453b31271d12080000000000111e2b3844515e6b778491979797978c80736a727a82898f94989b9ea0a1a1a1a19f9d9a96918c857e766d645b52483e33291e1308000000000000000005101b26313c46505a646d757e858c93989da1a4a5a29f9e9d9c9c9d9fa1a5a4a09c97928c857d756c635a50463c31261b100500000000030f1b2834404c5865717d8995a1aca79b8f83776c61564b4139322f2e2d2e31353c444e5964707b87939faba89c9084786c6054483b2f23160a00000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000101c2936434f5c697683898989898989897e7265584c3f3225190c0000000000000000000000000000040e18222d37414b555f6a747e88939da7a89e948a80756b61574d42382e241a0f050000000000000000000c1825313e4a56636f7b8894a0a69a8f83786d63594f473f3833303031353b424b545e68737d8994a0a69a8e8276695d5145382c1f1306000000000000000000000000000000000000000000000000000000000000111d2a37434f5b667079828b949da69e958c837a71685f564d433a312f38414a535c656e778089929ba4a1988f867d746b6054483b2f22150900000000000000000000000000000000000000000000000000000008131f2b36414c57616b757e878f979c98959495979b9b918981786e645a4f44392e23170b00000000000000000000000000000000000000000013202c3946535f6c798693a0acb6b1aeafaba1968b80756b60554a40352a1f140a000000000000000915222f3c4855626f7b8895a2ada09386796d6053463a2d20130700000000000000000b1724313e4a5764717d8a97a4b1a89c8f8275685b4f4235281c0f02000000000000000013202c3946535f6c798693a0acb9c6d3dfecf9f8ebdfd2c5b8ac9f9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e72655e6068717a838c938a81786f665d544b433a31271c11060013202c3946535f6c787d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7e8b9386796c5f5346392c201300000000000000000000000000000000000814212d39444f5960646566666666656463605e5a56514b443d352c231a10060000000000000000000000000000000006111c26313b464f59626b747c848c92989ea2a4a09c99979695959697989b9ea1a5a19c97908a827a726960574d43392e24190e0300000000111e2a3744515d6a7784909da4a49a8d8173727c858d949a9f9c9a999898999b9da1a5a6a29d97908880766d645a4f453a2f24190e03000000000000000a16212d38434d58626c767f8890979ea4a8a29d99959391909090919295989da2a8a39d968f877e756c62584d43382d22160b0000000005121e2b3743505c6875818d99a5afa3978b7e73675b4f44392f2722212122242a323d48535f6b77838f9ba7ada195887c7064574b3f3226190d01000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000101c2936434f5c69757c7c7c7c7c7c7c7c7c7165584b3f3225180c00000000000000000000000000000006101b252f39434e58626c76818b959fa9a69c91877d73695e544a40362b21170d0300000000000000000916222e3b47535f6b77838f9ba6a0948a7f746b61595049433f3d3c3e41464d545d66707a848f9aa6a195897d7266594d4135291c1004000000000000000000000000000000000000000000000000000000000000121e2b3845515e6b78828b949da69e958c837a71685f564d433a3128262f38414a535c656e778089929ba4a1988f867c6f6356493c302316090000000000000000000000000000000000000000000000000000000c1824303c47535e69737d87909997908b8988888a8f959b938a80766c61564a3f33281c1004000000000000000000000000000000000000000013202c3946535f6c798693a0acb5b5b5afa59a8f84796f64594e44392e23180e03000002050709090915222f3c4855626f7b8895a2ada09386796d6053463a2d201307000000000001070b0e1724313e4a5764717d8a97a4afa89c8f8275685b4f4235281c0f0c090400000000000013202c3946535f6c798693a0acb9c6d3dfecf9f8ebdfd2c5b8ac9f9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e726b6b6b6b6b7179828b938a81786f665d554c43392e23170b0013202c3946535f6c79868a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8f9386796c5f5346392c201300000000000000000000000000000000000a1724303d4955616b70727273737372716f6d6a66625c564f473e352c22170d020000000000000000000000000000010c17222d38434d57616b757e868f969da4a59e9994908d8b898888898a8c8e91959aa0a6a29b948c847b72695f554b40352b20150900000000111d2a3743505d6a7683909daaa79a8e81747b858e969c9793908d8c8c8c8c8e91959aa0a7a8a19a928980766c61574c41362b1f1408000000000000040f1b27323e49545f6a747e88919aa2a9a59e97918d8986848383838486898c91979da4a8a19990877e74695f54493e33281c11050000000815212e3a46535f6c7884919da9ac9f93877a6e62564a3f33281d1614141518202b37434e5a66737f8b98a4b0a5988c8073675a4e4235291c1003000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000000000f1b2834414d59646d6f6f6f6f6f6f6f6f6f6a6055493d3024170b0000000000000000000204040404040409131d27323c46505a656f79838d98a2aca3998f857a70665c52483d33291f150a000000000000000006121e2b37434f5b67737e8a95a1a69b91877d736b625b544f4c4a494a4d52575e666f78828c96a1a69b9084786d6155493d3125190d00000000000000000000010202020202020202020201000000000000000000111e2b3744505d68737c858e979e958c837a71685f564d443a31281f1d262f38414a535c656e778089929b988f867d746b6054483b2f221509000000000000000000000000000000000000000000000000000004101c2835404c58646f7a858f99958d85807c7b7b7e848b939c92887d72675b5044382c201407000000000000000000000000000000000000000013202c3946535f6c798693a0a8a8a8a8a89e93887d73685d52483d32271c120701060a0e111415161616222f3c4855626f7b8895a2a8a09386796d6053463a2d20130700000000060d12171a1c24313e4a5764717d8a97a2a2a29c8f8275685b4f4235281c1b19140f09010000000013202c3946525f6c7985929facb8c5d2deebf8f8ebdfd2c5b8ac9f9285786b5f5246525f6c7986929c908376695c4f4336291c100300000000000013202c3946535f6c7986938c7e787878787878787879828b948a82786f675e554a3f33271b0f0013202c3946535f6c798693939393939393939393939393939393939386796c5f5346392c201300000000000000000000000000000000000b1825323e4b5865717d7e7f8080807e7d7c7976726d68615950473e34291e1308000000000000000000000000000006121d28343f4a545f69737d879098a0a8a29b938d8884817e7c7b7b7c7d7f8285898f959ca3a69e968e857b71675c52473c31261a0f04000000101d2a3643505d697683909da9a89b8e8278838d9796908b878381807e7e808285898e959ca4aca49b92887d73685d52473c3025190e0200000000000814202c38434f5a65717b86909aa3aca49b938c86817c797776767677797c80858c939ba3aba29990867b71665b4f44392d21160a0000000a1724303d4956626f7b8894a0ada99c9083776b5e52463a2e22160b0707090f1a26323e4a57636f7c8895a1aea89b8f83766a5d5144382b1f1205000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000000000c1825313c47525b6163636363636363636360584f44392d21150800000000000000060b0e101111111111111116202a343e48535d67717b86909aa4aba1978c82786e64594f453b31261c120800000000000000030e1b27333e4a56626d79848f9aa5a2988f857c746d66605b58565657595d63697078818a949da8a0958a7e73685c5045392d2115090000000000000001060a0d0f0f0f0f0f0f0f0f0f0f0e0b07020000000000000f1c2834404c57616a737c858e958c837a71685f564d443b32281f16141d262f38414a535c656e778089928f867d746b62594f43382c1f130700000000000000000000000000000000000000000000000000000713202c3845515d6975808c97978d837b746f6e6f7278818a949a8f84786c6054483c3023170b000000000000000000000000000000000000000013202c3946535f6c7986939b9b9b9b9b9b978c82776c61564c41362b20160b070d12171b1e2022232322222f3c4855626f7b88959b9b9b9386796d6053463a2d2013070000000710171e23272929313e4a5764717d8a95959595958f8275685b4f423529292825201a130b02000000121f2b3845515e6b7784919daab7c3d0dce9f5f8ebdfd2c5b8ac9f9285786b5f5246525f6c7986929c908376695c4f4336291c100902000000000013202c3946535f6c7986938d85858585858585858585858a95948b827870675c5044372b1e110013202c3946535f6c798686868686868686868686868686868686868686796c5f5346392c201300000000000000000000000000000000000b1825323e4b5865717e8b8c8c8c8c8b8a8886837e79726b625950453b3024190d02000000000000000000000000000b17232e3a45505b66717b858f99a2aaa2999089827c777471706f6f6f707275797d838a919aa2a8a0968d83796e63594d42372b201409000000101d2936434f5c697683909ca9a89c8f82808a95938c857f7a77747372727375787d838a929ba5ada39a8f857a6f64584d41362a1e120700000000000c1824303c4854606b77828d98a2aca59b9289817a75706d6b6a69696b6d70747a8189919aa4aba2988d82776c6155493e32261a0e0200000c1926323f4b5865717e8a97a3b0a69a8d8174685b4f42362a1e12060000000a16222e3b4754606c7986929fabab9e9285796c6053463a2d211407000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000000000814202b3640495055565656565656565656544e463d33281c10040000000000040b12171b1d1e1e1e1e1e1e1e1e1e222c37414b555f6a747e88939da7a89e948a80756b61574d42382e241a0f050000000000000a151e28313a45515c68737e89939eaaa1978f867e77716c676563636466696e747b828a939ca6a4998e83786d62574b40352c23190f040000000000050c12171a1b1c1c1c1c1c1c1c1c1c1a17130d0700000000000c18242f3b454e57616a727b858c837a71685f564d443b322920160d0b141d262f38414a535c656e778089867d746b625950473d32271b0f0300000000000000000000000000000000000000000000000000000916222f3b4854616d7985919c90857b7169636162676f78828d9995897d7164584c3f33261a0d000000000000000000000000000000000000000013202c3946535f6c79868e8e8e8e8e8e8e8e867b70655a4f453a2f241a0f0d13181e23272a2d2f30302f2d2f3c4855626f7b888e8e8e8e8e86796d6053463a2d201307000006101922292f333536363e4a5764717d888888888888888275685b4f4236363634312c251d140b000000111d2a3743505c6976828f9ba8b4c1cdd9e5f1f8ebdfd2c5b8ac9f9285786b5f5246525f6c7986929c908376695c4f4336291e1a140d050000000013202c3946535f6c798693959292929292929292929292949b9d948b82786c5f5245392c1f1200131f2c3946525f6b767979797979797979797979797979797979797979766b5f5246392c1f1300000000000000000000000000000000000b1825323e4b5865717e8b98999999989795928f8a847d756b62574c41352a1e120600000000000000000000000004101c28343f4b56616d77828d97a1aba39990877e77716b6765636262636466696d72788088909aa4a89f958b80756a5f53483d3125190e020000101c2936434f5c697683909ca9a99c8f838691938a817a736e6a6866656566696d72788089939da7aba1968b8075695e52463b2f23170b00000000030f1c2834404d5965707c88939fa9a99e938980776f6964615e5d5c5d5e6064696f767f89929da7a99f94897d72665a4e42362a1e120600000e1b2834414d5a6773808d99a6b1a4988b7e7265594c4033271a0e0200000006131f2b3844515e6a7783909da9ada194877b6e6255483c2f221609000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000030f1a242e373f454849494949494949494947433c342b21160b0000000000050e161d23272a2a2a2a2a2a2a2a2a2a2a2a2f39434e58626c76818b959fa9a69c92877d73695e544a40362c21170d030000000006111c27313a434c555e677079838f9ca9a9a1989089827c787471706f7072757a7f858c949ca5aea296897d746b625950473e352b21160b000000000710171e23262828282828282828282827241f1811090000000007131e29333c454e576069727b837a71685f564d443b322920170e04020b141d262f38414a535c656e77807d746b625950473e352b21160a0000000000000000000000000000000000000000000000000000000b1824313e4a5763707c8995978b7f74695f5754565d66717c8894998d8074675b4e4135281c0f020000000000000000000000000000000000000013202c3946535f6c798282828282828282827e74695e53493e3329211712191e24292e3336393b3c3c3c3a373c4855626f7b82828282828282796d6053463a2d20130700030e18222c343a3f424242424a5763707b7b7b7b7b7b7b7b7b74685b4f42424242413d372f261c120700000f1c2835414e5a6773808c98a5b1bdc9d4e0eaf4ebdfd2c5b8ac9f9285786b5f5246525f6c7986929c908376695c4f43362e2b251f170e0500000013202c3946535f6c79868b8b8b8b8b8b8b8b8b8b8b8b8b8e98988f867d74695e5145382b1f1200111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b645a4f43372a1e1100000000000000000000000000000000000b1825323e4b5865717e8b8d8d8d8d8e9194999b958f877d73695d52463a2e22160a0000000000000000000000000915212d3844505c67737e89949fa9a79c91877e756d65605b585655555657595d61676e757e88929ca7a79c91877b7065594d42362a1e12060000101c2936434f5c697683909ca9aa9e928a8d958a81786f68635e5b5958595a5c61676e77818b95a0aba89d91867a6f63574b3f33271b0f0300000006121f2b3844505d6975818d999c9d9f988c82776e655e585452504f505154585e656d76808b96a1aca59a8e82776b5f53473a2e2216090000101c2936424f5c6875828e9ba8afa296897c7063574a3d3124180b0000000003101d2936424f5c6875828e9ba8afa396897d7063574a3d3124170a000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000000000008121c252d34393c3c3c3c3c3c3c3c3c3c3b37322b22190f0500000000030d1720282e3336373737373737373737373737373c46505a656f79838d98a2aca3998f857a70665c52483d33291f150a000000000b17222e38424c555e677079828b949faba9aaa29b948e8884807e7c7c7d7e82868b91979ea6aaaba59990877d746b625950473d32271b0f03000006101921292f3335353535353535353535332f2a231b1208000000020d17212a333c454e576069727971685f564d443b322920170e050000020b141d262f38414a535c656e76746b625950473e352c23190f040000000000000000000000000000000000000000000000000000000c1926333f4c5965727e8b9894877b6f63574d484b545f6b7884919c8f8276695c504336291d100300000000000000000000000000000000000000121f2c3845515e6973757575757575757575746d62574d47423b33291f1e242a2f353a3f4346484949484744404754606b7475757575757575736a5e5245392c1f13060009141f2a343e454b4f4f4f4f4f545f696e6f6f6f6f6f6f6f6f6c63584f4f4f4f4f4d4841382e24190d02000d1926323f4b5764707c8894a0acb8c3ced8e2eaebdfd2c5b8ac9f9285786b5f5246525f6c7986929c908376695c4f433d3b36302920160c02000013202c3946535f6c797e7e7e7e7e7e7e7e7e7e7e7e7e7e88958f867d746b62584d4135291d10000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a52483e32261a0e00000000000000000000000000000000000b1825323e4b5865717e82818080818284888d959e998f857a6e63574b3e3226190d0000000000000000000000000c1925313d4955616c78848f9aa5aca1958a80756c635b544f4c4a4948494b4d51565c646c76808b96a1aca3988d81756a5e52463a2e22160a0000101c2936434f5c697683909ca9afa49b96988e83786f665e57524f4d4c4c4d50555c656f79848f9aa6aea3978b8073675b4f43372b1f13060000000714212e3a4753606c79858b8d8f919392877b70655c534d484543434345484c535b646e7984909ba7ab9f93877b6f63574a3e3225190d0000111e2a3744505d6a7683909da9aea194887b6e6255483c2f22160900000000000e1b2734414d5a6773808d9aa6b1a4978b7e7165584b3e3225180c000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000000000a131b22282d2f3030303030303030302e2b262019100700000000000a151f2932393f4344444444444444444444444444444448535d67717b86909aa4aba1978c82786e64594f453b31261c12070000000e1b27333f4a545e677079828b949da6a09c9fa5a59f9994908d8a89898a8b8e92969ca2a9a29e9fa4a29990877d746b62594f44382c1f130700030e18222b333a3f42424242424242424242403b352d241a1005000000050f18212a333c454e5760696c685f564d443b322920170e0500000000020b141d262f38414a535c656a69625950473e352c231a1107000000000000000000000000000000000000000000000000000000000d192633404c596673808c999286796c5f53463b43505c6976838f9c9084776a5d5044372a1d110400000000000000000000000000000000000000101d2935414d58616768686868686868686868635b5656534d453b3126292f353b41464b4f525556565553504c474f5a6267686868686868686761584d4236291d1104000d1925313c4650575b5c5c5c5c5c5c5e626262626262626262605c5c5c5c5c5c5c59534a40352a1e1206000a16232f3b4854606c7884909ba7b2bcc6d0d8dfe4dfd2c5b8ac9f9285786b5f524a525f6c7986929c908376695c4f4a4947423b32281e13080000121f2b3844505c68707171717171717171717171757e878f8f867c746b625950463c3025190d000a16212c3740484f525353535353535353535353535353535353535353524f4840372c21160a00000000000000000000000000000000000b1824313e4a57636f76757473737475787c838c96a1978b7f73675a4e4135281c0f020000000000000000000004101c2935414d5965717d8995a0aca79b9084796e635a5149433f3d3c3c3c3e41454a525a646e7984909ba7a99e92867a6f63574b3e32261a0e0100101c2936434f5c697683909ca9b6ada69e93877c71675d544c4642403f3f41444b535d67727d8995a1ada89c9084786c5f53473b2f22160a0000000814212e3b4754616d797d7e818284868882766a5e544a423c38373637383c4149525d68737e8a96a2aea3978b7f73665a4d4135281c0f0300121f2b3845515e6b7884919eaaada093867a6d6054473a2e21140700000000000d1926333f4c5966727f8c99a5b2a5988c7f7266594c3f3326190c000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000000000000010911171c2022232323232323232323221f1b150e07000000000004101c27313b444b4f5151515151515151515151515151515151555f6a747e88939da7a89e948a80756b61574d42382e23180d010000111d2a37434f5b667079828b949da69e9590939aa1a7a5a09c9997969696989a9ea2a7a49e9791939ba4a29990877d746b6054483b2f2215090008141f2a343d454b4e4f4f4f4f4f4f4f4f4f4c463f362c21160b00000000060f18212a333c454e575d5f5c564d443b322920170e05000000000000020b141d262f38414a535a5e5d5850473e352c231a110800000000000000000000000000000000000000000000000000000000000d192633404c596673808c999386796d6054484045505d697683909c9083766a5d5044372a1d1104000000000000000000000000000000000000000d1925303b464f565a5b5b5b5b5b5b5b5b6063636363625f574d42372e343a40464c51575b5f61636362605c58524c50575b5b5b5b5b5b5b5b5b564f463c3125190d0100111d2936424d58626869696969696969676157555555555c656969696969696969655c52463a2e2216090007131f2c3844505c67737e8a95a0aab4bec6cdd4d8dcd2c5b8ac9f9285786b5f5656565f6c7986929c908376695c565656534c443a3025190d0100101c2834404b565e646565656565656565656d757e87908f867c736a625950473e342a1f14080005101a252e373e4346464646464646464646464646464646464646464646433e372e251a100500000000000000000000000000000000000916222f3b47525d65696867666667686b717a85919d9b8f8276695d5043372a1d1104000000000000000000000713202c3845515d6975828e9aa5aea2968a7e73685c52483f3833302f2f303134394048525d68737f8b96a3afa3978b7f73675b4e42362a1d110500101c2936434f5c697683909ca9b6b1a5998d82766b60554b423b363332323439414b56616d7884909ca8aca094887c6f63574a3e3225190c0000000713202c3945515d676e7072747678797b7d72665a4e4240403f3e3d3b393637414b56626e7a86929eaba79b8f8276695d5044372b1e120500131f2c3945525f6c7885929facac9f9286796c5f5346392d20130600000000000c1825323f4b5865717e8b98a5b1a6998d807366594d4033271a0d000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000000000000060c10141616161616161616161615130f0a040000000000000915212d38434d565b5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d626c76818b959fa9a69c92877d73695f544a4035291d12050000121e2b3845515e6b78828b949da69e958c83898f969ca1a5a8a6a4a3a3a3a5a7a7a39e99938c8589929ba4a2998f867c6f6356493c30231609000d1925303c464f575b5b5b5b5b5b5b5b5b5b5851483e33271b0f0300000000060f18212a333c454c5152504b443b322920170e050000000000000000020b141d262f3841484e51504d463e352c231a11080000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8b9795887c706459514d4f57616d7985919b8f8275695c4f4336291d10030000000000000000000000000000000000000008141f2a343d454b4e4e4e4e4e4e4e56616b6f6f6f6f6f695f53473b393f454b52575d62676b6e6f6f6e6c68635d564e4b4e4e4e4e4e4e4e4e4e4b453d342a1f14090000121f2c3845525e6a737575757575757573695d51484b57636e75757575757575756e63574a3e3124180b00030f1b27333f4b57626d79848e98a2acb4bcc2c8cccfd1c5b8ac9f9285786b63636363636c7986929c90837669636363635e564c41352a1d1105000c18232f3a444d53575858585858585c646d767f88908e867c736a615850473e352c22180e03000009131c252c32373939393939393939393939393939393939393939393937322c251c130900000000000000000000000000000000000006121e2a36414b535a5d5c5a5a595a5c606875828e9b9e9184776b5e5144382b1e1105000000000000000000000a16222f3b4854616d7985929eaaab9e92867a6e62564b40362d272422222325282e36404b57626e7a86929faba79b8f83776b5e5246392d20140700101c2936434f5c697683909ca9b6ada195897d71655a4e4339302a272526282f3944505c6874808c99a5b0a4988b7f73665a4d4135281c0f03000004111d2935404b555d62646667696b6d6f706b61564b4c4c4c4c4b4a4845423e3a46525e6a76828f9ba8aa9e9185786c5f5346392d2013070013202c3946535f6c7986939facac9f9285786b5f5245392c1f120600000000000b1824313e4b5764717e8b98a4b1a79a8d8173675a4d4134271a0e000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000000000000000004070909090909090909090909060300000000000000000c1825313d49555f676a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6f79838d98a2ada3998f857b70665c51463a2e2115080000111e2b3744505d68737c858e979e958c837a7e858b9095999c9fa1a2a2a1a09e9b97938d88817b8089929b9990877d746b6054483b2f22150900101d2935414d586167686868686868686868635a4f44382c1f13060000000000060f18212a333b41444644403a322920170e0500000000000000000000020b141d262f373d424444413b342c231a1108000000000000000000000000000000000000000000000000000000000000000b1724313d4a56636f7c8894988c81766b635c595b6169737e8995988c8073665a4d4134281b0e0200000000000000000000000000000000000000020d18222b333a3f4142424242424d5966737c7c7c7c7b7063574a3e444a50575d63686e73777a7c7c7b78746f6860574e4442424242424242413f3a332b22180e03000013202c3946535f6c7982828282828282786b5f52454c5865727e8282828282827e7165584b3e3225180b00000b17232f3a46515c67727c87909aa2aab1b7bcc0c3c4c5b8ac9f928578707070707070707986929c908376707070706f685e5246392d2014070007121d28323b42484b4b4b4b4b4d59646e768088918e857c736a61584f463e352c231a1006000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a26211a130a01000000000000000000000000000000000000020e19242f3942494e565c5e5e5d5e5f626975828e9b9e9184776b5e5144382b1e1105000000000000000000000c1825323e4b5763707c8995a1aea89b8f82766a5e52463a2f241b17161516181d242f3a46525e6a76838f9ba8ab9f93877a6e6155483c2f23160a00101c2936434f5c697683909ca9b6aa9e9185796d6155493d32271e1a19191d2834404c5864707c8995a2aea79b8f8276695d5044372b1e11050000010d18242f39434c525557595b5c5e6062636059565758595959585654524e4a46414e5a6773808c99a5ada094877a6e6154483b2e2215080013202c3946535f6c798693a0acac9f9285786b5f5245382c1f120500000000000b1724313e4a5764717d8a97a4b1a79a8e8174675a4d4134271a0e000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000000000000000000000d1a2734404d59667177777777777777777777777777777777777777777777777b86909ca8aba1978d82786e6256493d3024170a00000f1c2834404c57616a737c858e958c837a7173797f84898d90929495959493918e8b87827c76707680899290877d746b62594f43382c1f130700121f2c3845515e69737575757575757575746c6054473b2e211508000000000000060f1821293035383938342f2820170e05000000000000000000000000020b141d252c3236373735302a221a110800000000000000000000000000000000000000000000000000000000000000000915222e3b4753606c7884909b92877d746d6866676b727b858f9a93877b6f63574b3e3225190c00000000000000000000000000000000000000000006101921282e3235353535353f4c5965727e8989897e72665a4e4a4f555b62686e747a7f8487898988858079726960564c4136353535353535322e292119100600000013202c3946535f6c79868f8f8f8f8f85786b5f52454c5865727e8c8f8f8f8f8b7e7165584b3e3225180b000006121e2935404b56606b757e8890989fa6abb0b3b6b8b9b8ac9f92857d7d7d7d7d7d7d7d7d86929c90837d7d7d7d7d7a6e6155483b2e22150800010c16202930373c3e3e3e3e424f5b68758089918e857c736a61584f463d342c231a10070000000000010910161a1e1f20202020202020202020202020202020202020201f1e1a16100901000000000000000000000000000000000000000008131d27313d495560686b6a6a6b6c6e737b86919e9b8f8376695d5044372a1d1104000000000000000000000e1a2734404d5966727f8c98a5b1a5988c8073675a4e4235291d120b09090a0c121e2936424e5a6773808c99a5afa2968a7d7064574b3e3225190c00101c2936434f5c697683909ca9b4a79b8e8275695d5044382c21150e0c0c17232f3c4854616d7a86939facaa9e9185786c5f5246392d20140700000007131d28313a4146494a4c4e505253555a5d606264656666656463615e5a56524d4b5864717d8a97a3afa295897c6f6356493c3023160a0013202c3946535f6c798693a0acac9f9285786b5f5245382c1f120500000000000b1724313e4a5764717d8a97a4b1a79a8e8174675a4d4134271a0e000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000000000000000000000e1a2734414d5a6774818484848484848484848484848484848484848484848484848f9ba8b3a99e948a7d7164574a3e3124170b00000c18242f3b454e57616a727b858c837a7168686e73787d818386878888888785827e7b76716b656d768089877d746b625950473d32271b0f030013202c3946535f6c7982828282828282827b6f6255483c2f22150900000000000000060f171e24292b2c2b28231d160e050000000000000000000000000000020b131a2126292b2a28241f18100800000000000000000000000000000000000000000000000000000000000000000006131f2b3844505c68737f8a959990877e78747374777d858d97988d82766b5f53473b2f22160a00000000000000000000000000000000000000000000070f171d222628282828313e4b5764707d8a968e82766a5f57565b60666d737980858b9093969694918b847b72685e53473c31282828282826221d1710070000000013202c3946535f6c7986939c9c9c9285786b5f52454c5865727e8c989c9c988b7e7165584b3e3225180b0000010d18232e39444e59636c757e868e959aa0a4a7a9abacacaca0958b8a8a8a8a8a8a8a8a8a8b959e938a8a8a8a8a887b6e6155483b2e2215080000040e171f262b2f31323234414d5a66707a838c857c736a61584f463d342b221a10070000000000000000050a0e1113131313131313131313131313131313131313131313110e0a0500000000000000000000000000000000000000000000010d1a2734404d59667178777777787a7e858d97a0968b7f73675a4e4235281c0f0300000000000000000000101c2935424f5b6875818e9aa7afa3968a7d7064574b3e3226190d01000000010d1926323e4b5764707d8a96a3b0a5998c8073665a4d4134271b0e00101c2936434f5c697683909ca9b1a5988c7f72665a4d4134281c1004000713202c3945515e6a7784909da9ada094877a6e6155483b2f221509000000010c161f282f353a3c3e414950565c6166696d6f7172727372716f6d6a67625e585256636f7c8995a2afa3978a7d7064574a3d3124170b0013202c3946535f6c798693a0acac9f9285786b5f5245392c1f120600000000000b1824313e4b5764717e8b97a4b1a79a8d8174675a4d4134271a0e000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000000000000000000000e1a2734414d5a6774818e919191919191919191919191919191919191919191919196a0abb7b0a4978a7d7164574a3e3124170b000007131e29333c454e576069727b837a71685f5d63686c717477797a7b7b7b7a7876726f6a65605b646d76807d746b625950473e352b21160a000013202c3946535f6c79868f8f8f8f8f8f887b6f6255483c2f2215090000000000000000050d13181c1f1f1e1c18120c0400000000000000000000000000000000010910151a1d1e1e1c18140e0600000000000000000000000000000000000000000000000000000000000000000000030f1b27333f4b57626d78838d9799908a8481808183888f969990867b70655a4e43372b1f13060000000000000000000000000000000000000000000000050c1216191b1b1b232f3c4955626e7b889493877c71686463666c72787e848b91969ba0a2a2a19c968e847a6f64594d42362a1e1b1b1b1a16120c05000000000013202c3946535f6c798693a0a99f9285786b5f52454c5865727e8c98a5a5988b7e7165584b3e3225180b00000007121d28323d47515a636c747c83898f94989b9d9e9fa0a0a09d97969696969696969696979da09c9796969695887b6e6155483b2e221508000000050d141a1f23252525323e49545e68717a837c736a61584f463d342b2219100700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a2734414d5a67737f84848485878a90979d978e84796e63574b3e3226190d0100000000000000000000111e2a3744505d6a7683909ca9aea195887b6f6255493c2f23160a00000000000a16232f3c4955626f7b8895a1aea79b8e8275685c4f4236291c1000101c2936434f5c697683909ca9afa396897d7064574a3e3125190c000004101d2a36434f5c6875828e9ba8afa296897c7063564a3d3024170a00000000040d161e242a313a434b535b61676d7276797b7d7e7f807f7e7c7a77736e69635d56616e7b8894a1aea4978b7e7164574b3e3125180b00131f2c3946525f6c7985929facac9f9286796c5f5346392c20130600000000000c1825323e4b5865717e8b98a4b1a69a8d8073665a4d4034271a0d000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000000000000000000000e1a2734414d5a6774818e9a9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1a8acacaca4978a7d7164574a3e3124170b0000020d17212a333c454e576069727971685f5651575c6164686a6c6e6f6f6e6d6b6966635e5a54525b646d76756b625950473e352c23190f04000013202c3946535f6c7986939c9c9c9c95887b6f6255483c2f22150900000000000000000002080c101213120f0c07010000000000000000000000000000000000000004090d1011110f0c08020000000000000000000000000000000000000000000000000000000000000000000000000b17232f3a46515c67717b858e969b95908d8c8d8f94999890877e74695f54493d32261a0e0300000000000000000000000000000000000000000000000001060a0d0e0f14212d3a46535f6c788591988d837a73707072777d83898f969ca2a4a1a0a0a2a5a0968c81756a5e52463a2e22160f0e0d0a060100000000000013202c3946535f6c798693a0ac9f9285786b5f52454c5865727e8c98a5a5988b7e7165584b3e3225180b000000000b16212b353f48515a626a71787e83888b8e9092939393939393939393939393939393939393939393939393887b6e6155483b2e2215080000000002090f13161818212d38434c565f687179736a61584f463d342b221910070000000000000000000000000000000000000000000000050a0d0f0f0f0f0f0f0d0a050000000000000000000000000000000000000000000000000000040b111926323e4b57636f7b8791919294979895918c857c72685d52463a2e22160a0000000000000000000000121f2b3845515e6b7884919eaaada093877a6d6054473a2e21140800000000000814212e3a4754606d7a8793a0ada99c9083766a5d5044372a1e1100101c2936434f5c697683909ca9aea194887b6e6255483c2f2316090000010e1b2734414d5a6773808d9aa6b1a4978b7e7164584b3e3225180c000000000006111b253039434c555d656c73787e8285888a8b8c8c8c8b8986837f7a756e6861616e7b8894a1aea5988b7e7165584b3e3225180b00121f2c3845525e6b7885919eabaca09386796d6053473a2d21140700000000000c1926333f4c5965727e8c98a5b2a6998c807366594c403326190d000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000000000000000000000e1a2734414d5a6774818e9aa0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0978a7d7164574a3e3124170b000000050f18212a333c454e5760696c685f564d464b5054585b5e6061626261615f5d5a56524e4949525b646a6a625950473e352c231a110700000013202c3946535f6c798693a0a8a8a295887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2935404a555f69737c848c92989c9a999a9c99948d867e756c62584d42372c21150a00000000000000000000000000000000000000000000000000000000000005121e2b3744505d6975828e9a958c84807d7c7e83888e949ba1a39d9895939395999e9d92867a6f63574a3e3226190d010000000000000000000013202c3946535f6c798693a0a09f9285786b5f52454c5865727e8c98a0a0988b7e7165584b3e3225180b00000000040f19232d363f48505860676d72777b7f828485868686868686868686868686868686868686868686868686867b6e6155483b2e22150800000000000003070a0b101b26313a434d565f686c6961584f463d342b2219100700000000000000000000000000000000000000000000040b11161a1c1c1c1c1c1c1a16110b040000000000000000000000000000000000000000000000080f161c22282e3a46525e6a76828e9a978e8c8b8985817a736a60564c41352a1e12060000000000000000000000131f2c3946525f6c7985929facac9f9286796c5f5346392d20130600000000000613202d3946535f6c7986929facaa9e9184776b5e5145382b1f1200101c2936434f5c697683909ca9aca09386796d6053473a2d2114070000000d1926333f4c5965727e8c98a5b2a5988c7f7266594c403326190d00000000020d18222d37414b555e676f777e84898e929597989999989795938f8b868079726b626d7a8794a1aea5988b7e7165584b3e3225180b00111e2b3744515d6a7784909daaada194877b6e6155483b2f22150900000000000e1a2734404d5a6673808d99a6b1a4988b7e7265584b3f3225190c000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79a8d8174675a4d4134271b0e01000a1724303d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000000000000000000000e1a2734414d5a6774818e9393939393939393939393939393939393939393939393939393939393938a7d7164574a3e3124170b00000000060f18212a333c454e575d5f5c564d443b4044484c4f5153545555555452504d4a46423d4049525a5e5d5850473e352c231a11080000000013202c3946535f6c798693a0acafa295887b6f6255483c2f221509000000000004090d10121212121212121212121212121212121212121212121212121212121212121212121212100d0904000000000000000000000000000000000000000000000000000000000000000000000000010d18232e39434d57616a727a81878c8f929292908d88837c746c635a50463b31261b1004000000000000000000000000000000000000000000000000000000000000030f1c2834414d5966727e8a969e96908c8a898b8f949aa0a49e98928c888686898d949c978b7f73675a4e4235291d10040000000000000000000013202c3946535f6c7986939393939285786b5f52454c5865727e8c939393938b7e7165584b3e3225180b000000000007111b242d363e464e555c61676b6f7275777879797979797979797979797979797979797979797979797979776d6154483b2e211508000000000000000000000a151f28313a434d565c5f5d574f463d342b2219100700000000000000000000000000000000000000000000050e161c222628292929292826221c160e050000000000000000000000000000000000000000020a121920272e33393e424e5a66727e8a969386807e7c79756f6961584e443a2f251e170f070000000000000000000013202c3946535f6c798693a0acac9f9285786b5f5245392c1f1206000000000005121f2c3945525f6b7885929facac9f9285786c5f5246392c1f1300101c2936434f5c697683909ca9ab9f9285786c5f5245392c1f13060000000b1825323e4b5864717e8b97a4b1a69a8d8073675a4d4034271a0e0000000008131e29343f49535d67707981898f959a9ea1a3a5a4a2a1a1a19f9b97918b847d746c6d7a8794a1aea5988b7e7165584b3e3225180b00101d2936434f5c6975828f9ba8afa295897c6f6356493d3024170b00000000020f1c2835424e5b6874818e9aa7b0a3968a7d7064574a3e3124180b000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca79b8e8175685b4f4235291c0f03000a1724313d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000000000000000000000e1a2734414d5a67748186868686868686868686868686868686868686868686868686868686868686867d7164574a3e3124170b0000000000060f18212a333c454c5152504b443b3234383c3f42454648484848474644413e3a36313740484e51514d473e352c231a1108000000000013202c3946535f6c798693a0acaca295887b6f6255483c2f22150900000000080f15191d1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1d1a150f0800000000000000000000000000000000000000000000000000000000000000000000000007121c27313b454e5760686f767b808385868584817c77716a625a51483e342a1f150a00000000000000000000000000000000000000000000000000000000000000000c1925313d4955616d7985909ba19c989696989b9fa59f99938c86817c797a7c828a939b8f83766a5e5145382c1f13060000000000000000000013202c3946535f6c7986868686868685786b5f52454c5865727e8686868686867e7165584b3e3225180b00000000000009121b242c353c434a50565b5f6366686a6b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c665c5145382c20130700000000000000000000030d161f28313b444b5053514d453d342b2219100700000000000000000000000000000000000000000000040e1720272e32353636363635322e2720170e04000000000000000000000000000000000000030b141c242b32393f444a4e5256626e7a8692968a7e72706d69645e574f48433d3730292119110800000000000000000013202c3946535f6c798693a0acac9f9285786b5f5245382c1f1205000000000003121f2c3845525f6b7885929facac9f9386796c5f5346392c201300101c2936434f5c697683909ca9ab9e9184776b5e5145382b1e12050000000a1724313d4a5764707d8a97a4b0a79a8e8174675b4e4134281b0e000000020d19242f3b46505b656f79828b939aa1a6aaa49f9b989694949495989b9c968f877e756d7a8794a1aea5988b7e7165584b3e3225180b000f1b2835414e5b6774818d9aa6b0a4978b7e7165584c3f32261a0d0100000005111e2b3744505d6976838f9ca9aea195887b6f6256493c3023160a000000000000000e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120500000000000000000013202c3946535f6c798693a0aca99c8f83766a5d5044372b1f1307000b1724313e4a5764717d8a97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000000000000000000000000000000000000000000000000000000000000000e1a2734404d5a6672797979797979797979797979797979797979797979797979797979797979797979796f63574a3d3124170a000000000000060f18212a333b41444644403a3229282c303336383a3b3c3c3b3a393735322e2a262e373d424544413c352c231a110800000000000013202c3946535f6c798693a0a0a0a095887b6f6255483c2f2215090000000912192025292b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2926201a120a0000000000000000000000000000000000000000000000000000000000000000000000000b15202a333c454e565e646a6f73767879797774716c665f5850483f362c22180e0300000000000000000000000000000000000000000000000000000000000000000915212d3945515c68737e89939ca4a5a3a3a4a5a09a948e88817b75706d6d7178818b969286796d6054473b2e22150900000000000000000000131f2c3946525f6b7679797979797979766a5e51454b58647079797979797979797064574b3e3125180b0000000000000009121b232a32393f454a4f5357595c5e5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5b544a3f34281c10040000000000000000000000040d161f29323a40444645413b342b2219100700000000000000000000000000000000000000000000000b16202932393e4242424242423e39322920160b0000000000000000000000000000000000030c151d262e363d444a50555a5e62656975828e9a8e83776c6a6865625d59544e48413a332b231a1108000000000000000013202c3946535f6c798693a0acac9f9285786b5f5245382c1f1205000000000005121f2c3845525f6b7885929facaca09386796c5f5346392c201300101c2936434f5c697683909ca9aa9e9184776a5d5144372a1e11040000000a1723303d4a5663707d8a96a3b0a89b8e8275685b4e4235281b0f00000007131e2a35414c57626d77818b949da5aca69f98938f8b89888787898b8f93999990877e747a8794a1aea5988b7e7165584b3e3225180b000d1a26333f4c5965727e8b97a4b0a6998d8073675b4e4235291d11050000000814212d3a46525f6c7885919eaaac9f93867a6d6054473b2e211508000000000000020e1b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f120908050100000000000013202c3946535f6c798693a0acab9e9185786c6053473b2f23180d060b1825313e4b5764717e8b97a4b0a3968a7d7063564a3d3023170a0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b00000000000000000000000000000000000202020202020202020201000000000000000000000c1925323e4a5660696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c675e53473b2e22160900000000000000060f1821293035383938342f28201c202427292b2d2e2f2f2f2e2c2b2825221e1c252c3236383835312a231a11080000000000000013202c3946535f6c7986939393939393887b6f6255483c2f221509000008121b242b313538383838383838383838383838383838383838383838383838383838383838383838383836312c241c12090000000000000000000000000000000000000000000000000000000000000000000000030e18212a333c444c53595f63676a6b6c6c6a6865605b554e463e362d241a100600000000000000000000000000000000000000000000000000000000000000000005111d2934404b57626c77818a93999d9f9f9d99948f89837c76706a646060666f7a859195887c6f63564a3d3024170b00000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6b64594e4248545f686c6c6c6c6c6c6c6c685e53483c2f23160a000000000000000009111920272e34393e43474a4d4f515253535353535353535353535353535353535353535353535353524f4a42382e23180c00000000000000000000000000040d1720282f3438393835302922191007000000000000000000000000000000000000000000000006111d27323b444a4e4f4f4f4f4e4a443b32271d1106000000000000000000000000000000020b151e272f3840474e555b61666b6e7275777d899593877b797774716e69655f59534c453d352c231a11080000000000000013202c3946525f6c7986929facac9f9286796c5f5246392c20130600000000000613202c3946525f6c7986929facaca09386796c5f5346392c201300101c2936434f5c697683909ca9aa9d9084776a5d5044372a1e11040000000a1623303c4956636f7c8996a3b0a89b8f8275685b4f4235281c0f0000000c18232f3b46525d68737e89939da6aea59c948d87837f7c7b7a7b7c7e83878d949990867c7a8794a1aea5988b7e7165584b3e3225180b000b1824313d4a56636f7c8895a1aea89c8f83766a5e5145392d21150a0706070d1824313d4955626e7b8794a0ada99d9084776b5e5245392c1f13060000000001080d121b2834414e5b6774818e9ba8ac9f9285786b5f5245382c1f171614110c07000000000013202c3946535f6c798693a0acada194887b6f63574b3f34291f1712111926323f4c5865727e8b98a5afa396897c6f6356493c302316090013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000000000000000000050a0d0f0f0f0f0f0f0f0f0f0f0e0c0804000000000000000916222d39444e575d5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5c554c41362b1f12060000000000000000060f171e24292b2c2b28231d161014171a1d1f202122222221201e1c191612131a2126292b2b29251f191108000000000000000013202c3946535f6c7986868686868686867b6f6255483c2f22150900040f1a242d363d42444545454545454545454545454545454545454545454545454545454545454545454544423d362e241a10050000000000000000000000000000000000000000000000000000000000000000000000060f18212a323a41484e53575b5d5f5f5f5e5c58544f4a433c342c241b120800000000000000000000000000000000000000000000000000000000000000000000000c18232f3a45505b656f7881888d919292918d89837d77716b655e5853545d6975818d938b7e7165584b3f3226190c000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5a52483d424d565d5f5f5f5f5f5f5f5f5c564d42372b1f1307000000000000000000070e151c23282e33373b3e404344454646464646464646464646464646464646464646464646464646433f382f261c11060000000000000000000000000000050e161d23282b2c2c29251f1810070000000000000000000000000000000000000000000000000a16222e39444d555b5c5c5c5c5b554d44392e22160a0000000000000000000000000000000a141d273039414a525960666c72777b7e8184858a95988c868583817e7a75706b645e564f473e352c231a1006000000000000121f2c3845525f6b7885919eabaca09386796d6053473a2d21140700000000000714212d3a4753606d798693a0acac9f9386796c5f5346392c201300101c2936434f5c697683909ca9aa9d9084776a5d5144372a1e1104000000091623303c4956636f7c8996a3b0a89c8f8275685b4f4235281c0f000004101c2834404c57636e7a85909ba5afa69c938a827c7673706e6d6e6f72777c828a92988d837a8794a1aea5988b7e7165584b3e3225180b000915222e3b4754606d7985929eaaab9f92867a6d6155493d32271c16141314161e2935414d5965717e8a96a3afa69a8e8175685c4f43362a1d1104000000030c13191e212834414e5b6774818e9ba8ac9f9285786b5f5245382c232323211d18110a0200000013202c3946535f6c798693a0acb0a4988c8073685c51463b3128221f1e1f2734414d5a6673808d99a6aea295887b6f6255493c2f2216090013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b000000000000000000000000040b1116191b1c1c1c1c1c1c1c1c1c1b18140f0901000000000005111d28323c454c5153535353535353535353535353535353535353535353535353535353535353535353504b433a30251a0e02000000000000000000050d13181c1f1f1e1c18120c04080b0e101214151515151413110f0c0906090f151a1d1e1e1c19140e07000000000000000000131f2c3946525f6b767979797979797979786d6155483b2f221508000a15212b363f474e5151515151515151515151515151515151515151515151515151515151515151515151514e4840362c21160a000000000000000000000000000000000000000000000000000000000000000000000000060f18202830373d42474b4e51525352514f4c48443e38312a221a120900000000000000000000000000000000000000000000000000000000000000000000000007121e29343e49535d666f767d8284868684817d78726c66605a534d474c5965717e8686868073665a4d4034271a0e010000000000000000000a16212c3740484f5253535353535353524e4840363b444b515353535353535353504b443b30261a0f0300000000000000000000040b11171d22272b2e3134363839393939393939393939393939393939393939393939393939393937332d261d140a00000000000000000000000000000000040c12181c1f201f1d19140d06000000000000000000000000000000000000000000000000000d1a26333f4a555f6769696969675f554a3f33261a0d010000000000000000000000000007111c252f39424b535c636b72787d83878b8e9092949c9e969392908d8a86817c766f68615950473e352c22180d030000000000111e2b3744515d6a7784909da9aea194887b6e6155483c2f22160900000000000916222f3b4855616e7b8794a1adac9f9285796c5f5246392c1f1300101c2936434f5c697683909ca9aa9e9184776a5d5144372b1e11040000000a1623303d4956636f7c8996a3b0a89c8f8275685b4f4235281c0f00000814202c3844505c6874808b96a1aca99e948a8178716b666361616163666b7178808891948a7e8794a1aea5988b7e7165584b3e3225180b0006131f2c3844515d6976828e9aa6aea2968a7d71665a4e43382e27222020202227303a46515d6975818d9aa6afa3978a7e7265594d4034271b0e020000030d151d242a2e3034414e5b6774818e9ba8ac9f9285786b5f524538303030302d29231c140b01000013202c3946535f6c798693a0acb4a89c9084786d62574d433a332e2c2b2c2e3743505c6875828e9ba7ada194877b6e6154483b2e2215080013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000000000000815222e3b4855616e7b8895a2aea5988b7e7165584b3e3225180b0000000000000000000000050e151c2226282828282828282828282724201a130b0200000000000b16212a333b41454646464646464646464646464646464646464646464646464646464646464646464644403931281e1308000000000000000000000002080c101213120f0c070100000000040607080909080806050200000000040a0e101211100d080300000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c665c5145392d201407000e1a26323d4851595e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5952483e32271b0f02000000000000000000000000000000000000000000000000000000000000000000000000060e161e252b31373b3f42444546464543403c38332d272018100800000000000000000000000000000000000000000000000000000000000000000000000000010c17222d37414b545d646b71757879797875716c67615b554e48423d4956626e787979797972665a4d4034271a0e0100000000000000000005101a252e373e43464646464646464645433d362e323a4044464646464646464644403a32291f140900000000000000000000000000060c11161b1f222527292b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b27221c140b02000000000000000000000000000000000001070c10121312100d080200000000000000000000000000000000000000000000000000000f1c2935424e5b67717575757571675b4e4235291c0f03000000000000000000000000040e19232d37414b545d656e757c83898e93979a9d9fa1a6a8a2a09f9c9a96928d87817a736b625950473e34291f150a0000000000101d2936434f5c6875828e9ba8afa296897c7063574a3e3125180c00000000000c1825313d4a5763707c8996a2afab9e9185786b5e5245382b1f1200101c2936434f5c697683909ca9ab9e9184776b5e5145382b1e12050000000a1724303d4a5663707d8a96a3b0a89b8e8275685b4e4235281b0f00000b1824303c4855616d7985909ca8aea3978c82786e665f5a57555454565a5f666e767f899390858894a1aea5988b7e7165584b3e3225180b0003101c2935414d5a66727e8a96a2aea69a8e82766b60554a4038322f2d2c2d2f3339424c57626e7a85919daaab9f93877a6e6256493d3124180c0000000b151f272f353a3c3d414e5b6774818e9ba8ac9f9285786b5f52453d3d3d3d3c39342e261d1309000013202c3946535f6c798693a0acb2aaa1958a7e73695f554c443e3a3838383a3e48535f6b7884919daaab9f9286796c6053463a2d2014070013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000000000001070b0e15222e3b4855616e7b8895a2a6a5988b7e7165584b3e3225180e0c090400000000000000040e1720272d323535353535353535353534312b251d140b0000000000040f1821293035383939393939393939393939393939393939393939393939393939393939393939393938342e271f160c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5b544a4034291d110400111e2a36424e59636a6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6a645a4f43372b1e120500000000000000000000000000000000000000000000000000000000000000000000000000040c131a20262b2f333537393939383633302c27221c150e0600000000000000000000000000000000000000000000000000000000000000000000000000000006101b252f39424b535a6065696b6c6c6b6865605b56504a433d373a46525d676c6c6c6c6c6960564a3e3225190c000000000000000000000009131c252c323739393939393939393936322c24282f3438393939393939393938342f2820170d02000000000000000000000000000000060a0e1216181b1d1e1f20202020202020202020202020202020202020202020202020201e1b17110a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c69768282828276695c4f4336291c10030000000000000000000000000a15202b353f49535d666f7780878e949a9fa3a6a3a19f9e9e9e9fa1a4a6a29e98928c857d746b62594f463b31261b1005000000000e1b2834414d5a6773808c99a5b1a4988b7e7266594d4134281c110a07070709101c2834404d5966727e8b98a4b1aa9d9084776a5d5144372b1e1100101c2936434f5c697683909ca9ab9f9285786c5f5245392c1f13060000000b1724313e4a5764717d8a97a4b0a79b8e8174675b4e4135281b0e00020f1b2734404c5865717d8995a1ada99d91867b70665c544e4a4847484a4e545c646d77818b96909199a4b0a5988b7e7165584b3e3225180b00000d1925313d4a56626e7a86919da9aa9f93877c71665c524a433e3b3a393a3b3f444b545e68737f8a96a2aea69a8e82766a5e52463a2d211508000006121c2731394146494a4a4e5b6774818e9ba8ac9f9285786b5f524a4a4a4a4a49453f382f251a0f040013202c3946535f6c798693a0acaaa0999790857b71675e564f4a47454445474a505964707b8894a0aca99d9084776a5e5145382b1f12060013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00000000060d12171a1c222e3b4855616e7b88959a9a9a988b7e7165584b3e32251c1b19140f090100000000000b16202931393e41424242424242424242403c362f261d12080000000000060f171f24292c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b28231d150d0400000000000000000000000000000000000000000000000000000000000000000002070c0e1010101010100f0d09040000000000000000000000000000000a16212c3740484f52535353535353535352504a42382e23180c0000131f2c3945525e6b7578787878787878787878787878787878787878787878787878787878787878787878766b5f53463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000000002090f151a1f2326292b2c2c2c2b292724201b16110a03000000000000000000000000000000000000000000000000000000000000000000000000000000000009131d27303941484f55595c5e5f5f5e5c59554f4a443f38322c35414b555c5f5f5f5f5f5d574e44392d2216090000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2a26211a1d24282b2c2c2c2c2c2c2c2c2b28231d160e050000000000000000000000000000000000000206090c0e1011121313131313131313131313131313131313131313131313131313120f0b0600000000000000000000000000000000000000000000000000000000000000050a0e1011111111110f0c080300000000000000000000000000101c2936434f5c6976838f8f8376695c4f4336291c1003000000000000000000000005111c27323c47515b656f78818a9199a0a6a6a09b9794929191919395989ca2a8a49d968f877e756b61574d43382d22170b000000000c1926323f4b5864717d8a96a2afa79a8e8275695d5145392d221a161414141519212c3844505c6975818e9aa7b3a89c8f8276695c504336291d1000101c2936434f5c697683909ca9aca09386796d6053473a2d2114070000000c1825323e4b5865717e8b98a4b1a69a8d8173675a4d4134271a0e0005111e2a3743505c6874818d99a5b0a4988c8175695e544a433e3b3a3b3e434a525b656f79848f9b9da3abb2a5988b7e7165584b3e3225180b00000915212d3946515d6975818c98a3aea4998d83786e645c544f4b48474647484b4f555d66707a85909ba7aca095897d72665a4e42362a1e110500000b17232e39434b52565656565b6774818e9ba8ac9f9285786b5f56565656565655514a41372c2115090013202c3946535f6c798693a0aca4988e8b928d83797068615b565352515253565b626b76818c98a4b0a69a8d8175685c4f4336291d10040013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0000000710171e232729292e3b4855616e7b888d8d8d8d8d8b7e7165584b3e3229292825201a130b0200000006111c27323b434a4e4f4f4f4f4f4f4f4f4f4d4841382e24190e020000000000060d13191d1f202020202020202020202020202020202020202020202020202020202020202020201f1c17120b04000000000000000000000000000000000000000000000000000000000000000000060d13181b1d1d1d1d1d1d1c19150f08010000000000000000000000000005101a252e373e4346464646464646464646433f3830261c1207000013202c3946535f6c79858585858585858585858585858585858585858585858585858585858585858585857a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000004090e13171a1c1e1f201f1e1d1b1814100b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151e272f373d44494d5052535352504d49443f39332d27242f39434a505353535353514c453c32281d1105000000000000000000000000010910161a1e1f202020202020201f1e1a150f12181c1f20202020202020201f1c18120c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a11161a1d1e1e1e1e1d1c19140e07000000000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000b16222d38434e59636d77818a939ba3aaa29b958f8b888584848486898c91969da4a8a19890877d73695f54493e33281c11050000000a1723303c4955616e7a86939fabaa9e9185796d61554a3e342b262221202122252a333e4955606c7885919da9b3a79a8d8174675b4e4235281b0f00101c2936434f5c697683909ca9ada194887b6e6155483c2f2216090000000d1a2633404c5966727f8c99a5b2a6998c807366594c4033261a0d000814212d3946525f6b7884909da9ada094887c7064584d4238322f2e2e32384049535d68737e8a95a1adb4b2a5988b7e7165584b3e3225180b000005111d2935414d5864707b86919ca7aa9f948a80766e66605b575453535355575b60676f78818c96a1aca59a8f84786d61554a3e32261a0d0100000f1c28343f4a555d62636363636774818e9ba8ac9f9285786b63636363636363625c53483d3125190d0013202c3946535f6c798693a0aca29689818b958b827a726c6763605e5e5e6062666c747d87929da9aea2968a7e7165594c4034271b0e020013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000006101922292f333536363b4855616e7b808080808080807e7165584b3e36363634312c251d140b0000000a16222e39434d555a5b5b5b5b5b5b5b5b5b59534a40352a1e120600000000000002080d101213131313131313131313131313131313131313131313131313131313131313131313120f0c07000000000000000000000000000000000000000000000000000000000000000000000811181f2427292a2a2a2a2a2825201a130a020000000000000000000000000009131c252c32373939393939393939393937332d261e140b00000013202c3946535f6c79869292929292929292929292929292929292929292929292929292929292929292877a6d6053473a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000003070a0d101112131312100e0b080400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151d252c32383d41434546464543403d38332e28221c1d2731393f44464646464645413b332a21160b000000000000000000000000000000050a0e11131313131313131313110e0a04070c1012131313131313131312100c07010000000000000000000000000000000000000000000000000000000000040708080808080808080706040200000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151c2226292a2a2a2a2a28251f1911090000000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000000005111c28333e4a55606a757f89939ca5a9a0989089847f7b79777778797c80858b929aa2aaa2998f857b71665b5044392d22160a0000000814202d3946525e6a77838f9ba7ada195897d72665b50463d36322f2e2d2d2f31353c454f5a65717d8995a1adb1a5988c7f7266594d4033271a0d00101c2936434f5c697683909ca9afa296897c7063574a3e3125180c0000020f1b2835414e5a6774818d9aa6b1a4988b7e7165584b3f3225190c000a16232f3c4955626e7a8794a0aca99d9184786c6054483c3126222122262e37414c57626d7984909ca8b4b2a5988b7e7165584b3e3225180b0000010d1925303c47535e6a75808b959fa9a69c92898078716b676361605f606163676b7179818a939ea8a89e93897e73675c5045392d211509000000121e2b3744505c676e707070707074818e9ba8ac9f92857870707070707070706d655a4e4235291c0f0013202c3946535f6c798693a0aca3968a7d858f948c847d77736f6c6b6b6b6c6f72777e868f99a4afa99d92867a6e6255493d3124180b000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00030e18222c343a3f4242424247535f6a7273737373737373736d62564a42424242413d372f261c120700000d1a26323e4a555f66686868686868686868645c52473b2f2216090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111a222a303436363636363635312c251d140a00000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2b27221c140c0200000013202c3946535f6c7986939e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e94877a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b131a21272c313437383939383734302c27221d1711151f272e343739393939393835302921180f0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c101315151515151515151413110f0b0804000000000000000000000000000000000000000000000000000000000000000000000000000000020c161e262d3236373737373735302a231b110700000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000a16212d39444f5b66717c87919ba5aba1978e867e78736f6c6b6a6b6d70747a8188909aa3aba1978d82776c61554a3e33271b0f03000005111d2a36424e5a66727e8a96a2ada69a8e83776c62584f48423e3c3a3a3a3b3e41474e57616c77828e99a5b1afa3968a7d7064574b3e3125180c00101c2936434f5c697683909ca9b1a4988b7e7266594d4034271b0f030005111e2a3743505c6975828f9ba8afa396897d7063574a3d3124170b000c1825323e4b5764707d8a96a3afa79a8e8175685c5043372b1f1614161c252f3a45515c6874808c98a4b0b2a5988b7e7165584b3e3225180b00000008141f2b37424d58636e79838e97a1aaa49b928a827c7773706e6d6c6d6e7073777d838b939ca5a9a0968c82776c61564b3f34281c110500000013202c3946535f6c787d7d7d7d7d7d818e9ba8ac9f92857d7d7d7d7d7d7d7d7d766a5d5043372a1d100013202c3946535f6c798693a0aca4978a7d7e8892968f89837e7b79787778797b7e83899098a1abada2988c8175695d5245392d211508000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0009141f2a343e454b4f4f4f4f4f4f5861666666666666666666635b504f4f4f4f4f4d4841382e24190d02000f1c2935424e5b67717575757575757575756e63574a3e3125180b00000000000000000000000000000000000000000000000000000000000000000000000000000000040a0e11131313131313131313131313131313131313131313131313131313120f0b06000000000000030e19232c343b40434343434343413d362f261c110700000000000000000000000000010910161a1e1f2020202020202020201e1b17110a020000000013202c3946535f6c79869393939393939393939393939393939393939393939393939393939393939393877a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000003060809090a0a0a0a0908060502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010910161c2025282a2c2c2c2c2a2824201c16110b060d151c23282b2c2c2c2c2c2c29241f170f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11181c202122222222222222211f1e1b1814100b050000000000000000000000000000000000000000000000000000000000000000000000000009131e2830383e424444444444413c352d23190f04000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000020e1a26323e4a55616c77838e98a3ada3998f857c746d6763605e5d5e6064686f767e88919ca6a99f94897d72665b4f43372b1f13070000010e1a26323e4a56626e7a85919ca7ab9f94897e746a6159534e4b48474647484a4d52586069737d88939faab6ada094877b6e6155483c2f23160a00101c2936434f5c697683909ca9b3a79a8e8175685c5043372b1f1308050814212d3946525f6b7884919daaada194877b6e6255483c2f221609000d1a2733404d5966727f8c98a5b1a4988b7e7265594d4034271b0f080a131e2934404b57636f7c8894a0adb2a5988b7e7165584b3e3225180b000000030f1a25313c47525d67727c858f98a0a8a49c948d88837f7c7a7979797b7c8083888e959ca5a79f978e847a70655b50453a2e23170c0000000013202c3946535f6c79868a8a8a8a8a8a919da9ada0958b8a8a8a8a8a8a8a8a84776a5d5044372a1d110013202c3946535f6c798693a0aca5988b7e76808a949a948f8b888685848586888b8e949aa2aaaca49b91867b7064594d4135291d1105000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000d1925313c4650575b5c5c5c5c5c5c5c5b59595959595959595c5c5c5c5c5c5c5c59534a40352a1e120600101c2936434f5c697682828282828282827e7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000080f151a1e1f20202020202020202020202020202020202020202020202020201e1c17120b03000000000914202b353e464c4f50505050504d4841382e23180c010000000000000000000000000000050a0e1113131313131313131313120f0b0600000000000013202c3946535f6c79868686868686868686868686868686868686868686868686868686868686868686867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000060b101315161617171716161513110f0c09050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b1014181b1e1f20201f1d1b1814100b060000030b12171c1e20202020201f1d19130d06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2c2a2724201b16100a0300000000000000000000000000000000000000000000000000000000000000000000030e1a25303a424a4f51515151504d473f352b201509000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000007131f2b37434f5a66727d89949faaa89d92877d736a625b565351515254585d646c75808a95a0aca59a8f83776b5f53473b2f23160a0000000a16222e3a46515d6974808b96a0aba59a90867c736b645e5a57555453535556595e636a727b858f9aa4b0b6aa9d9185786b5f53463a2d20140700101c2936434f5c697683909ca9b6a99d9184786c5f53473c30241a1412121924303d4955616e7a8793a0acab9e9285796c6053463a2d211407000f1c2835424e5b6874818e9aa7afa296897c7063574a3e3124180c00010c18232f3b47535f6c7885919daab2a5988b7e7165584b3e3225180b0000000009141f2b35404b55606a737c868e969ea4a69f99938f8c898786868687898c8f94999fa7a49d968e857c72685e54493e33281d12060000000013202c3946535f6c79869396969696969ba3aeb1a69d97969696969696969084776a5d5044372a1d110013202c3946535f6c798693a0aca5988c7f7278818a939b9b9794929191929294979a9fa5aca8a29b92897f746a5f53483c3125190d01000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00111d2936424d586268696969696969696761574d4d4d525c656969696969696969655c52463a2e22160900101c2936434f5c6976838f8f8f8f8f8f8c7e7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000009121a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b28231c150d030000000d1a25313c4750585c5d5d5d5d5d59524a3f34291d11050000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6b7679797979797979797979797979797979797979797979797979797979797979797979776c6053463a2d201407000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f212223232323232221201e1b1815110c07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080c0f1112131312110f0c0804000000000000060b0f12131313131312100d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262e34383b3b3b3b3b3b3b3b3a393734302c27221b150d0600000000000000000000000000000000000000000000000000000000000000000007131f2b36414c545b5d5d5d5d5d5851473d31261a0e000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000000a17232f3b47535f6b77838e9aa5aea2978b80756b6158504a47454445484c525a646e78848f9ba7ab9f94887c7063574b3f32261a0d01000006111d2935414c57636e79848f99a3aca2988e857d766f6a666362606060616366696e757c848d97a1abb6b3a79a8e8275695c5043372a1e120500101c2936434f5c697683909ca9b6ada094887c7064584c41362c24201e1e212a35414d5965717d8a96a2afa89c8f83766a5d5144382b1f120500101d2a3643505c6976828f9ca8ada194877b6e6155483b2f221609000007131f2b3743505c6975828e9ba7b2a5988b7e7165584b3e3225180b00000000030e19242f39444e58616b737c848c93999fa4a49f9b9896949393939496989ba0a5a39e99928b847b736a60564c42372d22170c010000000013202c3946535f6c798693a0a2a2a2a2a5acb5b8aea7a3a2a2a2a2a2a29d9084776a5d5044372a1d110013202c3946535f6c798693a0aca6998c80736f78818990979da19f9e9e9e9fa1a3a7a8a5a29d97908980776d63584d42372b20140800000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00121f2c3845525e6a737575757575757573695d51444b57636e75757575757575756e63574a3e3124180b00101c2936434f5c697683909c9c9c9c988c7e7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000008121b242b323639393939393939393939393939393939393939393939393939393937342e271f150c010000111d2a36424e5962686969696969645c5145392d2115090000000000000000000000000000000000000000000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b655b4f44372b1f12050000000000000000000000000000000000000000000000000000000000000000000000010b141c22282c2e2f30303030302f2e2c2a2825211d18120c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f383f454848484848484848474543403c38332d261f18100700000000000000000000000000000000000000000000000000000000000000000a16232f3b47535d666a6a6a6a6963594e42362a1d11000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000010e1a26333f4b57636f7b87939faba99d91857a6f64594f463f3a3837383b4148525c67737e8a96a2a6a4988c8073675b4e4235291c10030000010d1824303b46525d68727d87919ba4aaa0978f87817b7673706e6d6d6d6e7072767a80868e969fa9b3bcafa3978b7e7266594d4134281b0f0200101c2936434f5c697683909ca9b6b0a4988c8074695d52483e35302d2b2b2d323b46525d6975818d99a6b1a5988c8073675b4e4235291c100300111e2b3744515d6a7784909daaac9f9386796d6053473a2d2114070000030f1b2834414d5a6673808c99a5b2a5988b7e7165584b3e3225180b000000000008121d27323c464f59616a727a81888e93989b9fa1a4a2a1a0a0a0a1a2a3a19e9b97938d878179726961574e443a30261b1005000000000013202c3946535f6c79869396969696969aa3adb1a69c96969696969696969084776a5d5044372a1d110013202c3946535f6c798693a0aca69a8d8073666f777f868c9195999b9d9e9f9f9e9d9b9995918c867e766e655b51463c31261a0f0300000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0013202c3946535f6c7982828282828282786b5f52454c5865727e8282828282827e7165584b3e3225180b00101c2936434f5c697683909ca8a8a5988c7e7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000040f19242d363d42454646464646464646464646464646464646464646464646464646443f3931271d13080000131f2c3945525e6a7476767676766d6256493d3125190c00000000000000000000000000000000000000000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a53493e33271b0f03000000000000000000000000000000000000000000000000000000000000000000000009131d262d33383b3c3c3d3d3d3c3c3b393734312d28231e171009010000000000000000000000000000000000000000000000000000000005090c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0b0803000000000000000000000005090c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0b08030000000000000b17222d38424a5154555555555555555452504c48443e38312922191007000000000000000000000000000000000000000000000000000000000000000b1825323e4b57646f77777777756a5e5245392c1f13000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000004111d2a36424f5b6773808c98a4b0a4988c8175695d52473d342e2b2b2c3036404b56626e7a86939a9a99988f83766a5d5144382b1f120500000008131e2a35404b56616b757f89929aa2a9a199928c87837f7d7b7a797a7b7c7e82868b9198a0a8b1bbb8aca093877b6f62564a3d3125180c0000101c2936434f5c697683909ca9b6b2a99d91857a6f645a5047403c393838393d444d58636e7a86919da9ada195897c7064584b3f32261a0d0100121f2b3845515e6b7885919eabab9e9285786b5f5245392c1f13060000000c1925323e4b5864717d8a97a4b0a5988b7e7165584b3e3225180b0000000000010b16202a343d474f5860686f767c82878c8f929597989a9a9a9a99989795928f8b87827c766f6860574e453c32291e140900000000000013202c3946535f6c7986898989898989919ca9ada0948b898989898989898984776a5d5044372a1d110013202c3946535f6c798693a0aca69a8d807366656d747b8185898c8f9192929292908f8c8985817a746d655c53493f352a1f14090000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0013202c3946535f6c79868f8f8f8f8f85786b5f52454c5865727e8c8f8f8f8f8b7e7165584b3e3225180b00101c2936434f5c697683909ca9b2a5988c7e7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000915202b363f484e525353535353535353535353535353535353535353535353535353504a43392f24190d020013202c3946535f6c79838383837e7266594d4135291c1004000000000000000000000000000000000000000000000000000000000000000000000000000a16212c3740484f5253535353535353535353535353535353535353535353535353535353535353535353524f4941372d22160b000000000000000000000000000000000000000000000000000000000000000000000005101b252f383f444748494a4a4a4948474543403d39342f29221b130a0100000000000000000000000000000000000000000000000000040b1116191a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a18140f090100000000000000040b1116191a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a18140f0901000000000f1b27333f4a545c6161616161616161605f5c58544f49433b342b221910060000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727e848484796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000714202d3945525e6b7783909ca8ada194887c7064584c41362b231f1e1f242e3a46525e6a77838e8e8d8c8b8a85796c6053463a2d201307000000020d19242f3a444f59636d76808991989fa5a49d97938f8c898887868787898b8e92979ca2a1a5adb6b4a89b8f83776b5f53463a2e2115090000101c2936434f5c697683909ca9b2a8a19d978b80766b6259524c4846454546494e565f6974808b96a2aea99d9185796c6054483c2f23170a0000131f2c3945525f6c7885929facaa9e9184776b5e5145382b1e12050000000a1723303d4956636f7c8996a2afa5988b7e7165584b3e3225180b000000000000040e18222b353d464e565e656b71767b808386888a8c8d8d8e8d8d8c8a8886837f7b76716b645d564e453c332a21170d0200000000000013202c3946535f6c787c7c7c7c7c7c818e9ba8ac9f92857c7c7c7c7c7c7c7c7c76695d5043372a1d100013202c3946535f6c798693a0aca79a8d8173675b62696f75797d808284858685858482807d79756f69625b534a41372d23180e030000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0013202c3946535f6c7986939c9c9c9285786b5f52454c5865727e8c989c9c988b7e7165584b3e3225180b00101c2936434f5c697683909ca9aca5988c7e7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000d1925313d4751595e5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5c554b41352a1e120500121f2b3844515e6a778490908e8275695d5145382c2014080000000000000000000000000000000000000000000000000000000000000000000000000005101a252e373e43464646464646464646464646464646464646464646464646464646464646464646464646433e372f251b100500000000000000000000000000000000000000000000000000000000000000000000000a16212d3741495054555656565656555452504d4945403a342c251c130a010000000000000000000000000000000000000000000000060f161d22252727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272624201a130b030000000000060f161d22252727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272624201a130b03000000121e2b37434f5b666d6e6e6e6e6e6e6e6d6b6865605b544d453d342b22180e0300000000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9186796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000a16232f3c4855616e7a87939facaa9d9185786c6054483c3024191211131d2936424f5b6874818281807f7e7d7d796d6053473a2d2014070000000007121d28333d47515b646d767e868e949a9fa4a39f9b9896949493949496989a9ea19b95959ba4afafa3978b7f73675b4f43362a1e12050000101c2936434f5c697683909ca9aba096919392887d746b635d585552515153555a6068717b86919ca7afa3988c8174685c5044382c201307000013202c3946535f6c7986929facaa9d9084776a5d5144372a1e11040000000915222f3c4855626f7b8895a2aea5988b7e7165584b3e3225180b0000000000000009141f29323b42474c535a60666b6f7377797c7e7f80818181807e7d7b7976736f6a656059534c443c332a21180f0500000000000000121e2b3744505b666e6f6f6f6f6f74818e9ba8ac9f9285786f6f6f6f6f6f6f6f6d64594d4135281c0f0013202c3946535f6c798693a0aca79a8d8173675a585e64696d7173767778797978777573706d69645e58514941382f251b1107000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0013202c3946535f6c798693a0a99f9285786b5f52454c5865727e8c98a5a5988b7e7165584b3e3225180b00101c2936434f5c697683909ca0a0a0988c7e7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000101d2935424e59636b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c675d52463a2e21150800101d2a3643505c6975828f9c9285796d6155483c3024180b000000000000000000000000000000000000000000000000000000000000000000000000000009131c252c323739393939393939393939393939393939393939393939393939393939393939393939393937332d251d13090000000000000000000000000000000000000000000000000000000000000000000000000e1b27323e49535b6062636363636362615f5c5955514b453e372e251c130900000000000000000000000000000000000000000000060f1821282d3234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343433302b251d150b01000000060f1821282d3234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343433302b251d150b01000013202c3946525f6c777b7b7b7b7b7b7b7a7875716c665f574f463d342a1f150a00000000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000c1825313e4b5764707d8996a2afa79a8e8275695c5044372b1f1308040e1a2733404c59657076757473727271706e675c5144382c1f130600000000010c16212b363f49525b646d747c83898f94989c9fa1a3a3a1a0a0a0a1a2a19e9a96908a89939fabaa9f93877b6f63574b3f33261a0e020000101c2936434f5c697683909ca9a89c8f8489958f867d756e6964615f5e5e5f61656b727a838d98a2ada99e92877b7064584c4034281c1004000013202c3946535f6c798693a0acaa9d9084776a5d5044372a1d11040000000815212e3b4854616e7b8894a1aea5988b7e7165584b3e3225180b000000000000020e1a25303b444d53565656565a5f63676a6d6f7172737474737372716f6d6a67635e5a544e48413a322a21180f0600000000000000000f1b27333f4a545c61626262626774818e9ba8ac9f9285786b62626262626262615b52483d3125190d0013202c3946535f6c798693a0aca79a8d8173675a4d53585d616467696b6b6c6c6b6a696764615d58534d463f372f261d130900000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0013202c3946535f6c798693a0ac9f9285786b5f52454c5865727e8c98a5a5988b7e7165584b3e3225180b00101c2936434f5c6976839093939393938c7e7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000121e2b3844515e6a7579797979797979797979797979797979797979797979797979786e6256493c3023160a000f1b2835414e5b6774818d9a95897d7165584c4034281b0f0300000000000000000000000000000000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a27211b130b01000000000000000000000000000000000000000000000000000000000000000000000000111e2a37434f5b656c6f6f7070706f6f6d6b6965615c56504840372e241a10050000000000000000000000000000000000000000020d17212a32393e404141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141403c372f271d13090000020d17212a32393e404141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141403c372f271d1309000013202c3946535f6c79868888888888888684817c77716961584f463b31271c1106000000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000e1a2733404d5966727f8c98a5b1a5988c7f7266594d4034281b0f03000b1824303c48545e666968676766656463625d554b4034281c10040000000000050f1a242d374049525b636a71787d83888c8f92959798999a9a99989795928e8a857f86929eaba59a8e82766a5e53473b2e22160a000000101c2936434f5c697683909ca9a89b8f82838e988f87807974706e6c6b6b6c6e71767c848c959fa9aca2978c81766a5f53473c3024180c00000013202c3946535f6c798693a0acaa9d9084776a5d5044372a1d11040000000814212e3b4754616e7a8794a1aea5988b7e7165584b3e3225180b00000000000005121e2a36424c565e6263636363605a5b5e606364666667676766656462626362605d59544e463f362d231a0f060000000000000000000b17222e38424b51555555555b6774818e9ba8ac9f9285786b5f55555555555555504940362c2015090013202c3946535f6c798693a0aca79a8d8173675a4d474c5155585a5c5e5f5f5f5f5e5c5a5855514c47423b342d251d140b0100000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0013202c3946535f6c798693a0a09f9285786b5f52454c5865727e8c98a0a0988b7e7165584b3e3225180b00101c2936434f5c697683868686868686867e7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000121f2c3845525f6b78858686868686868686868686868686868686868686868686867d7063564a3d3023170a000d1a2633404c5966727f8c98998d8174685c5044372b1f13070000000000000000000000000000000000000000000000000000000000000000000000000000010910161a1e1f20202020202020202020202020202020202020202020202020202020202020202020201e1b1610090100000000000000000000000000000000000000000000000000000000000000000000000000121f2c3945525f6b777b7c7d7d7d7c7b7a7875716d68615a524940362c22170c000000000000000000000000000000000000000008131f29333c444a4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4c4841392f251a0f030008131f29333c444a4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4c4841392f251a0f030013202c3946535f6c798693959595959493918d88827b736a61574d43382d22170b000000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000f1c2835424e5b6874818e9aa7afa3968a7d7064574a3e3125180c00000814202c37424c545a5c5b5b5a5958575655524b43392e23180c0000000000000008121c252e374049515860666c72777c808386888a8b8c8d8d8d8c8a8886827e79818c97a3aca095897d71665a4e42362a1e1206000000101c2936434f5c697683909ca9a99c8f827d889299918b85817d7a787777797a7d82888e969ea8ada49a90867b7065594e42372b1f130700000013202c3946535f6c798693a0acaa9d9084776a5d5044372a1d11040000000815212e3b4854616e7b8894a1aea5988b7e7165584b3e3225180b0000000000000814212e3a46525e686f6f6f6f6f6c625751545658595a5a5a5b61666a6d6f6f6f6d6a655f5851483f352b21170c01000000000000000006111c26303940454849494e5b6774818e9ba8ac9f9285786b5f52494949494948453f372e241a0f040013202c3946535f6c798693a0aca79a8d8173675a4d404045484b4e50515252525251504e4b4845403c36302a231b130b020000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0013202c3946535f6c7986939393939285786b5f52454c5865727e8c939393938b7e7165584b3e3225180b00101c2936424f5c68747979797979797979797064584b3e3225180c000000000000000000000000000000000000000000000000000000000000000000000000121f2c3845525f6b788592939393939393939393939393939393939393939393938a7d7063564a3d3023170a000c1825323e4b5764717d8a979d9184786c6054473b2f23170a00000000000000000000000000000000000000000000000000000000000000000000000000000000050a0e11131313131313131313131313131313131313131313131313131313131313131313131313110f0a05000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986898a8a8a89888684817d79736c645b52483e33281d1106000000000000000000000000000000000000000d1924303b454e565a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a58534b41372b201408000d1924303b454e565a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a58534b41372b2014080013202c3946535f6c798693a0a2a2a2a1a09d99948d857c73695f554a3f33281c11050000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000101d2a3643505d6976838f9ca9aea195887b6f6255493c2f23160a0000040f1b26303a42494e4f4f4e4d4c4b4b4a4946413a31271d120700000000000000000a131c252e373f474e555b61666b6f7376797b7d7e808080807f7e7c7976727b87929da9a69b8f84786c6155493d32261a0e02000000101c2936434f5c697683909ca9a99c908376818b949c96918c898785848485878a8e9399a0a8aca49b92897e74695e53483d31261a0f0300000013202c3946535f6c7986929facaa9d9084776a5d5144372a1e11040000000915222f3b4855626e7b8895a2aea5988b7e7165584b3e3225180b0000000000000916222f3c4955626f7a7c7c7c7c74675b4e47494b4e555b61676c72767a7c7c7b7976706a625a51473d33281d12070000000000000000000a141e272e35393c3c414e5b6774818e9ba8ac9f9286796c5f53463c3c3c3c3c39342d251d1309000013202c3946535f6c798693a0aca79a8d8173675a4d4035393c3f414344454646454443413f3c3835302b251f18110901000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0013202c3946535f6c7986868686868685786b5f52454c5865727e8686868686867e7165584b3e3225180b000e1b2733404c57626a6c6c6c6c6c6c6c6c6c685f54483c3023170a000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929fa0a0a09c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c968a7d7063564a3d3023170a000a1723303d4956636f7c8995a194887c7063574b3f33261a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c798692969696969593918e8a847e766d645a5045392e22160a00000000000000000000000000000000000000101d2935414c5760666767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767645d53483c3024180b00101d2935414c5760666767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767645d53483c3024180b0013202c3946535f6c7986939696989b9ea4a9a59f978f857b71665b5044392d2115090000000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000111e2b3844515e6a7784919daaada093877a6d6154473a2e21140800000009141e2831383e4243424140403f3e3d3c3a352f281f150b010000000000000000010a131c252d353c434a50565b5f63676a6d6f71727373737372716f6d6c77828d98a3aba0958a7e73675c5044392d21150900000000101c2936434f5c697683909ca9aa9d90837679828c949c9d9996939291919294969a9ea4aba7a19a928980766c62584d42372c20150900000000121f2c3945525f6c7885929fabaa9e9184776b5e5144382b1e12050000000a1623303c4956636f7c8995a2afa5988b7e7165584b3e3225180b0000000000000915222f3b4855616e7b88898983766a5e52494d535960666c72787d828688898886827c746c63594f453a2f23180c010000000000000000020c151d24292d2f34414e5a6774818e9aa7ada093877a6d6154484546474948453f372f251a0f040013202c3946535f6c798693a0aca79a8d8173675a4d40342c30323536383839393838363532302c28241f1a140d060000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00131f2c3946525f6b7679797979797979766a5e51454b58647079797979797979797064574b3e3125180b000b17232f3b4650585e5f5f5f5f5f5f5f5f5f5d564d42372c20140700000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929faba0958f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8a7d7063564a3d3023170a000815222e3b4854616e7a8794a0988c8073675b4f43362a1e12060000000000000000000000000000000000000000000000000000000000000000000000000000000004080b0d0d0d0d0d0d0d0d0d0c0a0601000000000000000000000000040708090909090909090908070501000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c798691909090909295999a958f8880766c61564a3f33271b0e02000000000000000000000000000000000000121f2c3845515d697274747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474746f64584c4033261a0d00121f2c3845515d697274747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474746f64584c4033261a0d0013202c3946535f6c798689898a8b8e9399a0a8a9a1978d83786c61554a3e3226190d0100000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000121f2c3845525f6b7885929eabac9f9286796c5f5346392d201306000000020c161f262d323536353534333231302f2d2a241d160d0300000000000000000000010c17222d373f474c4e4d4f53575b5e606264656666676666646367727d88939ea9a59a8f84786d61564a3f33281c100500000000101c2936434f5c697683909ca9aa9d9084777079828a92989da2a09f9e9e9fa0a3a6a8a5a19c96908880776e655b50463b31251a0f0400000000121f2b3845515e6b7884919eabab9e9285786b5f5245392c1f13060000000c1825313e4b5764717d8a97a3b0a5988b7e7165584b3e3225180b0000000000000714212d3a4753606c79869292867a6e635956595f656b71777d83898e92959695928d867e756b61564b4034291d1105000000000000000000030b12181d202734404d5a6673808d99a6aea295897c706458535152545655514941362c2015090013202c3946535f6c798693a0aca79a8d8173675a4d4034272326282a2b2c2c2c2c2b2a282623201c18130e0902000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d00111e2a37434f5a646b6c6c6c6c6c6c6c6b64594e4248545f686c6c6c6c6c6c6c6c685e53483c2f23160a0007131e29343e464d52535353535353535353514b443b31261b0f0300000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7984909ba69c8f838282828282828282828282828282828282827d7063564a3d3023170a000714202d3a46535f6c7986929f9c9083776b5f53463a2e2216090000000000000000000000000000000000000000000000000000000000000000000000000000030a1015181a1a1a1a1a1a1a1a1a1916120c06000000000000000000070c11141515151515151515151514110d080100000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985848383838486898d949c9a92887d72675b4f43372a1e120500000000000000000000000000000000000013202c3946535f6c79818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818174675a4d4134271a0e0013202c3946535f6c79818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181818174675a4d4134271a0e0013202c3946535f6c787c7c7c7d7e82878e969fa9a99f94897d72665a4e4236291d110400000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000131f2c3946525f6c7986929facab9f9285786b5f5245392c1f120600000000040d151c212628292928272625242423211e19130c04000000000000000000000005111d29343f4951585b59544f4b4e515456575859595a595959636e79848f9aa5a99e94897d72675c50453a2e23170b0000000000101c2936434f5c697683909ca9aa9d9084776a707880878c9296999b9d9e9f9f9e9d9b9895908b857e766e655c53493f342a1f14090000000000111e2a3744515d6a7784909daaac9f9386796d6053473a2d2114070000020e1a2733404d5966727f8c98a5b1a5988b7e7165584b3e3225180b00000000000006121f2c3845515e6a778490968b7f746a6463656a70767c83898f949a9fa2a3a19e9890877d73685c5145392e22160a0000000000000000000000070d111926323f4c5865727e8b98a4b1a5988c81756a625f5e5f6062615b53483d3125190d0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a191b1d1e1f1f1f1f1e1d1b191714100c08030000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000e1a26323e48525a5f5f5f5f5f5f5f5f5f5a52483d424d565d5f5f5f5f5f5f5f5f5c564d42372b1f130700020d18222c353c424546464646464646464644403a32291f140a00000000000000000000000000000000000000000000000000000000000000000000000000121f2b3844505c68737e8a949f9d91867b7575757575757575757575757575757575756d6155493c2f2316090005121f2b3845515e6b7784919d9f93877b6f62564a3e3225190d01000000000000000000000000000000000000000000000000000000000000000000000000050d151b212426272727272727272725221d171008000000000000020b12181d2022222222222222222222211d19130c04000000000000000000000000000000000000000000000000000000000000000000000000121f2c3845525e6b76787776767677797c828a939e9a8f83776b5f53463a2d21140800000000000000000000000000000000000013202c3946535f6c79868e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8174675a4d4134271a0e0013202c3946535f6c79868e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8174675a4d4134271a0e00121e2b3744505c666e6f6f6f7072767c848d97a2ada59a8e82766a5e5245392d20140700000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c798693a0acab9e9285786b5e5145382b1e12050000000000030a1016191c1c1c1b1a191918171614120d08010000000000000000000000000815212d3945505b636765605b56514b47494b4c4c4d4d4d56606a75808b95a0aba2988d82776c61564a3f34281d12060000000000101c2936434f5c697683909ca9aa9d9084776a666e757b8186898c8f9192929292908f8c8984807a736c645c534a41372d22180d030000000000101d2936434f5c6975828f9ca8ada194877b6e6155483b2f221609000005111e2a36434f5b6874818e9aa7b2a5988b7e7165584b3e3225180b00000000000004101d2936434f5c6875818d9a91867c75716f71757b81878e949aa0a5a2a0a0a1a4a2998f84796d62564a3e32261a0e010000000000000000000000010b1824313d4a5763707c8995a2aea99d91867c746e6c6b6c6d6f6d64594e4135291c0f0013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0f10121213131211100f0d0a07040000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000a16212c3740484f5253535353535353524e4840363b444b515353535353535353504b443b30261a0f03000006101a232a31363939393939393939393938342f2820170d03000000000000000000000000000000000000000000000000000000000000000000000000000f1c2834404b57626d78838d98a2978c82786e69696969696969696969696969696968645b5045392d2014080003101d2a3643505c6976828f9ca3978b7e72665a4e4235291d11050000000000000000000000000000000000000000000000000000000000000000000000050e171f272c31333434343434343434322e29221a110700000000020c141c23292d2f2f2f2f2f2f2f2f2f2f2d2a241e160d040000000000000000000000000000000000000000000000000000000000000000000000111d2a36424e5a646b6c6a6969696a6d7178818d98a094877b6e6255493c2f23160900000000000000000000000000000000000013202c3946535f6c7986939a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a8e8174675a4d4134271a0e0013202c3946535f6c7986939a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a8e8174675a4d4134271a0e000f1b28333f4a545d6263636364666b727b85909ba7ab9f93867a6e6155483c2f23160a00000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c798693a0acab9e9285786b5e5145382b1e120500000000000000050a0d0f100f0e0e0d0c0b0a0908050100000000000000000000000000000a1723303d4955626d74716c67615c57524d4842404049535d67727c87919ca7a69b91867b70665b5044392e23170c010000000000101c2936434f5c697683909ca9aa9d9084776a5d636a7075797d808284858686858482807c78746e68615a524a41382f251b11060000000000000f1b2835414e5b6774818d9aa7afa296897c7063574a3e3125180c00000a16222e3a46525e6b7784909da9b2a5988b7e7165584b3e3225180b000000000000000e1b2734404c5965727e8a96988f87817d7c7e81878c92999fa59f9995939394979da1958a7e72665a4e42362a1d11050000000000000000000000000916222f3b4854616d7986929eaaaea3988e867f7b7978787a7c766a5d5043372a1d100013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0005101a252e373e43464646464646464645433d362e323a4044464646464646464644403a32291f1409000000000811192025292c2c2c2c2c2c2c2c2c2c2b28241d160e0500000000000000000000000000000000000000000000000000000000000000000000000000000c17232f3a45515b66717b8690999e948a80776e665d5c5c5c5c5c5c5c5c5c5c5c5c5c5952493f34281d110400000f1c2835424e5b6774818d9aa79b8e82766a5e5145392d21140800000000000000000000000000000000000000000000000000000000000000000000040d17202931383d4040404040404040403e3a342c23190f040000000a141e262e34393b3c3c3c3c3c3c3c3c3b39352f281f160c01000000000000000000000000000000000000000000000000000000000000000000000e1a26323d48525a5f5f5e5d5c5d5e6066707c8996a296897d7063574a3d3024170a00000000000000000000000000000000000013202c3946535f6c798693a0a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a79a8e8174675a4d4134271a0e0013202c3946535f6c798693a0a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a79a8e8174675a4d4134271a0e000b17232e38424b5255565656575a6069747f8a96a2aea296897d7064574b3e3125180b00000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000013202c3946535f6c798693a0acab9e9285786b5e5145382b1e1205000000000000060c1013151514131211100f0e0d0b080400000000000000000000000000000b1724313e4a5764717d7d77726d68635e58534e4947515b656f79848e99a3a89e948a7f746a5f54493e33281d1206000000000000101c2936434f5c697683909ca9aa9d9084776a5d595f64696d7173767778797978777573706c68635d57504840382f261d1309000000000000000d1a2633404c5966727e8b98a5b1a4988b7e7265594d4034271b0f0306101b27323e4a56626e7a87939facb2a5988b7e7165584b3e3225180b000000000000000b1824313d4956626e7a86929e98928d8a898a8d92989ea4a099938e898686888c91999b8f83776a5e5246392d2014080000000000000000000000000713202c3845515d6975818d99a4aeaaa098908b878585858684776a5d5044372a1d110013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d000009131c252c323739393939393939393936322c24282f3438393939393939393938342f2820170d020000000000070e14191d1f2020202020202020201f1c18120c0400000000000000000000000000000000000000000000000000000000000000000000000000000007121e29343f4a555f6a747e87919a9c928980776f675f574f4f4f4f4f4f4f4f4f4f4f4d4740372d22170c0000000d1a2733404d5966737f8c99a59e92867a6d6155493d3124180c000000000000000000000000000000000000000000000000000000000000000000030d161f29323b43494c4d4d4d4d4d4d4d4d4a453e352b21160a000006111c26303840454848484848484848484846413a31281e1308000000000000000000000000000000000000000000000000000000000000000000000a15212c3640484f52575b5b5b5b5c5e636f7c8895a2978a7d7063574a3d3024170a00000000000000000000000000000000000013202c3946535f6c798693a0acb4ada5a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a8e8174675a4d4134271a0e0013202c3946535f6c798693a0acb4ada5a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a8e8174675a4d4134271a0e0006111c2730394046494949494a4e57626e7a86929eaba5988c7f7266594c403326190d00000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000131f2c3946525f6c7986929facab9e9285786b5f5245382c1f120500000000020a11171c20212221201f1e1d1c1b1a1814100a030000000000000000000000000b1724313e4a5764717d88837e79746e69645f5a555059636d77818b95a0aaa1978c82786d63584d43382d22170c00000000000000101c2936434f5c697683909ca9aa9d9084776a5d5053595d616467696a6b6c6c6b6a696664605c57524c453e362e261d140b01000000000000000b1825313e4a5763707d8996a2afa79a8e8175685c5043372b1f140f1018222d38434f5a66727e8a97a3afb2a5988b7e7165584b3e3225180b000000000000000815212d3946525e6a75818c97a29d999796979a9ea3a19b958e88827d7a797b8087909a93877a6e6155493c3023170a00000000000000000000000004101c2935414d5965717c87929ca5aca9a29c97949292929084776a5d5044372a1d110013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d0000010a131a21262a2c2c2c2c2c2c2c2c2c2a26211a1d24282b2c2c2c2c2c2c2c2c2b28231d160e050000000000000003090d111213131313131313131312100c070100000000000000000000000000000000000000000000000000000000000000000000000000000000010c18232e38434d58626c757f88919a9b928a817971696159514a4242424242424242403c362e251b11060000000c1825323e4b5864717e8a97a4a2968a7d7165594d4034281c100300000000000000000000000000000000000000000000000000000000000000020c151f28313b444d54595a5a5a5a5a5a5a5a5650473d32271b0f03000b17222d38424a5155555555555555555555524c433a2f24190d01000000000000000000000000000000000000000000000000000000000000000000040f1a242e37434f596268686767686a6e75808b97a195897c6f6356493d3023170a00000000000000000000000000000000000013202c3946535f6c798693a0acb0a59b94929292929292929292929292929292929292929292929292929292929292929292929292928e8174675a4d4134271a0e0013202c3946535f6c798693a0acb0a59b94929292929292929292929292929292929292929292929292929292929292929292929292928e8174675a4d4134271a0e00000a151e272f353a3c3c3c3d3e46515d6a76838f9ba8a69a8d8173675a4d4134271a0e01000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000121f2c3845525f6b7885929eabac9f9285796c5f5246392c1f1306000000010b141c22282c2e2e2d2c2c2b2a29282724201b140d0400000000000000000000000b1724313e4a5764717d8a8f8a85807a75706b65605b626b757f89939da7a2998f857a70665c51463c31261b100500000000000000101c2936434f5c697683909ca9aa9d9084776a5d50484d5155585a5c5e5f5f5f5f5e5c5a5754504b46413a342c241c140b0200000000000000000916232f3c4855616e7a87939faca99d9184786c6054483c30251d1b1c222a343e4954606b77838f9ba7b3b2a5988b7e7165584b3e3225180b0000000000000005111d2935414d5964707b869099a2a5a3a3a3a6a19c96908a837d77716d6d6f757e8893968a7d7164584b3f3226190d000000000000000000000000000d1925313d4854606b76808a939ba1a6a9a7a3a09f9e9d9084776a5d5044372a1d110013202c3946535f6c798693a0aca79a8d8173675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0a0a09a8d8173675a4d4034271a0d000000010910161a1e1f202020202020201f1e1a150f12181c1f20202020202020201f1c18120c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c27313c46505a636d767f8890999c938b837b736b635c544c453d363636363634302b241c1309000000000a1723303d4956636f7c8995a2a69a8d8175695d5044382c201307000000000000000000000000000000000000000000000000000000000000020b141e27313a434d565f65676767676767676662594f43382b1f1306000f1b27333f4a545c616262626262626262625d564c41352a1d1105000000000000000000000000000000000000000000000000000000000000000000000814212e3a4753606b7475747475777a8087919c9c9185796d6054483b2e22150900000000000000000000000000000000000013202c3946535f6c798693a0acada0948986868686868686868686868686868686868686868686868686868686868686868686868686868174675a4d4134271a0e0013202c3946535f6c798693a0acada0948986868686868686868686868686868686868686868686868686868686868686868686868686868174675a4d4134271a0e0000030c151d24292d2f30303035414e5a6773808d99a6a79a8e8174675b4e4134281b0e01000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000111e2b3744515e6a7784909daaaca09386796d6053473a2d20140700000009131d262d34383b3b3a39383736353433312c261f160d03000000000000000000000b1724313e4a5764717d8a9795908b86817b76716c676b747d87919ba5a39a90877d73695e544a3f352a1f150a0000000000000000101c2936434f5c697683909ca9aa9d9084776a5d50444145484b4e505152525252514f4d4b4844403b352f29221a130a020000000000000000000714202d3945525e6b7784909ca8ada094887c7064584d42372e2a28292d333c46505a65717c88939fabb7b2a5988b7e7165584b3e3225180b00000000000000010d1925313c48535e69747e8790979c9f9f9e9b96908b857e78726c666160636c76828d998c8073675a4d4134281b0f020000000000000000000000000814202c38434e59646e7881899095999c9e9fa0a09f9d9084776a5d5044372a1d110013202c3946535f6c798693a0a0a09a8d8173675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693939393938d8173675a4d4034271a0d0000000000050a0e11131313131313131313110e0a04070c1012131313131313131312100c0701000000000000000000000000000000000000000000000000000000000104060708090a0a0a0908070503000000000000000000000000000000000000000000000000000000000a15202a343e48515b646d767e878f979d958d857d756d665e574f473f372f292927242019120a01000000000915222f3b4855616e7b8794a1aa9d9185796c6054483c2f23170b0000000000000000000000000000000000000000000000000000000000010a141d263039434c555f687173737373737373736b6054473b2e22150800121e2b3743505b666d6f6f6f6f6f6f6f6f6e685d5246392d211407000000000000000000000000000000000000000000000000000000000000000004090e15222e3b4855616e7b8281818283868b91999c948a8074695d5145382c1f130700000000000000000000000000000000000013202c3946535f6c798693a0acaca0938679797979797979797979797979797979797979797979797979797979797979797979797979797972665a4d4034271a0e0013202c3946535f6c798693a0acaca0938679797979797979797979797979797979797979797979797979797979797979797979797979797972665a4d4034271a0e000000030b12191d2123232326333f4c5865727e8b98a5a89b8e8174675b4e4134281b0e01000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000101d2a3643505c6976828f9ca8ada194877a6e6154483b2e221508000005101b252f383f44474847464544434241403d3831281f150b000000000000000000000b1724313e4a5764717d8a91969b97928c87827d7873737d868f99a3a49b92887e756b61574d42382e23180e030000000000000000101c2936434f5c697683909ca9aa9d9084776a5d504437393c3f414344454646454443413e3b38342f2a241e171009010000000000000000000004111d2a36434f5b6774808c98a5b0a4988c8175695e5349403a363535383e454e58626c77828d99a4abb2b2a5988b7e7165584b3e3225180b00000000000000000814202b37424d57626c757e868c909293918e8a858079736d67605a55535a65717d89938f8275695c4f43362a1d1004000000000000000000000000040f1b26323d48525c666f777e84898d909293939392918f84776a5d5044372a1d110013202c3946535f6c798693939393938d8173675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000013202c3946535f6c79868686868686868173675a4d4034271a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003070b0e1012141516161716161513110f0c0905010206090b0c0c0c0c0c0c0c0c0b0906010000000000000000030e18222c363f49525b646c757d858d959d978f87807870686159514941382f261d18140e080000000000000714202d3a4653606c7986929faca195897c7064584c3f33271b0f02000000000000000000000000000000000000000000000000000000000a131c262f38424b555e67717a818181818181817c6f6255493c2f2216090013202c3946525f6c787b7b7b7b7b7b7b7b7a6e6255483b2f221508000000000000000000000000000000000000000000000000000000000000050b10151a1e222d3a46525e6a76828e8e8e9092969996918a82786e63584c4135281c100600000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6960554a3e3125190c0013202c3946535f6c798693a0acaca09386796c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6960554a3e3125190c0000000001070d111416161825313e4b5764717e8b97a4a89b8e8174675b4e4134281b0e01000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000f1c2835424e5b6874818d9aa7afa295897c6f6256493d3023170a00000a16212c37414a50545554535251504f4e4c49423a31271c11060000000000000000000a1724313d4a5763707b80858a8f949998938e89837e7d868f98a1a49b928980766c63594f453b30261c130a020000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372d303235363838393938373634322f2c28231e19130c06000000000000000000000000010e1a27333f4c5864707c8894a0aca99d91867a70655b524b4643424244494f576069737e89939a9aa0a9b2a5988b7e7165584b3e3225180b0000000000000000030f1a25303b46505a636c747b8084868685827e79746e68625c554f494955616d7a86868684776a5e5144382b1e1205000000000000000000000000000a15202b36404a545d656d73797d81838586868685848381776a5d5044372a1d110013202c3946535f6c79868686868686868173675a4d4034271a0d010000000000000000000000000000000000000000000000000000000000131f2c3946525f6b7679797979797979797266594d4033271a0d0000000000000000000000000000000000000000000000000000000003060809090909090807050301000000000000000000000000000000000000000000050a0f13171a1d1f2122232323232321201e1c1915110d0d12161819191919191919191815120d06000000000000000006101a242d374049525a636b737b838b929a99918a827a736b635b534a41382f261c12080000000000000006121f2c3845515e6b7784919daaa5998c8074685c4f43372b1f120600000000000000000000000000000000000000000000000000000009121c252e38414a545d677079838c8d8d8d8d8d887c6f6255493c2f2216090013202c3946535f6c7986888888888888887b6f6255483c2f22150900000000000000000000000000000000000000000000000000000000050b11161c21252a2e3236424e5a66727e8a969b948f8e8d8a85807870675c52473b30241c17110b050000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5d574e44392d2115090013202c3946535f6c798693a0acaca09386796c5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5d574e44392d211509000000000000010508090b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000d1a2733404d5966727f8b98a4b0a3978a7d7164584b3f3226190d00020e1a26323e49535b6161605f5e5d5c5b5b59544c43392e22160a0000000000000000000916232f3b48545f696f74797e83888d929899948f8a878f98a1a49b928980766d645a51473d36312b241c140a0000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a2326282a2b2c2c2c2c2b292825231f1c17130d080100000000000000000000000000000b17232f3c4854606c78848f9ba7aea2978c81776d645c56524f4e4f51555a6169727b8590958d8e97a2afa5988b7e7165584b3e3225180b00000000000000000009141f29343e48515a62696f747779797876726e68635d57504a443e45525e6b7679797979756a5e5144382b1e120500000000000000000000000000040f1a242e38424b535b62686d717477787979797977767470665b4f4236291c1000131f2c3946525f6b7679797979797979797266594d4033271a0d000000000000000000000000000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6960554a3d3125180c0000000000000000000000000000000000000000000000000004090d1012141616161616151412100e0b080501000000000000000000000000000000040b11161b1f2326292b2d2f303030302f2e2d2b2825211d19191e2225252525252525252524221e181109010000000000000008121b252e37404851596169717981888f979b948c857d756d655c534a41382e241a100500000000000003111d2a3743505d6976838f9ca9a89c9084786b5f53473b2e22160a000000000000000000000000000000000000000000000000000008111b242e37404a535c666f78828b959a9a9a92897f766c6054483b2f2215080013202c3946535f6c7986939595959595887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000020910161c22272d31363a3e41444a56626e7a8692998c8282807d79746e665e554b4037322d28221d17100a03000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f535252525252525252525252525252525252525252525252525252525252525252525252514c453c32271c11050013202c3946535f6c798693a0acaca09386796c5f535252525252525252525252525252525252525252525252525252525252525252525252514c453c32271c1105000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000c1825313e4a5763707c8995a2aea5998c8073675a4e4135291c100605111e2a36434f5a656d6e6d6c6b6a696867655e554a3f33261a0e01000000000000000007131f2b37434d575e63686d73787d82878c91969b969398a1a89c928980776e645b56514c47423c362e261c120700000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d191b1d1e1f1f1f1f1e1d1b1916130f0b07020000000000000000000000000000000007131f2b38444f5b67737e8a96a1aca89e93897f766e67625e5c5b5b5d61656c737b848e978f848693a0ada5988b7e7165584b3e3225180b000000000000000000020d18222c363f4850585e64686a6c6c6b6966625d57524c453f3936424e5a646b6c6c6c6c6b63594e4235291d1003000000000000000000000000000008121d263039414950575c6165686a6b6c6c6c6c6b6967655e554a3e32261a0e00111e2a37434f5a646b6c6c6c6c6c6c6c6c6960554a3d3125180c0000000000000000000000000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5d574e44392d2115090000000000000000000000000000000000000000000000050b1015191c1f21222323232221201f1d1a1815110d0701000000000000000000000000080f161c22272b2f3336383a3b3c3d3d3d3c3b393734312d2924232a2e313232323232323232312e29231b1309000000000000000009131c252e363f474f575f676f767e858c949c968f877f776e655c534a40362c22170c020000000000000f1c2835424e5b6874818e9aa0a0a094887b6f63574b3e32261a0e0000000000000000000000000000000000000000000000000007111a232d364049525c656e78818b949da59c938980766d645a4f44382c2013070013202c3946535f6c798693a0a2a2a295887b6f6255483c2f22150900000000000000000000000000000000000000000000000000050d141b21272d33383d42464a4e5154565d6975828e9a8e827673716d69635c544e4b47433e39342e28221b140d060000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f53464646464646464646464646464646464646464646464646464646464646464646464644413b332a20160b000013202c3946535f6c798693a0acaca09386796c5f53464646464646464646464646464646464646464646464646464646464646464646464644413b332a20160b00000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000916222f3b4854616d7a86929faba89b8f82766a5d5145392d2116131214202d3946525f6b777b7a79787776757470675b4f4236291d10030000000000000000030f1b26313b454d53585d62676c71767b80858b97a2a0a3a6a69a8d807b76716c67625d57524d4840382e23180d01000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110f10121213131211100f0c0a070300000000000000000000000000000000000000030f1b27333f4b56626d79848f9aa4afa59b91888079736e6b6968686a6d71777d858d9694897e8693a0aca5988b7e7165584b3f3225180c0000000000000000000006101a242d363e464d53585b5e5f5f5f5d5a56514c46403a342e323d48525a5f5f5f5f5f5e5951473d3125190d010000000000000000000000000000010b141e272f373f454b5055585b5d5f5f5f5f5f5e5d5b58534c43382d22160a000e1a26323e48525a5f5f5f5f5f5f5f5f5f5d574e44392d2115090000000000000000000000000000000000000000000000000000000000000a16212c3740484f525353535353535353514c453c32271c1105000000000000000000000000000000000000000000010910161c2125292b2e2f3030302f2e2d2b292724211e19120b03000000000000000000020a121a21272d32373b3f4245464849494a4949474644413d3a35302e353a3e3f3f3f3f3f3f3f3f3e3a342d251b110700000000000000010a131b242d353d454d555d646c737a828a929a99918980776e655c52483e33291e13080000000000000e1a2733404d596673808c93939393938b7f73675a4e4236291d10000000000000000000000000000000000000000000000000071019232c353f48525b646e77818a939da69d948a81776e645b52483e33271c10040013202c3946535f6c798693a0acafa295887b6f6255483c2f2215090000000000000000000000000000000000000000000000000810171e252c33393e44494e52565a5d60636567717d899593877b6f69676663615e5b57534e4a453f39332d261f18100800000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346393939393939393939393939393939393939393939393939393939393939393939393835302921180e04000013202c3946535f6c798693a0acaca09386796c5f5346393939393939393939393939393939393939393939393939393939393939393939393835302921180e0400000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000713202c3945515e6a76838f9ba7ab9e9286796d6155493d3228221f1f2026313d4955616e7a8786868584838281776a5d5044372a1d11040000000000000000000a151f2a333b42474c51565b60656a7179818a96a2a39c999b9d928c87827d78726d68635e59524a4035291e1206000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d11040000000000000000000000000000000000000000000000000000000000000000000b17232e3a45515c68737d88939da6ada39a928a847e7a7775757576797d82888f97978d837986929faca5988c7e7265584c3f3225190c000000000000000000000008121b242c343b42474c4f51535352504e4a45403b352f29232c3640484f5253535353524e483f362b20150900000000000000000000000000000000020c151d252d343a4045494c4f51525353535251504e4c48423a31271c1105000a16212c3740484f525353535353535353514c453c32271c110500000000000000000000000000000000000000000000000000000000000005101a252e373e4346464646464646464645413b332a20160b000000000000000000000000000000000000000000030b131a21272c3135383a3c3c3c3c3c3b3a383633312e29241d150c0200000000000000020b141c242b32383e43484b4f51535556565656555452504d4a46413c3840464a4c4c4c4c4c4c4c4c4a463f372d23180d02000000000002080d10131b232b333b434b535a61697078808890999b928a81776e645a50453a2f24190e0300000000000c1925323f4b5864717e8686868686868683776a5e5144382b1e120000000000000000000000000000000000000000000000060f19222b353e47515a646d768089939ca59e948b81786f655c524940362c22160b000013202c3946535f6c798693a0acaca295887b6f6255483c2f22150900000000000000000000000000000000000000000000010a121a222930373e444a4f555a5e62666a6d6f717375798591978b8077757472706d6a67635f5a55504a443e383129221a120a020000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b29241e170f0600000013202c3946535f6c798693a0acaca09386796c5f5346392c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b29241e170f060000000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000004111d2936424e5a67737f8b97a3aea295897d71655a4e443a322e2c2c2d3038424e5965717d8a939291908f8d8174685b4f4236291d10030000000000000000030e18212a31373e444a51585f666d747b838b939ba099928c90959a98938d88837e79746f6a645c51463a2e221509000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000000000000000000000000000000000000000000000000000006121d2934404b56616c76818b949da5aca49c958f8a87848281828385898e939a988f857b7885929eaba5988c7e7265584c3f3225190c00000000000000000000000009121a222a30363b3f434546464544413e3a352f2a241e1a242e363d43464646464645423d362d24190f040000000000000000000000000000000000030b141b22292f34393c40424445464646464543423f3c3730281f150a000005101a252e373e4346464646464646464645413b332a20160b000000000000000000000000000000000000000000000000000000000000000009131c252c32373939393939393939393835302921180e040000000000000000000000000000000000000000030c151d252c32383d414447484949494948464442403d3a352f271e140a000000000000010b141d262e363d444a4f54585b5e60616263636362615f5d5956514c47414a515758585858585858585651493f352a1e120600000000060d14191d1f202122293139414850575e666e767e878f989c938980766c61574c41362a1f140800000000000a1724303d4a56636f787979797979797979756a5e5144382b1e1200000000000000000000000000000000000000000000050e18212b343d475059636c767f89929ba59e958c82796f665d534a40372e241a1005000013202c3946535f6c798693a0a2a0a095887b6f6255483c2f221509000000000000000000000000000000000000000000020b131c242c333b42494f555b60656a6e7276797c7e80828385909c90858482817f7d7a77736f6b66615b565049423b342c241c140b0200000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1c18130d050000000013202c3946535f6c798693a0acaca09386796c5f5346392c201f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1c18130d05000000000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000010d1a26323e4b57636f7b87939eaaa69a8e82766b60554c443e3a3938393c424a545f6a76818d999f9e9d968a7d7165584c4033271a0e0100000000000000000a15202a333c43494f555c636970777e868d959d9d968f878084898e939899948f8a85807a756e62564a3d3024170a000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000000000000000000000000000000000000000000000000000000000000000000010c18232f3a45505a656f78828b939ba2a8a7a09b9693908f8e8e8f9295999e978f867d737784919eaba6998c7f7265594c3f3226190c000000000000000000000000000810181f252b2f3336383939393735322e29241e1913121c242c323639393939393936322b241b120800000000000000000000000000000000000000020911171e23282c30333637393939393938373533302c261e160d0300000009131c252c32373939393939393939393835302921180e040000000000000000000000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c29241e170f060000000000000000000000000000000000000000020b151e272f373d44494d515355565656555453514f4c4946403930261c1106000000000009131d262f3840484f555b5f64676a6c6e6f70706f6f6d6b6966625d58524c525c636565656565656565625b51463b2f23160a000000060f171f25292c2d2e2f2f3031363e454d545c646c747d8690999b92887d73685d52473c3024180d01000000000915222e3a47525d676c6c6c6c6c6c6c6c6c6b63594e4235291d10000000000000000000000000000000000000000000040e17202a333d464f59626b757e88919ba49f968c837970675d544b41382e251c120800000013202c3946535f6c7986939f96939393887b6f6255483c2f2215090000000000000000000000000000000000000000020b141d252e363e454c535a60666c71767a7e8285888b8d8e909197a19791908f8d8b898683807b77726d67615b544d463e362e261d140b02000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201313131313131313131313131313131313131313131313131313131313131312100c0802000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201313131313131313131313131313131313131313131313131313131313131312100c080200000000000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000000a16222e3a46525e6a76828d99a4aa9e93887c72675e554f4a47454546484d535c66707b87929eaaa99d9185796d6155493d3024170b0000000000000000030f1b26313c454e545a60676d747b828990989f98928b847d75787d82878c91969b96918b867e7164584b3e3125180b000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d11040000000000000000000000000000000000000000000000000000000000000000000007121d28333e48535d677079818991979da1a5a7a39f9d9c9b9b9c9e9f9a948d857d746b7784909da3a3998c807366594c403326190d0000000000000000000000000000060d141a1f23272a2b2c2c2c2b2825221d18130d070a121a21262a2c2c2c2c2c2c2a26211a120900000000000000000000000000000000000000000000060c12181c202427292b2c2c2c2c2c2b2a282624201b140c0400000000010a131a21262a2c2c2c2c2c2c2c2c2c2c29241e170f0600000000000000000000000000000000000000000000000000000000000000000000010910161a1e1f20202020202020201f1c19130d0500000000000000000000000000000000000000000009141d27303941484f55595d606263636362615f5e5b5956524b42382d22160b0000000006111b252f38414a525960666b707477797b7c7c7d7c7b7a7875726e69635d5658646e72727272727272726d63574b3e3225190c0000040f1821293035393a3b3b3c3d3e3d3b3b424a525a626b747e87919c9a8f857a6f63584c4135291d11050000000006121e2a36414c555c5f5f5f5f5f5f5f5f5f5e5951473d3125190d0000000000000000000000000000000000000000040d162029323c454f58616b747e87909aa3a0978d847a71675e554b42382f261c130a0000000013202c3946535f6c798692998d868686867b6f6255483c2f22150900000000000000000000000000000000000000010a141d262f3740484f575e656b72777d82878b8e929597999b9c9da1a9a29e9d9c9a9896938f8b87837d78726c655f57504840382f261d140b020000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000006121e2a36424e5a65717c88939ea9a4998e83797067605a565352525355585e656e78828d98a3aea3988c8175695d5145392d211408000000000000000007131f2b37434e575f656b72787f868d949b99938d878079726b6c71767b81868b90959a978b7e7165584b3e3225180b000000000000101c2936434f5c697683909ca0a09d9084776a5d5044372a1d110400000000000000000000000000000000000000000000000000000000000000000000010c17222c37414b555e676f777f868c9195999b9d9f9f9f9f9d9b98938e89827b736b69768390969696968d8073665a4d4034271a0d00000000000000000000000000000003090e13171a1d1f20201f1e1c1915110c070200000810161a1e1f202020201f1e1a150f0800000000000000000000000000000000000000000000000001070c1014171a1c1e1f2020201f1f1d1c1a17140f0902000000000000010910161a1e1f20202020202020201f1c19130d0500000000000000000000000000000000000000000000000000000000000000000000000000050a0e1113131313131313131312100d080200000000000000000000000000000000000000000006101b252f39424b535a6065696c6e6f6f6f6f6e6c6a6865625d544a3f33271b0e000000020d18222d37414a535c646b71777c8083868789898a89888785827e7a756f68615b68747e7e7e7e7e7e7e7e7366594d4033261a0d00000b16202a333b4145474748494a4a4a47413a40485059626b75808a95a1968b8075695d5145392d21140800000000020e19252f3a434b50535353535353535353524e483f362b20150900000000000000000000000000000000000000030c161f28323b444e57616a737d869099a2a1978e857b72685f554c433930261d140a0100000000121f2c3945525f6b788592988c7e797979786d6155483b2f2215080000000000000000000000000000000000000009131c262f384149525a616970767d83898e92979b9ea1a4a6a8a9aaa9a8a8a9a9a8a7a5a29f9b98938e89847d777069625a524a41392f261d140a0000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000020e1a26313d4954606b76828c97a2aaa0958b8279726b6662605f5f5f6164697077808a949ea9a79c92877b7064584d4135291d110400000000000000000916222f3b48545f6a70767d838a909090908e88827c756f686161666b70757a7f84898e938b7e7165584b3e3225180b000000000000101c2936434f5c69768390939393939084776a5d5044372a1d1104000000000000000000000000000000000000000000000000000000000000000000000005101a252f39434c555d666d747a8085898c8f9192929392908e8b87837d777069616875828a8a8a8a8a8a8174675a4e4134281b0e000000000000000000000000000000000003070b0e1012131313110f0d0905010000000000040a0e11131313131313110e0a040000000000000000000000000000000000000000000000000000000004080b0e1011121313131312110f0d0b080300000000000000000000050a0e1113131313131313131312100d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17222d37414b545d656b7176797b7c7c7c7b7a797774726e665b4f43372a1e1100000008131e29343f49535c656e757c83888c909294959696969593918e8a86807a736b626875828c8c8c8c8c8c7e7265584c3f3226190c0005111c28323c454d5153545555565757534c43393e47505a636e79848f9b9d91857a6d6155493d3024170b000000000008131e2831393f4446464646464646464645423d362d24190f04000000000000000000000000000000000000000a151e28313a444d566069737c858f98a2a1988f857c726960564d433a31271e140b020000000000121e2b3844515e6b778491998c80736c6c6c665c5145392d20140700000000000000000000000000000000000007111b252e38414a535b646b737a81888e94999ea3a7aaa9a6a3a09f9d9c9c9c9c9d9ea0a2a5a9a8a49f9a958f89827b746c645c534b42382f261c120800000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0905000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b090500000000000000000000000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000915212c38434f5a65707b86909aa4a79d948b837c77726f6d6c6b6c6e71757a8189929ca6a99f958b80756a5f53483c3024180c0000000000000000000a1724303d4a5763707c8283838383838383827d77716a645d56555a5f64696e73787d83888b7e7165584b3e3225180b000000000000101c2936434f5c69768386868686868684776a5d5044372a1d110400000000000000000000000000000000000000000000000000000000000000000000000009131d27313a434b545b62696f74797d8082848586868584827f7b77726c665f5a66737d7d7d7d7d7d7d7d74685b4e4135281b0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000206090a0a0a0a0a0a0a0a0a0a0906030000000000000000000000000006111d28333e49535d666f767d82858889898988878583817e786b5e5245382c1f120000020d1924303b46505b656e7780878e94989c9fa1a2a3a3a3a2a09e9a96918b847d756c6976838f989898988b7e7164584b3e3225180b000915212d39444e575e606161626364635e554b40353e48525c67737f8b97a2968a7d7165584c3f33261a0d0100000000010c161f272e34383939393939393939393936322b241b12080000000000000000000000000000000000000006111c26303a434c565f68727b858e97a1a2998f867c736a60574e443b31281f150c02000000000000101d2a3643505c6976828f9b8e8275685f5f5b544a4034291d11040000000000000000000000000000000000040f19232d37404a535c656d757d858c93999fa5aaaba6a19d9a969492908f8f8f8f90919396999da1a6aba6a09a948d857e766e655d544b41382e241a1005000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201919191919191919191919191919191919191919191919191919181715110c0500000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201919191919191919191919191919191919191919191919191919181715110c050000000000000000000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000000004101b27323d49545e69747e88929ba4a69d958e88837e7b797878797a7d81868c939ba4a8a0978d83796e64594d42372b1f14080000000000000000000a1623303c4956626d75767676767676767676716b665f59524b494e53585d63686d72777c817e7265584c3f3225190c000000000000101c2936424f5c6874797979797979797974695c5043362a1d1004000000000000000000000000000000000000000000000000000000000000000000000000010b151f283139424a51585e64696d70737677787979787775736f6b66615b5456626b70707070707070706c63584c4033271a0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407090c0d0e0f1010100f0e0d0b08060200000000030405050505050505050402000000000000000000000000000000000000000000000000000206090c0e1011121313131312110f0d0a0704000000000000000000000000000000000000000000000000000407080808080808080808080705010000000000000000000001080e12151717171717171717171716130f090300000000000000000000000b17222e3945505b656f7881888e9294969696959492908d85786b5f5245382c1f12000007121e2a35414c57626d77818a92999fa4a8a8a3a09d9b9a9a9a9b9c9f9d968f877e756b7683909da5a4978a7d7164574a3e3124180b000c1825313e4a5560696d6d6e6f70716f675c50443836404b56636f7b8894a19a8d8174675b4e4135281b0f020000000000040d151d23282b2c2c2c2c2c2c2c2c2c2c2a26211a120900000000000000000000000000000000000000000b17222e38424c555e68717a848d97a0a39a90877d746a61584e453c32291f160d03000000000000000f1c2835414e5b6774818d9a9184786b5f53504a42382e23180c0000000000000000000000000000000000010b16202b353f49525c656e7780878f979ea4abaca6a09a95918d8a878584838282828385878a8d91959aa0a6aba59e97908880776f665d534a40362c22170d020000000013202c3946535f6c798693a0acaca09386796c5f5346392c2525252525252525252525252525252525252525252525252525252524211d171008000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2525252525252525252525252525252525252525252525252525252524211d17100800000000000000000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000a16212c37424d57626c768089929aa2a7a099938e8b888685858687898d91979ea5a69f978e857b71675d52473c31261a0f030000000000000000000815212d3945515c646969696969696969696966605a544e47413e43484d52575c61666b7075797064584b3e3225180c0000000000000e1b2733404c57626a6c6c6c6c6c6c6c6c6a62584c4034281b0f0200000000000000000000000000000000000000000000000000000000000000000000000000030d161f2730383f464d53585d616467696b6c6c6c6c6a6966635f5b554f495059606363636363636363615a51473b3024170b0000000000000000000000000000000000000000000000000000000000000000000000000000000004090d101316181a1b1c1c1c1c1c1b191715120f0b06070c0f111212121212121212110f0b07010000000000000000000000000000000000000001060a0e1215181a1c1e1f1f20201f1e1d1b191714100c08030000000000000000000000000000000000000000060c10131515151515151515151514110d080200000000000000040c13191e2223242424242424242424221f1a140d05000000000000000000030f1b27333f4a56616c77818a93999ea1a2a3a2a2a09f9c9285786b5f5245382c1f1200000b17232f3b46525d69747e89939ca4aaaaa39c9793918f8e8d8d8e9092969a9990877d747784919daaa4978a7d7063574a3d3124170a000d1a2733404d596672797a7b7c7d7d796c6053473a323a4753606d798693a09c8f8275695c4f4236291c1003000000000000030b12171c1e2020202020202020201f1e1a150f080000000000000000000000000000000000000000000f1b27333f4a545e67707a838d969fa49a91887e756b62584f463c332a20170d0400000000000000000d1a26333f4c5865727e8a9794877b6f63574b3f3830261c1207000000000000000000000000000000000008121d28323d47515b646e7780899199a1a8afa8a19b948f8a85817d7b79777675757577787a7d8185898f949ba1a9a9a29a928981786f655c52483e33291f14090000000013202c3946535f6c798693a0acaca09386796c5f5346393232323232323232323232323232323232323232323232323232323232312d28221a11080000000000000013202c3946535f6c798693a0acaca09386796c5f5346393232323232323232323232323232323232323232323232323232323232312d28221a1108000000000000000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000004101b26313b46505a646d76808890979ea4a49f9b9795939292929496999da2a8a29b948d857c73695f554b40362b2014090000000000000000000005111d29343f4a52595c5c5c5c5c5c5c5c5c5c5a554f49433c3632373c41464b50555a5f64696c685f54483c3023170a0000000000000b17232f3b4650585e5f5f5f5f5f5f5f5f5e5950463b3024180c000000000000000000000000000000000000000000000000000000000000000000000000000000040d151e262d353b41474c5154585a5c5e5f5f5f5f5e5c5a57534f4a443e474f5456565656565656565550483f352a1f13070000000000000000000000000000000000000000000000000000000000000000000000000000050a1015191d20232526282929292928272624211e1b171213181c1e1e1e1e1e1e1e1e1e1e1b17120c040000000000000000000000000000000001070d12161b1e222527292a2c2c2c2c2c2b2a282623201c18140f090300000000000000000000000000000000020a11181c2021222222222222222222201d19130c040000000000030d161e252a2e303030303030303030302f2b261f170f05000000000000000006131f2b37434f5b67727e89939da4aaada7a29f9d9c9d9e9285786b5f5245382c1f1200030f1b27333f4b57636e7a85909ba5aea9a098918c8784828181818183868a8f94998f867b7784919eaba4978a7d7063574a3d3024170a000d1a2734404d5a66738087888989887b6f62564b423f3f4754606d7a8693a09c8f8276695c4f4336291c10030000000000000000060b0f1213131313131313131313110e0a0400000000000000000000000000000000000000000000121e2b3744505b667079838c959fa49b92887f756c635950473d342a21180e050000000000000000000b1724313d4956626f7b8794978b8073675c5045392e23180d0300000000000000000000000000000000030e19242f39444e59636d768089929ba3abaea69e979089837e7975716e6c6a696968696a6c6e7174797e838990979ea6aca49b938a81776d645a4f453b30261b100500000013202c3946535f6c798693a0acaca09386796c5f53463f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3d39332c231a100500000000000013202c3946535f6c798693a0acaca09386796c5f53463f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3d39332c231a10050000000000000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e03010000000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c100300000000000000000000000009141f29343e48525b646d767e868d93989da2a5a3a1a09f9f9fa0a2a5a4a09c97918a837b726a61574d43392f24190e0300000000000000000000010c18232e3840484d4f4f4f4f4f4f4f4f4f4f4e49443e38312b262b30353a3f44494f54595d5f5d564d42372c20140700000000000007131e29343e464d525353535353535353524e473e352a1f140800000000000000000000000000000000000000000000000000000000000000000000000000000000030c141c232a30363b4045484b4e505152535352514f4d4a47433e39353d44484a4a4a4a4a4a4a4a48453e362d23190e02000000000000000000000000000000000000000000000000000000000000000000000000020910161b2025292c2f31333535363636353432302e2b27231e1e24282a2b2b2b2b2b2b2b2b2a28231d160e050000000000000000000000000000050c12181d22272b2e31343637383939393938363532302c2924201a150f080100000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2d29241e160e04000000000b151f282f363a3d3d3d3d3d3d3d3d3d3d3b37312921170d02000000000000000916222e3b47535f6c78848f9aa5aeaca39c9692909090919285786b5f5245382c1f120006121f2b37434f5c6874808b97a2acaca1978e87807b787574737375767a7e838990978d837885929eaba3968a7d7063564a3d3023170a000c1925323f4b5864717d899495968b7e73675d544e4c4c4f58636f7c8895a19b8e8275685c4f4235291c0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c78828b959ea69c928980766d635a51473e342b22180f05000000000000000000000815212e3a46535f6b7784909c9084786d61564b3f352a1f150a0000000000000000000000000000000009141f2a35404b56606a757f89929ba4adada49c948c857e78726d6965625f5e5c5c5b5c5d5f6165686d72787e858d949ca5ada59c938980766c61574c42372c21160b00000013202c3946535f6c798693a0acaca09386796c5f534c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4a453e352c22170b00000000000013202c3946535f6c798693a0acaca09386796c5f534c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4a453e352c22170b0000000000000000000000000000000b1724313e4a5764717d8a97a4a89b8e8275685b4f4235281c100f0d0a06000000000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c1003000000000000000000000000030d18222c364049525b646c747b82888d9195999b9d9e9fa09f9e9d9b9894908b857f78716960574e453c32271d120800000000000000000000000007111c262e363d4143434343434343434343413d38322d26201a1f252a2f34393e43484d5153514b443b31261b0f03000000000000020d18222c353c4245464646464646464645423c352c23180e020000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11181f252b3034383c3f414345454646454443413e3b37322d2c33383c3d3d3d3d3d3d3d3d3c39332d241b1107000000000000000000000000000000000000000000000000000000000000000000000000050d141b21272c3135393b3e40414243434342413f3d3a37332f2a282f3437383838383838383837342e2820170d030000000000000000000000010910171d23292e33373a3d40424445464646454543413f3c3935302b26201a130c040000000000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b3b39352f2820160c02000006121d27313a41474a4a4a4a4a4a4a4a4a4a47423b33291f1409000000000000000c1825313e4a57636f7c8894a0acaea49a918a86838383858685786b5f5245382c1f12000915222e3b4753606c7884909ca8b0a59a8f867c756f6b69676767686a6d72787e868f958a7f85929faba3968a7d7063564a3d3023170a000a1723303c4855616d7986919d9b8f84796f665f5a59595b606a74808c98a4998c8073675a4d4134281b0e020000000000000000000004080b0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0c09060100000000000013202c3946535f6c7986939da7a1958a81776d645b51483f352c22191006000000000000000000000005121e2a37434f5b67737f8b9795897e72675c51463b31261b0f030000000000000000000000000000030f1a25313c47525d67727c87919aa4adada49b928a827a736d67615d59555351504f4f4f515255585c61676d737b828a939ca5aea59b92887d73695e53493e33281d1106000013202c3946535f6c798693a0acaca09386796c5f58585858585858585858585858585858585858585858585858585858585858585650473e33281c1105000000000013202c3946535f6c798693a0acaca09386796c5f58585858585858585858585858585858585858585858585858585858585858585650473e33281c110500000000000000000000000000000b1724313e4a5764717d8a97a4a99c8f8376695d5043372b1f1d1c1a16110b0400000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000000000101c2936434f5c69768390908376695c4f4336291c10030000000000000000000000000006101a242e374049525a626970767c8185898c8f909292939292908e8b8884807a746d665f574e453c332a20150b01000000000000000000000000000a141c252b31343636363636363636363635322d27211b150f14191e23282d32373c41454644403a32291f140a000000000000000006101a232a31363939393939393939393936312b231a11070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d14191f24282c303235373839393939383634322e2b262221272c2f30303030303030302f2d28221b1209000000000000000000000000000000000000000000000000000000000000000000000000060f171f262c32383d4145484a4c4e4f4f4f4f4f4d4c4947433f3b35333a4044454545454545454543403932291f150a00000000000000000000030b131b22292f353a3f43474a4d4f50525253535251504e4b4845413c37312b241d160e060000000000000000000006111c262f383f454848484848484848484846413a32281e130800000b17232e39434c5256575757575757575756534d453b30251a0e020000000000000d1a2733404d5966727e8b98a4b0a89d9288807a777676787a7c786b5f5245382c1f12000c1825313e4a56636f7b8894a0acab9f94887e736a635f5c5b5a5a5b5e61666d747d868f908586929faca3968a7d7063564a3d3023170a000714202d3945515d6975818c97a1958b8178706a676565676b727b86919ca095897d7064584b3f3226190d000000000000000000030a101417191919191919191919191919191919191919191919191919191816120c06000000000013202c3946535f6c7986939fa8a194897f756c625950463d332a20170d040000000000000000000000020e1b27333f4b57636e7a86919a8f84786d62584d42372c20130700000000000000000000000000000914202b37424d58636e79848e98a3acafa59b928980787068625b56514c494644434242434446494c50565b62697078818a939ca5ada3998f857a70655a4f44392e23170c000013202c3946535f6c798693a0acaca09386796c65656565656565656565656565656565656565656565656565656565656565656561594f44392d211408000000000013202c3946535f6c798693a0acaca09386796c65656565656565656565656565656565656565656565656565656565656565656561594f44392d21140800000000000000000000000000000a1724313d4a5763707d8a96a3aa9e9185786b5f53473b302b2a2926221d160e05000000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000000000010507101c2936434f5c69768390908376695c4f4336291c1007050100000000000000000000000008121c252e37404850585f656b7075797d808284858686868584827f7c78736e69635c554d453c332a21180e040000000000000000000000000000020a131a202528292929292929292929292825211c16100a04080d12171c21262b3035383938342f2820170d030000000000000000000811192025292c2c2c2c2c2c2c2c2c2c2a26201911080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e13181c202326282a2b2c2c2c2c2b2a2825221e1a16161c2022232323232323232323201c171009000000000000000000000000000000000000000000000000000000000000000000000000060f18212930373e43494d515457595b5c5c5c5c5b5a5856534f4b46413c454c505151515151515151504b443b31261b10040000000000000000040d151d252c333a40454b4f5356595b5d5e5f5f5f5f5e5c5a5855514d48423c362f28201810070000000000000000000b17222d38424a5154555555555555555555524c443a3025190e02000f1c28343f4b555d636363636363636363635f574d42362a1e12050000000000000f1b2835424e5b6774818e9aa7b0a4988c80766e6a696a6b6d706e665b4f43372a1e11000e1a2733404d5966727e8b98a4b0a69a8e83776c615853504e4d4d4f51565b626b747d8792909097a2aea3968a7d7063564a3d3023170a0004101d2935414d58646f7b86909a9d938a827b7673727274777d848d98a29a8f84786c6054483c2f23170a0000000000000000050e151b20242626262626262626262626262626262626262626262626262625221d1811090000000013202c3946535f6c79848d96a0a59b91887e746b62584f453c32291f160c0300000000000000000000000a17232f3a46525e6975808b93938a7f74695f54483c2f23160a00000000000000000000000000020e1a25313c48535e6a75808b95a0aab1a79d938980776e665e57504a45403d3a383636353637393c40454a50575f666f77818a949da7aba1978c82776c61564a3f34281d11050013202c3946535f6c798693a0acaca0938679727272727272727272727272727272727272727272727272727272727272727272726b6155493d3023170a000000000013202c3946535f6c798693a0acaca0938679727272727272727272727272727272727272727272727272727272727272727272726b6155493d3023170a00000000000000000000000000000a1623303c4956626f7b8895a1ada094877b6f63574c423b383635332e2720170e040000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c20130000000000070d1114161c2936434f5c69768390908376695c4f4336291c1614110d070000000000000000000000000a131c252e363e464d545a5f64696d7073757778797979787775726f6c68635d57514a433b332a21180f060000000000000000000000000000000001080f14191b1c1c1c1c1c1c1c1c1c1c1c1915100b0500000001060c11161b2025292c2c2b28241d160e050000000000000000000000070e14191d1f20202020202020201f1d1a150e070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070c101417191c1d1e1f20201f1e1d1b1916120e0a0b10141617171717171717171614100c06000000000000000000000000000000000000000000000000000000000000000000000000050f18212a333b42494f54595d6164666768696969686765625f5b57524c464e565c5e5e5e5e5e5e5e5e5c564d43382c20140800000000000000040d161f272f373e454b51565b5f6366686a6b6c6c6c6c6b696764615d58534e48413a322a2219100700000000000000000f1b27333f4a545c616161616161616161615d564c41362a1e120600121e2b3844505c676f707070707070707070695e52463a2d211408000000000000101c2936434f5c6975828f9ca8ada094887b6f645e5c5d5f6163625d544a3f33271b0f000f1c2935424f5b6874818e9aa7afa3978a7e72665b50474341404142454a5159626b75808b969ca1a9b0a3968a7d7063564a3d3023170a00000d1924303c47535e69747e88929a9c948d8783807e7f8183888e969f9b92887e73675c5044382c20140700000000000000050e1720272c3033333333333333333333333333333333333333333333333333312e29221b1208000000121f2b3844515d68717b858e97a1a39990877d736a61574e443b31281e150b020000000000000000000006121e2a35414d58636f7a85868686867b7064574b3e3125180b0000000000000000000000000007131f2a36424d5964707b86919ca7b2aa9f958b81776e655c544c453f3934302d2b2a2929292b2d3034393f454d545d656e78828b95a0aaa89e93887d72675b5045392d2115080013202c3946535f6c798693a0acaca093867e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7d7164574b3e3124180b000000000013202c3946535f6c798693a0acaca093867e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7d7164574b3e3124180b00000000000000000000000000000815212e3a4754606d7985929eaaa3978b8074685e544c474443423f39322920160b0000000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000000030b12181d2022222936434f5c69768390908376695c4f4336292222201d18120b0300000000000000000000010a131c242c343b42494e54595d616467696a6b6c6c6c6b6a686663605c57524c463f38312921180f060000000000000000000000000000000000000004090c0f101010101010101010100f0d09050000000000000000050a0f14191d1f201f1c18120c040000000000000000000000000003090d1112131313131313131313110e0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004070a0d0f11121313131212100e0c09060200000407090a0a0a0a0a0a0a0a09070400000000000000000000000000000000000000000000000000000000000000000000000000020d17212a333c454c545a6065696d707274757676757573716f6b67635d57515560686b6b6b6b6b6b6b6b675f54493d3024180b000000000000020c161f283139414950565c62676b6f7274767879797978777673706d69645f59524b443c342b2219100600000000000000121e2b37434f5b666d6e6e6e6e6e6e6e6e6e685e52463a2e2115080013202c3946535f6c787d7d7d7d7d7d7d7d7b6e6255483c2f221509000000000000101c2936434f5c697683909ca9ab9e9285786c5f534f5052545656524b42382d22170b00111d2a3744505d697683909ca9ada094877a6e62564a3e3735343435393f475059646e7a85919ca8b3b0a3968a7d7063564a3d3023170a00000814202b36424d58626c76808890979e98938f8d8c8c8d8f94999f99928980766c61564b3f34281c1004000000000000010c17202931383d3f4040404040404040404040404040404040404040404040403e3a342d241a10060000101c2834404b565f69727c858f98a2a2998f867c736960564d433a30271d140a01000000000000000000020d1925303c47525d68737979797979797064574b3e3125180b000000000000000000000000000b17232f3b47525e6a75818c98a3aeaea3988e83796f655c534a423a342e2824211e1d1c1c1d1e2024282e343b434b535c666f79848e98a3aaa49a8f83786d6156493d3124170b0013202c3946535f6c798693a0acaea2968d8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b7e7164574b3e3124180b000000000013202c3946535f6c798693a0acaea2968d8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b7e7164574b3e3124180b000000000000000000000000000006121f2b3844515d6975828d99a4a89c90857a6f665e585451504e4a443b32271c110500000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c20130000020c151d24292d2f2f2f36434f5c69768390908376695c4f43362f2f2f2d29241d150c0200000000000000000000010a121a222a31373d43484d5154575a5c5e5f5f5f5f5f5d5c5a5753504b46413b352e271f170f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003080d10121312100c070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f29333c454e575e656b7175797c7f818282838282807e7b78736e69625b5a667278787878787878787165594c3f3326190d0000000000000a141e28313a434b535a61686e73777b7e818385868686858482807d7975706a645d564e463d342b22180e0400000000000013202c3946525f6c777b7b7b7b7b7b7b7b7a6f6256493c2f2316090013202c3946535f6c79868a8a8a8a8a8a887b6f6255483c2f221509000000000000101c2936434f5c697683909ca9aa9d9084776a5e51444445484a4946413930261c110600121f2b3845515e6b7784919eaaab9e9185786b5f52463a2d282727292d353e48525d6874808c98a4b0b0a3968a7d7063564a3d3023170a0000030e1a25303b46505a646d767e868c92979a9b9998989a9c9b98938e8780776e645a50453a2e23170b0000000000000007131e29323b43494c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a453f362c22170c00000c18242f3a444d57606a737d869099a3a1988e857b72685f554c42392f261c13090000000000000000000008141f2a36414c5761696c6c6c6c6c6c685e53483c2f23160a000000000000000000000000030f1b2834404b57636f7b86929da9b3a89d92877c71675d534a41383029221d181412100f0f101114181d22293139414a545e67727c87919c9e99938d887e7265584b3f3225180c0013202c3946535f6c798693a0acb3a89f999898989898989898989898989898989898989898989898989898989898989898988b7e7164574b3e3124180b000000000013202c3946535f6c798693a0acb3a89f999898989898989898989898989898989898989898989898989898989898989898988b7e7164574b3e3124180b000000000000000000000000000003101c2835414d5965717c88939ea8a1968c8178706964605e5d5b554d44392e22160a00000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c201300000a141e272e35393c3c3c3c434f5c69768390908376695c4f433c3c3c3c39352e271e140a0000000000000000000000000910181f262c32373c4145484b4d4f515253535252514f4d4a47443f3b35302a231c150d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080b0c0c0c0c0c0c0c0b08040000000000000000000000000000000000000000000000000000000004070808080808080808080808080808080808080808080808080808080808080808080808080808080806040000000000000000000000000004070808080808080808080807040000000000000000000005101b26303b454e57606970777c8286898c8d8f8f908f8e8d8b8884807a746d655d6875828585858585857f7266594c4033261a0d000000000007121c26303a434c555d656c73797e83888b8e909192939292918f8c8985817b756f6860584f463d342a20160c01000000000013202c3946535f6c7986888888888888887c6f6255493c2f2316090013202c3946535f6c7986939797979795887b6f6255483c2f221509000000000000101c2936434f5c697683909ca9aa9d9084776a5d504437393b3d3d3a352f271e150a0000131f2c3946525f6c7885929faba99c9083766a5d5044372b1e1a1a1d232c36414c58636f7b8894a0acb0a3968a7d7063564a3d3023170a00000009141f2a343e48525b646c747b81868b8e9092939392918f8c88837c756e655c53483e33281d1206000000000000000c18242f3a444d54585959595959595959595959595959595959595959595959595650483e34281d11050007121d28323b454e58616b747e87919aa3a0978d847a71675e544b41382e251b1209000000000000000000030e19242f3a454f585e5f5f5f5f5f5f5c564d42372b1f130700000000000000000000000007131f2c3844505c6874808b97a3aeada2968b80756a60554b41382f261e17110c08050300000205080c11171f272f38424c56606a75808a95938d88827c766f63574b3e3125180b0013202c3946535f6c798693a0acb9b1aaa6a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4988b7e7164574b3e3124180b000000000013202c3946535f6c798693a0acb9b1aaa6a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4988b7e7164574b3e3124180b0000000000000000000000000000000c1925313d4954606b77828c96a0a89d938a827a74706c6a69675f554a3e32261a0d00000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c20130006111c263039404548494949494f5c69768390908376695c4f494949494845403930261c1106000000000000000000000000060d141b21262c3035383c3f41434445464646454443403e3b37332f2a241f18110a030000000000000000000000000000000000000000000000000000000000000104070a0c0e0f111112121211100e0d0a080401000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a101417191919191919191715100b04000000000000000000000000000000000000000000000000060c10131515151515151515151515151515151515151515151515151515151515151515151515151515151513100b06000000000000000000060c10131515151515151515151513100c0700000000000000000b16212c37424d57606a727a82888d9295989a9b9c9c9c9b999794908b857f776f676975828f929292928b7e7165584b3f3225180c00000000030e19232e38424c555e676f777e848a8f94979a9c9e9fa09f9f9d9b9995918c878179726a61584f463c32281d13080000000000131f2c3946525f6c7985929595959595887b6f6255493c2f2216090013202c3946535f6c798693a0a4a4a295887b6f6255483c2f221509000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372c2f30302e2a241d150c03000013202c3946535f6c7986939faca89b8f8275685c4f4236291c100e111a242f3b47535f6b7884919da9b0a3968a7d7063564a3d3023170a000000020d18222d364049525a626970757a7e8284858686868482807c77716b645c534a41372c22170c0100000000000000101c2935404c565f65666666666666666666666666666666666666666666666666625a5045392d21150800010c162029333c464f59626b757e88929ba49f968c837970665d534a40372d241b110800000000000000000008131e29333d464d51535353535353504b443b30261a0f030000000000000000000000000b17232f3c4854606c7884909ca8b4a89c91857a6f64594e44392f261d140d0600000000000000000000060d151d26303a444e59636e79848d88827c76716b655d52473b2f22160a0013202c3946535f6c798693a0acb7ada5a1a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0988b7e7164574b3e3124180b000000000013202c3946535f6c798693a0acb7ada5a1a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0988b7e7164574b3e3124180b0000000000000000000000000000000914202c38444f5a65707a848e969ea49c948c85807c79777671675b4e4235281c0f00000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000b17222e38424b515555555555555c69768390908376695c555555555555514b42382e22170b0000000000000000000000000003090f151b2024292c2f323436383939393938373634312f2b27231e19130d0700000000000000000000000000000000000000000000000000000000000004090d101416191b1c1d1e1e1e1e1e1d1b191714110d0904000000000000000000000000000000000000000000000000000000000000000000000000000000060e151b20242526262626262624211c160f06000000000000000000000000000000000000000000020a11181c20212222222222222222222222222222222222222222222222222222222222222222222222222222211f1c17110a010000000000020a11181c2021222222222222222221201c18120a02000000000004101c27323e49545e69727c858c93999ea2a5a7a6a4a2a1a1a1a1a09c979089817970697683909c9e9e978b7e7164574b3e3124180b000000000a15202b35404a545e67707981888f969ba0a4a7a9a9a7a6a6a7a9a8a5a29d98928b847c736a61584e443a2f24190e0300000000121f2c3845525f6b7885929fa2a2a295887b6f6255483c2f2215090013202c3946535f6c798693a0acafa295887b6f6255483c2f221509000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a222423211e19130b0300000013202c3946535f6c798693a0aca89b8e8174675b4e4135281b0e0208131f2b37434f5c6875828e9ba7b0a3968a7d7063564a3d3023170a0000000006101b242e37404850585e646a6e727577787979797876736f6b666059524a41382f251b10050000000000000000121f2b3844515d68717373737373737373737373737373737373737373737373726c6155493d3024170a0000040e17212a343d47505a636c768089929ca59e958b82786f655c52493f362d231a10070000000000000000010c17212b343b414546464646464644403a32291f1409000000000000000000000000010e1a27333f4b5864707c8895a1adafa3978b8074695d52473c32271d140b02000000000000000000000000030b141e28323c47525c68737e827c76716b65605a534b41362a1f13070013202c3946535f6c798693a0acb0a59b949393939393939393939393939393939393939393939393939393939393939393938b7e7164574b3e3124180b000000000013202c3946535f6c798693a0acb0a59b949393939393939393939393939393939393939393939393939393939393939393938b7e7164574b3e3124180b00000000000000000000000000000004101b27323e49545e68727b848c93989d9e97918c8886848275695c4f4236291c0f00000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c2013000f1b27333f4a545c616262626262626976839090837669626262626262615c544a3f33271b0f000000000000000000000000000000040a0f14181c202326282a2b2c2c2c2c2c2b292725221f1b17120d08020000000000000000000000000000000000000000000000000000000000050b1015191d20232527292a2b2b2b2b2a29282623201d1915100b06000000000000000000000000000000000000000000000000000000000000000000000000050f1820272c3032323232323232302d272018100600000000000000000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2c28221b130b01000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2c28231c140c02000000000915212c38444f5a65707a858e969ea4aaa9a39e9a97959494949596999c9b938b82796f7784909daaa4978a7d7164574a3e3124170b00000004101b26313c47515c667079828b939aa1a7aca8a39f9c9a999a9a9c9fa4a9a9a39d968e867c736a60564b41362b20150900000000121f2b3845515e6b7885929eabaea195887b6e6155483b2e2215080013202c3946535f6c798693a0acafa295887b6f6255483c2f221509000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d171715120d08010000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271b0e01020f1b2734404d596673808c99a5b0a3968a7d7063564a3d3023170a000000000009121c252e363e464d53595e6266686a6c6c6c6c6b6967635f5a554e4840382f261d130900000000000000000013202c3946535f6c7980808080808080808080808080808080808080808080807e7164574b3e3124180b000000050f18222b353e48515a646d77808a939da69d948a81776e645b51483f352c22190f060000000000000000050f19222a30353839393939393938342f2820170d0200000000000000000000000004111d2a36424f5b6774808c98a5b1ab9e93877b6f63584c41362b20160c020000000000000000000000000000020c16202b35404b56616d7776716b65605a544e4941392f24190e020013202c3946535f6c798693a0acada09489868686868686868686868686868686868686868686868686868686868686868686867e7164574b3e3124180b000000000013202c3946535f6c798693a0acada09489868686868686868686868686868686868686868686868686868686868686868686867e7164574b3e3124180b000000000000000000000000000000000b16212c37424c566069727a81888d91949d9c9895928f8275695c4f4236291c0f00000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c201300121e2b3744505b666e6f6f6f6f6f6f6f7683909083766f6f6f6f6f6f6f6e665b5044372b1e12000000000000000000000000000000000003080c101416191b1d1e1f2020201f1e1d1b1916130f0b07020000000000000000000000000000000000000000000000000000000000040a11161c2125292c2f323436373838383837363432302d2925211c17110b04000000000000000000000000000000000000000000000000000000000000000000020d17212a32383d3f3f3f3f3f3f3f3d38322a22180e030000000000000000000000000000000000000a141d262e34383b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b38332d251d13090000000a141d262e34383b3b3b3b3b3b3b3b3b3b39342e261e140a000000010d1925313d4954606b77828c96a0a8aea69e97928e8b89888787888a8c90959a948b81777784919eaaa4978a7d7063574a3d3024170a0000000a15212c38434e58636e78828b949da5acaaa39c9793908d8d8d8e9093989da4aba7a0988f857c72675d52473c31261a0f03000000121e2b3845515e6b7784919eabaea194887b6e6154483b2e2115080013202c3946535f6c798693a0ababa295887b6f6255483c2f221509000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110a08060200000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000c1925323e4b5865717e8b97a4b0a3968a7d7063564a3d3023170a0000000000000a131c242c343b42484d5256595c5e5f5f5f5f5e5d5a57534f49443d362e261d140b0100000000000000000013202c3946535f6c79868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b7e7164574b3e3124180b00000000061019232c363f48525b656e78818b949ea69c938980766d635a50473e342b21180e0500000000000000000710181f25292c2c2c2c2c2c2c2b28231d160e05000000000000000000000000000713202c3945525e6b7783909ca8b3a79a8e82766a5e52473b3024190e0400000000000000000000000000000000040e19242f3a45505b656b6b65605a544e49433d3730271d1308000013202c3946535f6c798693a0acaca0938679797979797979797979797979797979797979797979797979797979797979797979797064574a3e3124180b000000000013202c3946535f6c798693a0acaca0938679797979797979797979797979797979797979797979797979797979797979797979797064574a3e3124180b0000000000000000000000000000000005101b26303a444e57606870767c81848b97a3a4a19c8f8275695c4f4236291c0f00000000000000000000000000000000000c1925323f4c5865727e8c9386796c5f5346392c20130013202c3946535f6c787c7c7c7c7c7c7c7c839090837c7c7c7c7c7c7c7c786c5f5346392c2013000000000000000000000000000000000000000004070a0d0f1011121313131211100e0c09060300000000000000000000000000000000000000000000000000000000000000070f151c22272d3135393c3e414243444545444443413f3c3935312d28221c160f08010000000000000000000000000000000000000000000000000000000000000008131e29333c43494c4c4c4c4c4c4c49443c342a1f1409000000000000000000000000000000000006111c262f383f4548484848484848484848484848484848484848484848484848484848484848484848484848484847443f372f251b10040006111c262f383f454848484848484848484845403830261c1106000004111d2935414d5965717d88939ea8b0a69c948c86827e7c7b7a7a7b7d8084898f9693897f7784919eaba3968a7d7063574a3d3024170a0000030f1b26323d49545f6a75808a949da6afa8a098918b87838180808184878c9299a1aaaaa1978e84796f64594e42372b201408000000111e2b3844515e6b7784919eaaaea194877a6d6154473b2e2114080013202c3946535f6c7986939e9e9e9e95887b6f6255483c2f221509000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1724313d4a5763707d8a97a4b0a3968a7d7063564a3d3023170a000000000000010a121b222a30373c41464a4d4f515253535352504e4b47433e38322b241c140b020000000000000000000013202c3946535f6c79869399999999999999999999999999999999999999988b7e7164574b3e3124180b000000000007111a242d364049535c666f78828c959ea59b92897f756c625950463d332a20160c020000000000000000060d14191d1f2020202020201f1c18120c0400000000000000000000000000000916222f3b4854616d7a86939facafa3978a7e72665a4e42362a1f130800000000000000000000000000000000000007121d28343f49535b5f5f5a544e49433d38322c251e150b01000013202c3946535f6c798693a0acaca09386796d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c685e53473b2f231609000000000013202c3946535f6c798693a0acaca09386796d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c685e53473b2f2316090000000000000000000000000000000005101b25303a444e5760686f767c81858b97a3a29f9c8f8275695c4f4236291c0f00000000000000000000000000000002070c1925323f4c5865727e8c9386796c5f5346392c20130013202c3946535f6c798689898989898989899292898989898989898986796c5f5346392c20130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a111920272d33383d4145484b4d4f5051515151514f4e4b4945423d38332d27211a130b030000000000000000000000000000000000000000000000000000000000010d1925303b454e5458595959595958554e463c31261a0e02000000000000000000000000000000000b17222d38424a5154555555555555555555555555555555555555555555555555555555555555555555555555555554504941372c21150a000b17222d38424a5154555555555555555554514a42382d22170b00000814202d3945515d6a76828d99a5b0a89e948a827b75726f6e6d6e6f7174787e848c9491867b85929eaba3968a7d7063564a3d3023170a00000814202c37434e5a65707b87919ca6afa89f968e87807b7774737374777b81888f98a1aba9a0968b80756a5f53483c3024190d010000111e2a3744515d6a7784919eaaada094877a6d6154473a2e2114070013202c3946535f6c7986919191919191887b6f6255483c2f221509000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00000000000000000910181f252b31363a3d404344464646464543413e3b37322d27211a120a02000000000000000000000013202c3946535f6c79869292929292929292949ca69e9592929292929292928b7e7164574b3e3124180b00000000000008121b242e37414a545d677079838c969fa49b91887e756b62584f453c32281e130800000000000000000002080d101213131313131312100c07010000000000000000000000000000000b1825313e4a5763707c8996a2aeaca094877b6e62564a3e32261a0e02000000000000000000000000000000000000010c17222d3841494f52524e49433d38322c26211b140c0300000013202c3946535f6c798693a0acaca09386796c6060606060606060606060606060606060606060606060606060606060606060605d564c42372b1f1307000000000013202c3946535f6c798693a0acaca09386796c6060606060606060606060606060606060606060606060606060606060606060605d564c42372b1f1307000000000000000000000000000000000b16212c37424c566069727a81888d91959d9b9693908e8275695c4f4236291c0f0000000000000000000000000001080e13161925323f4c5865727e8c9386796c5f5346392c20130013202c3946535f6c798693949494949494949999949494949494949386796c5f5346392c20130000000000000000000000000000000000000000000205080b0d0f101112121211100f0e0c090603000000000000000000000000000000000000000000000000000000020b131b232b32383e44494d5155575a5b5d5e5e5e5e5d5c5a5855524e49443f39322c241d150d040000000000000000000000000000000000000000000000000000000004111d2935414c575f6565656565656560584d42362a1e1205000000000000000000000000000000000f1b27333f4a545c616161616161616161616161616161616161616161616161616161616161616161616161616161605b53493d32261a0e000f1b27333f4a545c616161616161616161615c544a3f33281b0f03000a1723303c4855616d7a86929eaaaea2978c8278706965636161616264686d737a828a948d8285929faca3968a7d7063564a3d3023170a00000c1824303c48545f6b76828d98a3adaaa0968d847c756f6a676666686b70767d868f99a3aea79d92877b7064594d4135291d11050000111d2a3744505d6a7784909daaada094877a6d6053473a2d2014070013202c3946535f6c7984848484848484847b6f6255483c2f221509000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000060d141a20252a2e3134363839393939383735322f2b27211c160f080000000000000000000000000013202c3946535f6c798686868686868686868a96a2988c8686868686868686867e7164574b3e3124180b0000000000000009121c252f38424b555e67717a848d97a0a39a90877d746a61574e443a3024190d010000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2633404c5966727e8b98a4b1aa9d9184786b5f53463a2e211509000000000000000000000000000000000000000006111c262f373e434645433d38322c26211b151009020000000013202c3946535f6c798693a0acaca09386796c5f5353535353535353535353535353535353535353535353535353535353535353514b443b30251a0f03000000000013202c3946535f6c798693a0acaca09386796c5f5353535353535353535353535353535353535353535353535353535353535353514b443b30251a0f0300000000000000000000000000000004101c27323e49535e68727b848c93999d9c958f8a8684828175695c4f4236291c0f000000000000000000000000020b12191f232526323f4c5865727e8c9386796c5f5346392c20130013202c3946535f6c798687878787878787889191888787878787878786796c5f5346392c201300000000000000000000000000000000000001050a0e1115171a1b1d1e1e1e1e1e1d1c1a1816130f0c07030000000000000000000000000000000000000000000000010b141d252d353c434a4f55595d616466686a6a6b6b6b6a696764615e5a55504a443d362f271f160e050000000000000000000000000000000000000000000000000000000613202c3945515d69717272727272716a5f53463a2d21140700000000000000000000000000000000121e2b37434f5b666d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d655a4e4236291d1000121e2b37434f5b666d6e6e6e6e6e6e6e6e6d665b5044372b1f1205000d1926323f4b5864717d8a96a2aea99d91867a70665e595655545455585c61687078828b938a8a94a0aca3968a7d7063564a3d3023170a0004101c2835414d5964707c88939eaaaea3998e857b726a635e5b595a5b5f646b747d87919ca7aea3988c8175695d5145392d2114080000101d2a3743505d697683909daaada09386796d6053463a2d20130700131f2c3945525e6b757777777777777777766d6154483b2e221508000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0000000000000000000003090f14191e2125272a2b2c2c2c2c2b2a2826231f1b16100b040000000000000000000000000000131f2c3946525f6b7679797979797979797b8895a2978a7d7979797979797979786f63574a3e3124170b00000000000000000a131d263039434c555f68727b858e98a1a2998f867c736960564c4135291d11050000000000000000000003060809090909090908060200000000000000000000000000000000000f1b2835414e5b6774818d9aa7b3a79b8e8275695c5043372a1e12050000000000000000000000000000000000000000000a141d252d3337393936322c26211b15100a0400000000000013202c3946535f6c798693a0acaca09386796c5f534646464646464646464646464646464646464646464646464646464646464645403a32291f140900000000000013202c3946535f6c798693a0acaca09386796c5f534646464646464646464646464646464646464646464646464646464646464645403a32291f1409000000000000000000000000000000000915202c38444f5a65707a848d969da49b928a847e7a77757470665a4e4135281b0f0000000000000000000000020b141d242a2f3232323f4c5865727e8c9386796c5f5346392c20130013202c3946525f6b777a7a7a7a7a7a7a7a839090837a7a7a7a7a7a7a7a776b5f5246392c20130000000000000000000000000000000001070c11161a1e21242628292b2b2b2b2b2a282725221f1c18130f090400000000000000000000000000000000000000000009131d262f373f474e555b60656a6d7073757677787877777573716e6a65615b554f484139312820170e0400000000000000000000000000000000000000000000000000050a14202d3a4753606d7a7f7f7f7f7f7b6e6155483b2e2215090400000000000000000000000000000013202c3946525f6c777b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b766a5e5145382b1e120013202c3946525f6c777b7b7b7b7b7b7b7b786c5f5346392d201306000e1b2834414e5a6773808c99a5b1a5988c8174695e544d4a484747494c50565e667079848e95959ba5b0a3968a7d7063564a3d3023170a000814202c3945515d6975818d98a4b0a89d92877c72696058524e4d4d4f535a626b75808b96a1ada99d9186796d6155493d3024180b0000101d2a3643505d697683909ca9aca09386796c5f5346392d20130600111d2a36424e59636a6b6b6b6b6b6b6b6b6a655b5044382c201307000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00000000000000000000000003090d1215181b1d1e1f2020201f1d1c1916130f0a0500000000000000000000000000000000111e2a36434f5a646b6c6c6c6c6c6c6c6e7b8895a2978a7d716c6c6c6c6c6c6c6c675e53473b2f2216090000000000000000010b141e27313a434d566069737c868f99a0a0988e857b72685d5245392d2013070000000000000000050b0f131515151515151514120e0903000000000000000000000000000000101d293643505c6975828f9ca8b2a6998c8073665a4d4134281b0f02000000000000000000000000000000000000000000020b131b22272a2c2c2a26211b15100a04000000000000000013202c3946535f6c798693a0acaca09386796c5f53463a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a38342f2820170d0200000000000013202c3946535f6c798693a0acaca09386796c5f53463a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a38342f2820170d02000000000000000000000000000000000d1925313d4954606b76818c969fa79c92898079726e6a6867655e54493e3225190d00000000000000000000020b141d262e363b3e3f3e3f4c5865727e8c9386796c5f5346392c201300111e2a37434f5a656c6d6d6d6d6d6d6d7683909083766d6d6d6d6d6d6d6c655a4f43372a1e11000000000000000000000000000000060c12181d22262a2d303335363738383837363533312e2b28241f1a150f090200000000000000000000000000000000000007111b252f384149515960666c71767a7d808283848585848482807d7a76716c66605a524b433a322920160d0300000000000000000000000000000000000000000000050b11161b202d3a4753606d7a878c8c8c887b6e6155483b2e221a150f09030000000000000000000000000013202c3946535f6c798688888888888888888888888888888888888888888888888888888888888888888888888885786b5e5145382b1e120013202c3946535f6c798688888888888886796d6053463a2d20130700101d2936434f5c6975828f9ba8aea195897c7064584c423d3b3a3b3c3f454c545e68727d88949fa6adb0a3968a7d7063564a3d3023170a000b1723303c4855616d7985919da9afa3978c81756b60574e4742404043485059636e7985919da9aea2968a7d7165594c4033271a0e0200101c2936434f5c697683909ca9ac9f9286796c5f5346392c201306000e1a26323d4751595d5e5e5e5e5e5e5e5e5e5a53493f34281c1004000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00000000000000000000000000000105090c0e10121313131312110f0d0a07030000000000000000000000000000000000000e1a26323d48525a5e5f5f5f5f5f5f616e7b8895a2978a7d71645f5f5f5f5f5f5f5c554c42362b1f1307000000000000000000020c151f28313b444e57616a747d8790939393938d847a6e6154473b2e211408000000000000000810161b1f22222222222222211e1a150e060000000000000000000000000000111e2b3744515d6a7784909daab1a4978b7e7165584b3f3225190c0000000000000000000000000000000000000000000000010910161b1e201f1e1a15100a040000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c28241d160e050000000000000013202c3946535f6c798693a0acaca09386796c5f5346392d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c28241d160e050000000000000000000000000000000003101c2935414d5965717d88939ea8a1958b80766e67625e5c5b59544c42382d211509000000000000000000030c141d262f3840474b4c4a454c5865727e8c9386796c5f5346392c2013000f1b27333e49535b606060606060606976839090837669606060606060605b53493e33271b0f00000000000000000000000000020a11171e23292e32363a3d3f414344454545444342403e3b3834302b26201a140d0600000000000000000000000000000000040e19232d37414a535b636a71777d8286898c8e9091919291908f8c8a86827d78726b645d554c443b32281f150b0100000000000000000000000000000000000000020910161c22272b2f3a4753606d7a87949995887b6e6155483b2f2a26201b150e0700000000000000000000000013202c3946535f6c798693959595959595959595959595959595959595959595959595959595959595959595959285786b5e5145382b1e120013202c3946535f6c798693959595959386796d6053463a2d20130700111e2b3744515d6a7784909daaac9f9286796d6054483c312f2e2e30343a424c56606b77828e9aa6b2b0a3968a7d7063564a3d3023170a000e1a26333f4c5864717d8995a2aeaa9e92867b6f64594f453c363334373e47525d6874818c99a5b1a69a8d8174685b4f4336291d1004000f1c2936424f5c6975828f9ca9ac9f9286796c5f5246392c1f1306000915202b363f474d515151515151515151514e4841372d22170c00000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16212c3640484e52525252525255616e7b8895a2978a7d716457525252525252504b433a30251a0e0200000000000000000000030d161f29323c454f58626b757e868686868686867b6e6154483b2e21150800000000000009121a21272c2e2f2f2f2f2f2f2e2b262018100600000000000000000000000000121f2c3845525e6b7885919eabb0a396897d7063574a3d3124170a00000000000000000000000000000000000000000000000000050a0f111313110e0a0400000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c202020202020202020202020202020202020202020202020202020201f1c18120c04000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c202020202020202020202020202020202020202020202020202020201f1c18120c04000000000000000000000000000000000006131f2c3844515d6975828d99a4a79b8f84796e655c56524f4e4c48423a31261b10050000000000000000030c151e262f38414a52575956504c5865727e8c9386796c5f5346392c2013000a16212d3741494f5353535353535c69768390908376695c5353535353534f4941372d21160a000000000000000000000000050c141b22292f34393e4246494c4e505151515151504e4d4a4744403c37312c251f1810090100000000000000000000000000000a15202b353f49535c656d757c83898e9296999b9c9e9e9e9e9d9b9996928e89837d766e675e564d443a31271d1309000000000000000000000000000000000000050d141b21282d33373c3f4753606d7a8794a095887b6e6155483f3b36312c262019120a020000000000000000000013202c3946535f6c798693a0a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a29e9285786b5e5145382b1e120013202c3946535f6c798693a0a2a2a09386796d6053463a2d20130700121f2c3845525f6b7885929eabaa9d9084776b5e5145382c2221212328303a444f5a66727d8a96a2aeb0a3968a7d7063564a3d3023170a00101d2936424f5b6774818d99a0a3a59a8e82766a5e53473d332a27272c35404c5864707c8995a2aea99d9084776a5e5145382c1f1206000f1c2935424f5b6875828f9ca8ac9f9285786b5f5245382c1f12050008141f29343d444a4d4e4e4e4e4e4e4e4e4e4b463e352b21160a00000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000000000000206090b0d0f10101010100f0d0b090603000000000000000000000000000000000004101a242e363d4245464646464855616e7b8895a2978a7d7164574a4646464645443f3931281e1409000000000000000000000000040d17202a333d465059626c7579797979797979776d6054473a2e211408000000000007111b242c33383b3c3c3c3c3c3c3a37312a22180f04000000000000000000000000131f2c3946525f6c7985929facafa295887c6f6255493c2f231609000000000000000000000000000000000000000000000000000000020506060502000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013131313131313131313131313131313131313131313131313131312100c070100000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013131313131313131313131313131313131313131313131313131312100c07010000000000000000000000000000000000000815212e3b4754606d7985929eaaa3978b7e73685d534b464341403d3730281f150a0000000000000000030c151e273039424a535c6365625a515865727e8c9386796c5f5346392c20130005101b252f373e4446474747474f5c69768390908376695c4f4747474746443e372f251b10050000000000000000000000060e171e262d343a40454a4e5256585b5c5d5e5e5e5d5d5b595754504c47423d373029221b130a0200000000000000000000000006111c27323c47515b656e777f878e94999ea2a5a7a5a3a2a2a2a3a6a5a29e9a948e88807970685f564c43392f251a100500000000000000000000000000000000070f171e262c33393e43484c4f53606d7a8794a095887b6e61554f4b47423d37312a231c140c0400000000000000000013202c3946535f6c798693a0acaeaea9a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59e9285786b5e5145382b1e120013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946525f6c7986929faca89c8f8276695c5043362a1d1415171e28333e4955616d7986929eabb0a3968a7d7063564a3d3023170a00121f2b3845515e6a77839092949698968a7e7265594d42362b211a1a24303c4854616d7a86939facac9f9286796c6053473a2d211407000f1c2835424f5b6875828e9ba8ab9e9285786b5e5245382b1f1205000d1925303b454f565a5b5b5b5b5b5b5b5b5a5750473d32271b0f03000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0000000000000000000000000001060a0e1215181a1b1c1d1d1d1c1b1a1815120f0b070200000000000000000000000000000008121c242c3236383939393b4855616e7b8895a2978a7d7164574a3e3939393937342e271f160c0200000000000000000000000000050e18212b343e47505a636b6c6c6c6c6c6c6c6c655b5044382c1f130600000000030e19232d363e444748484848484847423c342a20160b00000000000000000000000013202c3946535f6c7986939facaea295887b6e6155483b2f221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130707070707070707070707070707070707070707070707070707060606040100000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2013070707070707070707070707070707070707070707070707070706060604010000000000000000000000000000000000000a1623303c4956626f7b8895a1aca093877a6e62564b413a363433312c261e160d0300000000000000030c151e273039424b545d656e726c635a5865727e8c9386796c5f5346392c2013000009131d252d33373a3a3a3a434f5c69768390908376695c4f433a3a3a3a37332d251d13090000000000000000000000060f18202830383f454b51565a5e626567696a6b6b6b6a69686663605c58534e48423b342d251c140b0200000000000000000000000b17222d38434e59636d76808991999fa5aaa49f9b989695959697999ca0a5a5a099928b837a71685e554b41362c21170c010000000000000000000000000000071019212930373e444a4f54585b5e616d7a8794a095887b6e615e5b57534e48423c352e261e160d04000000000000000013202c3946535f6c798693a0acb3a89f99989898989898989898989898989898989898989898989898989898989285786b5e5145382b1e120013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca89b8e8275685b4f4235281c0f080c16212d3945515e6a76838f9ca8b0a3968a7d7063564a3d3023170a0013202c3946535f6c7981838587898c8e877a6e6255493d31251a0f13202c3945525e6b7884919eaaada194877b6e6155483b2f221508000f1b2835424e5b6875828e9ba8ab9e9184786b5e5145382b1e120500101d2935414d57616767676767676767676762594f43372b1f1306000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000070c12161b1e22242628292a2a2a29282624221f1b17120d080200000000000000000000000000000a121a21262a2c2c2c2e3b4855616e7b8895a2978a7d7164574a3e312c2c2c2b28231d150d04000000000000000000000000000000060f19222c353e4851595e5f5f5f5f5f5f5f5f5b534a3f34281c1004000000000915202a353f484f54555555555555534d463c32271c1004000000000000000000000013202c3946535f6c798693a0acaea194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20131313131313131313131313131313131313131313131313131313131312110d09040000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20131313131313131313131313131313131313131313131313131313131312110d0904000000000000000000000000000000000a1724313d4a5764707d8a97a3aa9d9184786b5f52463a2f2a282724201b140c0400000000000000030c151e273039424b545d666e777e756c635a65727e8c9386796c5f5346392c201300000b151f282f363a3d3d3d3d434f5c69768390908376695c4f433d3d3d3d3a362f281f150b00000000000000000000060f18212a323a424950565c62666b6e71747577777878777674726f6c68645f59534d463e372e261d140b0100000000000000000005111c28333f4a55606a757f89929ba3aaa59f98938f8c8a8988898a8d90959aa0a7a49c958c837a70675d53483e33281d120700000000000000000000000000071019222b333b42494f555b6064686b6d6f7a8794a095887b6f6d6a67635f59544d47403830281f160d030000000000000013202c3946535f6c798693a0acaea2968d8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b85786b5e5145382b1e120013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675b4e4134281b0e0105111d2935424e5b6774818d9aa6b0a3968a7d7063564a3d3023170a00121f2b3845515d68717477797b7d7f8183786b5f52463a2d211509111d2a3743505d697683909ca9afa295897c6f6255493c2f231609000e1b2834414e5b6774818e9ba8aa9e9184776b5e5144382b1e110500121f2c3845515d69727474747474747474736b6054473b2e211508000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00000000000000000000040b12181d22272b2e31333536363636363533312e2b27231e19130d060000000000000000000000000000080f151a1d1f1f222e3b4855616e7b8895a2978a7d7164574a3e31241f1f1e1b17120b03000000000000000000000000000000000007101a232c363f484e5253535353535353524f4941382d23170c00000000040f1b26313c47515a606262626262625f584e44382d201408000000000000000000000013202c3946535f6c798693a0acaea195887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1d1a150f0700000000000013202c3946535f6c798693a0acaca09386796c5f5346392c201f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1d1a150f070000000000000000000000000000000b1724313e4a5764717d8a97a4a89c8f8276695c5043372a1e1b1a18140f090200000000000000040c151e273039424b545d666f7881877e756c6265727e8c9386796c5f5346392c20130006121d27313a41474a4a4a4a4a4f5c69768390908376695c4f4a4a4a4a4a47413a31271d12060000000000000000040e18212a333c444c545b62686d72777a7e8182848485848483817e7c7874706a655e57504840382f261d13090000000000000000000a16222d3944505b66717c87919ba4ada49b948d8783807d7c7b7c7d8184898f959da5a69e958c83796f645a4f453a2f24190d020000000000000000000000060f19222b343d454c545a61666b7074777a7c7e8794a095887e7c7a77736f6a655f58514a423a31281f150c0200000000000013202c3946535f6c798693a0acaca093867e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e786b5e5145382b1e120013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01010d1a26333f4c5965727e8b98a5b0a3968a7d7063564a3d3023170a00101c2935414c576066686a6c6e7072747673695d5044372a1e1105101c2936434f5c6975828f9ca9b0a396897c6f6356493d3023160a000e1b2734414e5a6774818e9aa7aa9e9184776a5d5144372a1e11040013202c3946535f6c7981818181818181817b6f6255483c2f221509000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000070f161d23292e33373a3d3f41424343434341403d3b37332f2a241e1710090100000000000000000000000000040a0e111215222e3b4855616e7b8895a2978a7d7164574a3e31241713120f0b06000000000000000000000000000000000000000008111a242d363d42454646464646464646433e382f261c1106000000000915202c37424d58636c6f6f6f6f6f6f6a6055493d3024170b000000000000000000000013202c3946535f6c7986929facaea295887b6f6255483c2f221509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c292520191109000000000013202c3946535f6c798693a0acaca09386796c5f5346392c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c29252019110900000000000000000000000000000b1724313e4a5764717d8a97a4a89b8e8275685b4e4235281c0f0d0b08040000000000000000040d161e273039424b545d666f78818a90877e746765727e8c9386796c5f5346392c2013000b17232e39434c525657575757575c69768390908376695c575757575756524c43392e23170b00000000000000020c16202a333c454e565e666d73797e83878a8d8f90919291918f8e8b8885817b767069625a524a41382f251b110700000000000000030e1a26323e4a55616c77838e98a3ada49b9289827c7773706f6f6f7174787d848b939ba4a79e958b81766c61564b40352a1e130800000000000000000000030e18212b343d464f575e656c72777c808486898a8d97a2988e8b898683807b76706a635c544c433a31271e140a00000000000013202c3946535f6c798693a0acaca093867971717171717171717171717171717171717171717171717171717171716f675b4f43372a1d110013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000b1825313e4b5764717d8a97a4b0a3968a7d7063564a3d3023170a000c1824303a454e55595b5d5f626466686a6961574c4034281c0f030f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000e1a2734414d5a6774818d9aa7aa9d9084776a5d5044372a1d11040013202c3946535f6c79868e8e8e8e8e8e887b6f6255483c2f221509000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000009111921282e343a3f43474a4c4e4f5050504f4e4c4a47443f3b353029221b130b02000000000000000000000000000000000815222e3b4855616e7b8895a2978a7d7164574a3e3124170b0000000000000000000000000000000000000000000000000008121b242b323639393939393939393937332d261d140a00000000020e1a26313d48545f6a757b7b7b7b7b7b7165584b3f3225180c0000000000000000000000121f2c3945525f6b7885929fabafa296897c6f6356493c3023160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f534639393939393939393939393939393939393939393939393939393939393939393836312b231b11070000000013202c3946535f6c798693a0acaca09386796c5f534639393939393939393939393939393939393939393939393939393939393939393836312b231b1107000000000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e0100000000000000000000030d161f283039424b545d666f78818a938c847b726665727e8c9386796c5f5346392c2013000f1c28343f4b555d636363636363636976839090837669636363636363635d554b3f34281c0f0000000000000009141e28323c454e57606870777e848a8f9397999c9d9e9e9e9d9c9a9895918c87817b746c645c534a41372d23190f0400000000000007131f2b37434f5a66727d89949faaa69c92898077716b676462626365686c72798189929ba5a79d92887d73685d52463b3024190d010000000000000000000b151f2a333d464f58616970777d83888c90939597999fa8a099979593908c87827b756d665e554c433930261b1106000000000013202c3946535f6c798693a0acaca09386796c65656565656565656565656565656565656565656565656565656565645e554a3f33271b0e0013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1724303d4a5763707d8a96a3b0a3968a7d7063564a3d3023170a0008131e29333c44494d4f51535557595b5d5c574f463b3024180c000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000d1a2734404d5a6773818d9aa6aa9d9083766a5d5043372a1d11040013202c3946535f6c7986939b9b9b9b95887b6f6255483c2f221509000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0000000000000009121b232b323940454a4f5356595b5c5d5d5d5c5b595653504b46413b342d251d140b020000000000000000000000000000010815222e3b4855616e7b8895a2978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000009121a21262a2c2c2c2c2c2c2c2c2c2b27221b140b020000000007131f2b37424e5965707b86888888857a7064574b3e3225180b0000000000000000000000121e2b3845515e6b7784919eaab0a3968a7d7064574a3e3124180b000000000000000000000000000000000000000000000000000306080908050200000000000000000000000000000013202c3946535f6c798693a0acaca09386796c5f5346464646464646464646464646464646464646464646464646464646464646464645423c352d23190e0300000013202c3946535f6c798693a0acaca09386796c5f5346464646464646464646464646464646464646464646464646464646464646464645423c352d23190e030000000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000000b151f28313a424b545d666f78818a938c837a72696065727e8c9386796c5f5346392c201300121e2b3844505c676f70707070707070768390908376707070707070706f675c5044382b1e1200000000000006101b26303a444e576169727a828990969b9fa3a6a5a3a2a2a2a3a5a7a4a19d98928c867e766e655c53493f352b20160b0000000000000a17232f3b47535f6b77838e9aa5aa9f958a80766d665f5a57565556585c61676f778089939da8a49a8f84796e63574c41352a1e1206000000000000000007121c27313b454f58616a737a82888e94989c9fa2a4a5a6a6a6a6a4a29f9c97928d86807870675e554b41372d23180d020000000013202c3946535f6c798693a0acaca09386796c5f58585858585858585858585858585858585858585858585858585857534c43392e22170b0013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00020d17212a32383d40424446484a4d4f51504c463d34291e1307000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000d1a2633404d596673808d9aa6a99c908376695d5043362a1d10030013202c3946535f6c798693a0a8a8a295887b6f6255483c2f221509000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110400000000000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00000000000008121b242d353d444b51565b5f6265676969696969676563605c57524c453e372f261d140b010000000000000000000000050a0d0f15222e3b4855616e7b8895a2978a7d7164574a3e3124170b000000000000000000000000000000000000000000000000000000080f151a1e1f20202020202020201e1b16110a0200000000000b17232f3b47535f6a76818d9594897e73685e53473b2f23160a0000000000000000000000111d2a3744505d6a7683909ca9b1a4988b7e7265584c3f3326190d0000000000000000000000000000000000000000000000050b0f13151514120e0a060200000000000000000000000013202c3946535f6c798693a0acaca09386796c5f53525252525252525252525252525252525252525252525252525252525252525252524e473f352b20140800000013202c3946535f6c798693a0acaca09386796c5f53525252525252525252525252525252525252525252525252525252525252525252524e473f352b2014080000000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e0100000000000000000006111c27313a434c545d666f78818a938c837a7168605e65727e8c9386796c5f5346392c20130013202c3946535f6c787d7d7d7d7d7d7d7d839090837d7d7d7d7d7d7d7d786c5f5346392c20130000000000010c17222d37424c566069737b848c949ba1a6a5a09c999795959697999ca0a5a9a49e97908880776e655b51473d32271c110600000000000e1a26333f4b57636f7b87939fa0a2998e83786e645b544e4b4948494c50565d656e77818b96a1aba1968b8074695d52463a2f23170b00000000000000020d18232e39434d57616a737c858c939a9fa4a7a39f9c9a9999999b9da0a4a8a39e98918a827970675d53493f34291f13080000000013202c3946535f6c798693a0acaca09386796c5f534b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b47413a31271c11060013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0000050f1820272d313336383a3c3e40424443403b342b22180d02000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000d1a2633404c596673808c99a6a99c908376695c4f4336291c10030013202c3946535f6c798693a0acafa295887b6f6255483c2f221509000000000001101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d110d0b070200000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000006101a242d363f474e565c62676b6f7274757676767574726f6c68635d57504941382f261d1309000000000000000000030a11161a1c1c222e3b4855616e7b8895a2978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000040a0e11131313131313131313110f0b05000000000000030f1b2734404c58646f7b87929a8e83786d62574c42372b1f13070000000000000000000000101c2936424f5c6875828e9ba8b3a6998d8074675a4e4135281c0f030000000000000000000000000000000000000000000810161b1f2122211e1a16120e0a060200000000000000000013202c3946535f6c798693a0acaca09386796c5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5e5951473c3125190d00000013202c3946535f6c798693a0acaca09386796c5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5e5951473c3125190d0000000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e010000000000000000000b17232e39434c555e666f78818a948b8279716b6b6b6b6b727e8c9386796c5f5346392c20130013202c3946535f6c79868a8a8a8a8a8a8a8b93938b8a8a8a8a8a8a8a86796c5f5346392c2013000000000007131e29343e49545e68727b858e969ea5a7a09a94908c8a8988898a8c9094999fa6a9a29a928980776d63594e44392e23170c0100000000101c2936424f5b6773808c9092949694887d71665c524a433e3c3c3d3f444b535c656f7a848f9aa5a79c91857a6e63574b3f33271b0f0300000000000008131f2a35404a555f69737c868e969ea5a9a29c9793908d8c8c8c8e9094989da4a9a39c948b82796f655b51463b3025190e0200000013202c3946535f6c798693a0acaca09386796c5f53463e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3b3630281f150b000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000060e161c212527292b2d2f31333637373430292219100600000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000d192633404c5966727f8c99a6a99c8f8275695c4f4236291c10030013202c3946535f6c798693a0acafa295887b6f6255483c2f22150900000000050c121c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1b1a17130d06000000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00000000030e18222c363f48515960676d73777b7e818283838382817e7c78746e68625a534a41382e251a100600000000000000040d151c22262829282e3b4855616e7b8895a2978a7d7164574a3e3124170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3744505c6874808c9894897d72665b50453a30251a0f0300000000000000000000000e1b2734414d5a6773808d99a6b2a89b8f8276695d5044372b1f1206000000000000000000000000000000000000000009121a21272c2e2f2e2a26221e1a16120e0a060100000000000013202c3946535f6c798693a0acaca09386796c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a63584d4135291c1003000013202c3946535f6c798693a0acaca09386796c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a63584d4135291c100300000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e010000000000000000000f1b27333f4a555e677078828b948b827978787878787878787e8c9386796c5f5346392c20130013202c3946535f6c798693939393939393939393939393939393939386796c5f5346392c201300000000020d19242f3a45505b65707a848d97a0a8a49c958e8984807d7c7b7c7d8084888e949ca3aca49b92897f756b60554a3f34291d120600000000101d2a3643505d69768081838587898b83776c60554a403832302f303339414a535d68737e8994a0aba2968b7f73675c5044382c2014070000000000020e1925303b46515c67717b858f98a0a8a79e97918b878381807f808184888c9299a0a8a69d948b81776d62574c41362b1f130800000013202c3946535f6c798693a0acaca09386796c5f534639323232323232323232323232323232323232323232323232312f2b251e160d03000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00000000040b1015181a1c1e21232527292a2a28241e1810070000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000c1926323f4c5965727f8c99a5a89c8f8275685c4f4236291c0f030013202c3946535f6c798693a0a7a7a295887b6f6255483c2f221509000000070f171d222936434f5c697683909ca9aa9d9084776a5d5044372a282826231e1811090000000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000a151f2a343e48515a636b72787e83878b8d8f9090908f8d8b8884807a736c655c534a40362c22170c010000000000030d161f272d32353635313b4855616e7b8895a2978a7d7164574a3e3124170b000000000000000000000000000001070b0e0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0e0b07010000000000000915222e3b4753606c7884909b8f84786c61554a3f34291e14090000000000000000000000000c1926323f4b5865717e8a97a3b0aa9e9185786c6053473b2e22160a0000000000000000000000000000000000000007111b242c33383b3c3a36322e2a26221e1a16120c05000000000013202c3946535f6c798693a0acaca093867979797979797979797979797979797979797979797979797979797979797979797979797975695d5144372b1e1104000013202c3946535f6c798693a0acaca093867979797979797979797979797979797979797979797979797979797979797979797979797975695d5144372b1e110400000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000111e2b3744505c677079828b94958a85858585858585858585858d9386796c5f5346392c20130013202c3946535f6c798686868686868686868686868686868686868686796c5f5346392c20130000000007131e2a35404c57626c77828c969fa9a49b938b837d7874716f6f6f7174787d838a929aa3aca49b91877c72675c50453a2e23170b000000000f1c2935424e5a656f737577797b7d7e7f73675b4f44392e26232224282f38414c56616c78838f9aa6a79c9084786c6054483c3024170b000000000007131f2a36414c58636e78838d97a1aaa69d958d86807a777473727375787b81878e969fa8a69d93897e74695e53473c3024180c00000013202c3946535f6c798693a0acaca09386796c5f5346392c252525252525252525252525252525252525252525252525231f1a130c0400000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00000000000005090c0e10121416181a1c1e1d1b18130d06000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000c1925323f4c5865727e8c98a5a89b8f8275685b4f4235281c0f020013202c3946535f6c7986939a9a9a9a95887b6f6255483c2f221509000006101921282e3236434f5c697683909ca9aa9d9084776a5d504437353535332f2a231b120800000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00000005101b26313c46505a636c757c848a8f94979a9b9b9b9b9c9a9894908b857e766e655c52483e34291e130800000000000a151f2831383e4243413d3b4855616e7b8895a2978a7d7164574a3e3124170b00000000000000000000000000060d12171a1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1a17120d0600000000000b1824313d4a56636f7b8894978b7f73675b5044392d22170c020000000000000000000000000a1724303d4956626f7b8894a1adada194887b6f63574b3e32261b0f030000000000000000000000000000000000020e19232d363e44474846433e3a36322e2a26221d160f060000000013202c3946535f6c798693a0acada0948986868686868686868686868686868686868686868686868686868686868686868686868684776b5e5144382b1e1105000013202c3946535f6c798693a0acada0948986868686868686868686868686868686868686868686868686868686868686868686868684776b5e5144382b1e110500000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000121f2c3945525f6c78828b949d9b949292929292929292929292959386796c5f5346392c201300131f2c3946525f6b767979797979797979797979797979797979797979766b5f5246392c1f13000000010c18242f3b46525d68737e89939ea8a59b92898179726c676462626364676c71788088919ba4ada3998e83786d62564b3f33271c10040000000d1926323e49545d6366686a6c6e7072736d63574b3f332a2b2b2a2a2927303a45505b66727e8a95a1aca094887c7064584c4034271b0f02000000000c18242f3b47525e69747f8a959fa9a89e948b837b746e6a68666566686b70757c848d96a0aba59b90857a6f64584c4135291d1105000013202c3946535f6c798693a0acaca09386796c5f5346392c20181818181818181818181818181818181818181818181816130e09020000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00000000000000000000030507090c0e1011110f0c070200000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000c1825323e4b5865717e8b98a5a89b8e8275685b4e4235281b0f020013202c3946535f6c79868d8d8d8d8d8d887b6f6255483c2f22150900020d18222b333a3f41434f5c697683909ca9aa9d9084776a5d5044424242413f3b342d241a0f05000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0000000b16222d38434d58626c757e878e959b9c9793908e8e8e9092969b9c96908980776e645a50453a2f24190d0200000004101b26313a434a4e4f4e49424855616e7b8895a2978a7d7164574a3e3124170b0000000000000000000000000710171e2327292929292929292929292929292929292929292929292927231e171007000000000d1a2733404c5965727e8b9794877b6f63574b423b32281e13080000000000000000000000000815212e3a4753606c7985919eaab0a4988b7f73675b4f43372b201409000000000000000000000000000000000008131f2a353f484f5455534f4b47433e3b37332e2821180f0500000013202c3946535f6c798693a0acb0a59b9492929292929292929292929292929292929292929292929292929292929292929292929184776b5e5144382b1e1105000013202c3946535f6c798693a0acb0a59b9492929292929292929292929292929292929292929292929292929292929292929292929184776b5e5144382b1e110500000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000121f2b3845515e69747d868f98988e8b8b8b8b8b8b8b8b8b8b8b8b8b86796c5f5346392c201300111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b645a4f43372a1e1100000005111d2935404c57636e7985909ba5a89d938980776f67605b58565556585b60666e767f89939da8aaa0958a7e73675b5044382c2014080000000915212d38424b52575a5b5d5f61636567635b51463a353737383737353432333f4a56616d7985919da9a5998d8174685c5043372b1e120600000004101c2834404c58636f7a86919ca6aca1968c82797169635e5b59595a5c5f646b727b848e99a4ada2978c8074695d5145392d211508000013202c3946535f6c798693a0acaca09386796c5f5346392c20130b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a070300000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000b1825323e4b5864717e8b98a4a89b8e8174675b4e4134281b0e020013202c3946535f6c7981818181818181817b6f6255483c2f2215090008141f2a343d454b4e4e4f5c697683909ca9aa9d9084776a5d504e4e4e4e4e4b463f362c21160a000013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000004101c27333e49545f6a747e879099a098918b868382818283868a8f969e9a928a80766c61574c41352a1e13070000000915212d38434c555a5c5a534c4855616e7b8895a2978a7d7164574a3e3124170b000000000000000000000006101922292f333536363636363636363636363636363636363636363635332f29221910060000000f1c2835424e5b6874818d9a9184786b5f56534c443a3025190d01000000000000000000000006121f2b3844505d6975828e9aa7b3a79b8f83776b5f54483c31261b1006000000000000000000000000000000020d1824303b47515a60625f5b57534f4b47433f3a332a21170d02000013202c3946535f6c798693a0acb3ada5a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9e9184776b5e5144382b1e1105000013202c3946535f6c798693a0acb3ada5a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9e9184776b5e5144382b1e110500000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000101d2935414d58626b747d868f95887e7e7e7e7e7e7e7e7e7e7e7e7e7e796c5f5346392c2013000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a52483e32261a0e0000000a16222d3945515d6874808b96a1aca1968c81776e655d554f4b4948494b4f555c646d76818b96a1aca69b8f84786c6054483c3024180b00000005101b26303941474b4d4f51535557595a5751493f4042434444444342403e3b3945515c6875818d99a5a99d9084786c5f53473a2e2115090000000814202d3945515c6874808b97a2ada69a8f857a70675f58524f4d4c4d4f53596069727d88939eaaa89d9185796d6155493d3124180c000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000b1824313e4b5764717e8b97a4a79a8e8174675a4e4134281b0e0100121f2c3845515d69727373737373737373736b5f53473a2e211508000d1925303b464f565a5b5b5c697683909ca9aa9d9084776a5d5b5b5b5b5b5b5750483d32271b0f030013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00000915212c38444f5b66717b869099a2988f87807a7775747576797e848c949e9c92887e73685d52463b2f23180c0000000c1825313d49545f6669655e575055616e7b8895a2978a7d7164574a3e3124170b00000000000000000000030e18222c343a3f42424242424242424242424242424242424242424242423f3a342c22180e030000101d2a3743505d6976838f9b8e82756963625e564c41362a1e11050000000000000000000000030f1c2835414d5a66727e8a97a3afab9f93887c7064594d42372c22180e0500000000000000000000000000010a141f2a35404c58636c6e6b67635f5b57534f4b443c33291e1307000013202c3946535f6c798693a0a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a79e9184776b5e5144382b1e1105000013202c3946535f6c798693a0a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a79e9184776b5e5144382b1e110500000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e010000000000000000000d1925303c465059626b747d868f8f877e75717171717171717171717170685c5044382b1f12000a16212c3740484f525353535353535353535353535353535353535353524f4840372c21160a0000020e1a26323e4a56626d7985919ca7a69b8f857a6f655c534b443f3c3c3d3f444a525b656f7a85909ba7aca094897c7164584c4034271b0f020000000a141e272f363b3e40424446484a4c4d4b47484b4d4f50515151504f4d4a4744404c5864717d8995a2aca094887b6f62564a3d3124180b0000000c1824303d4955616d7985919ca8aca095897e73685e554d4642403f4043484e57606b76828d99a5ada2968a7d7165594d4034271b0e020013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000b1724313e4a5764717d8a97a4a79a8d8174675a4d4134271a0e0100101c2935414c57606667676767676767676661594e43372b1f120600101d2935414d586167686868697683909ca9aa9d9084776a68686868686867625a4f43382b1f13060013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a00010d1925313d4955606c77828d98a29a90867c756e6a6867686a6d737a828c96a19a90857a6e63574c4034281c100400000e1a2734404d596571767069615a55616e7b8895a2978a7d7164574a3e3124170b0000000000000000000009141f2a343e454b4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4b453e342a1f14090000121e2b3844515e6b7784919a8d81736f6f6f685e52463a2d2114070000000000000000000000000c1925313d4a56626e7a86929eaab0a4988d81756a5f54493e342a20170f070100000000000000000000040b131c26303b46515d69747b77736f6b67635f5b564e453b2f24180c000013202c3946535f6c7986939a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9184776b5e5144382b1e1105000013202c3946535f6c7986939a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9184776b5e5144382b1e110500000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e0100000000000000000008141f2a343e475059626b747c868f90877e756d656565656565656565645e564b4034281c100005101a252e373e4346464646464646464646464646464646464646464646433e372e251a1005000005111e2a36424e5a66727e8a96a1aca095897e73685e534a413933302f3033384049535d68737f8b96a2aea5998d8174685c5043372a1e1205000000020c151d252b2f323436383a3c3e42474c5054575a5b5d5d5e5d5d5b595754504c4855616d7a86929faba3978b7e7265594c4033271a0e0100030f1b2834404d5965717d8995a1ada79b8f84786d61574c433b36333334373d454f5a65717c8995a1a2a19a8d8175685c4f43362a1d11040013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000a1724303d4a5763707d8a97a4a79a8d8173675a4d4034271a0d01000d1924303b454e55595a5a5a5a5a5a5a5a5a5650473d32261b0f0300121f2c3845515e6973757575757683909ca9aa9d90847775757575757575746b6054473b2e2115080013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a0004111d2935414d5965717d88949f9f94897e746b635e5b5b5b5e6168707a85909ba1968b8074685c5044382c20140700000e1b2834414e5b6774817a736c655e616e7b8895a2978a7d7164574a3e3124170b000000000000000000000d1925313c4650575b5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5b5750463c3125190d0000121f2c3845525f6b788592998c807c7c7c7a6e6255483b2f2215090000000000000000000000000915212e3a46525e6a76828e9aa5b1a99d92877b70655a50463c32292119120d0805030101010203060a0f151c252e38424c57636e7985837f7b77736f6b6760574c4034281c0f030013202c3946535f6c79868d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d84776b5e5144382b1e1105000013202c3946535f6c79868d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d84776b5e5144382b1e110500000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000030e18222c353e475059626a737c868f90887f766d645b58585858585857534d443a2f23180c000009131c252c32373939393939393939393939393939393939393939393937322c251c13090000000915212d3a46525e6a76838f9aa6a79b9084786d61574c42382f27232223272e37414c57626e7a86929eaaa99d9184786b5f53463a2d21140800000000030b13191f2325272a323940474d53585c60636668696a6b6a69686663605c5853515e6a7783909ca9a69a8d8174685b4f4236291d10040006121e2b3744505c6975818d9aa6afa3978b7f73675c50453b312a2726272b333d4854606c788591969594939184776b5e5245392c1f13060013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000a1724303d4a5763707d8a96a3a69a8d807366594d4033271a0d000008131e29333c444a4d4d4d4d4d4d4d4d4d4d4a453e352b20150a000013202c3946535f6c79828282828284909ca9aa9d918482828282828282827b6f6255483c2f2215090013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3aca3968a7d7063564a3d3023170a000814202d3945515e6a76828e99a59a8f83776c6259524f4e4f51565e68737e8a96a29c9085786c6054483c3023170b00000e1b2834414e5b677481857e766f68616e7b8895a2978a7d7164574a3e3124170b00000000000000000000111d2936424d5862686969696969696969696969696969696969696969696862584d4236291d110000131f2c3946525f6c7986929b90898989887b6f6255483c2f22150900000000000000000000000005111d2a36424e5a65717d8994a0abaea3988d82776c62584e443b332b241e1915110f0e0e0e0e1013161b20272e374049545e69747f8b8f8b87837f7b7772685d5044372b1e11050013202c3946535f6c79818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181776b5e5144382b1e1105000013202c3946535f6c79818181818181818181818181818181818181818181818181818181818181818181818181818181818181818181776b5e5144382b1e110500000000000000000000000b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e010000000000000000000006101a232c353e475058616a737c868f91887f766d64584c4b4b4b4b4b48423b32281d12070000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a26211a130a010000000c1825313d4a56626e7a87939faba3978b7f73675c50453a30261d1715171c252f3a46525d6a76828e9ba7aca094877b6e6255493c2f23160a000000000001080e1319222b343c444b52585e64686c70737576777777767573706c68635e595b6774818d9aa6a99c9083776a5e5145382b1f1206000815212e3a47535f6c7885919da9ac9f93877b6e62574b3f34291f1a191b212c3844505d6975828a8988878686857a6d6054473a2e2114070013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000a1723303d4a5663707d8996a3a6998c807366594d4033261a0d00000915202b363f474d515151515151515151514e4841372d22170c000013202c3946535f6c79868e8e8e8e8f95a0acaca1968f8e8e8e8e8e8e8e887b6f6255483c2f2215090013202c3946535f6c798693a0a0a09a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a0a0a0968a7d7063564a3d3023170a000a1723303c4955616e7a86929ea2968a7e72665b5047424142454c57626d7985929ea195897d7064584b3f33261a0d01000e1b2834414e5b6774818e88817a736b6e7b8895a2978a7d7164574a3e3124170b00000000000000000000121f2c3845525e6a73757575757575757575757575757575757575757575736a5e5245382c1f12000013202c3946535f6c798693a099969695887b6f6255483c2f221509000000000000000000000000010d1925313d4955616c78838f9aa5b0a99e93897e746960564d453d352f2925211e1c1b1a1a1b1d1f22262b32394049525b65707a85909b97938f8b8783786b5e5145382b1e120500121f2c3845515d697273737373737373737373737373737373737373737373737373737373737373737373737373737373737373737371675c5043372a1d11040000121f2c3845515d697273737373737373737373737373737373737373737373737373737373737373737373737373737373737373737371675c5043372a1d11040000000000000003070a0b0b1724313e4a5764717d8a97a4a89b8e8174675b4e4134281b0e01000000000000000000000007101a232c353e464f58616a737c858e91898074685b4e423e3e3e3e3c37302920160c01000000010910161a1e1f20202020202020202020202020202020202020201f1e1a16100901000000020f1b2834404d5965727e8a97a3aca093877b6f63574b3f34291e140b090b131e2935414d5a66727f8b98a4afa3968a7d7064574b3e3125180b000000000000050f18222b343d464e555d636a6f74797c7f828384848483817f7c78746f6a645d65727e8b98a4ab9f9286796c6053463a2d211407000a1723303d4956626f7b8894a0ada99c9084776b5f52463a2e23170e0c0f1c2834414d5a67737e7d7c7b7b7a7978766c6053473a2d2114070013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a00091623303c4956636f7c8996a3a6998c807366594c403326190d00000e1a26323d4751595d5e5e5e5e5e5e5e5e5e5a53493f34281c10040013202c3946535f6c7986939b9b9b9ba0a8b2b2a8a09c9b9b9b9b9b9b95887b6f6255483c2f2215090013202c3946535f6c798693939393938e8174675a4d4134271a0e01000a1723303d4a5663707d8a93939393938a7d7063564a3d3023170a000d1926323f4b5864717d8a96a29f93877a6e62564a3e3634353a45515d6975828e9ba5998c8074675b4e4235291c1003000e1b2834414e5b6774818e938b847d766f7b8895a2978a7d7164574a3e3124170b0000000000000000000013202c3946535f6c79828282828282828282828282828282828282828282796c5f5346392c2013000013202c3946535f6c798693a0a5a3a295887b6f6255483c2f221509000000000000000000000000000915212d3844505b67727d89949faab0a59a90857b72685f574e47403a35312d2b2928272728292b2e32373d434a525b646d77828c97a2a39f9b958a7e73675b4f43372a1d110400101c2935414c576066676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767655f564b3f33271b0f020000101c2935414c576066676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767655f564b3f33271b0f02000000000002090f131618181825313e4b5864717e8b98a4a89b8e8174675b4e4134281b0e0100000000000000000000000007101a232c343d464f58616a737c858c837970665a4d41343232312f2b261f170e04000000000000050a0e1113131313131313131313131313131313131313131313110e0a05000000000005111e2a3743505c6975818e9aa6a99d9084776b5f53463a2e23170c0200010d1925313e4a5763707d8996a2afa5988c7e7265594c3f3326190d0000000000020c17212a343d464f5860676e757b8085898c8e90919191908e8c8885807b756f6863707c8996a2ada194877b6e6255483c2f221609000c1926323f4b5864717e8a97a3b0a69a8d8174685b4f43362a1e1206000d1926323f4b57636d71706f6f6e6d6c6b6a645a4f43372b1f12060013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000916232f3c4955626f7c8996a2a5998c7f7265594c3f3226190c0000111d2a36424e59636a6b6b6b6b6b6b6b6b6a655b5044382c2013070013202c3946535f6c7986939e9e9e9ea0a7b0b4aaa29e9e9e9e9e9e9e95887b6f6255483c2f2215090013202c3946535f6c79868686868686868174675a4d4134271a0e01000a1723303d4a5663707d868686868686867d7063564a3d3023170a000f1b2835414e5a6773808c99a59d9084776b5e5246392d282935414d5966727f8b98a59c8f83766a5d5144382b1e1205000e1b2834414e5b6774818e97968f8881797b8895a2978a7d7164574a3e3124170b0000000000000000000013202c3946535f6c79868f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f86796c5f5346392c2013000013202c3946535f6c798693a0acafa295887b6f6255483c2f2215090000000000000000000000000004101c28333f4a56616c77828d98a2adaca1978d847a71696059524b46413d3a37353434343536383b3e43484e555c646d768089939ea8b0a59a8f84796d62564b3f33271b0e02000d1924303b454e55595a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5f646464646464615b5a5a5a5a5a5a5a5a5a5a5a5a5a5a59544d44392e23170b0000000d1924303b454e55595a5a5a5a5a5a5a5a5a5a5a5a5a5a5d636464646464635d5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59544d44392e23170b0000000000050d141a1f2325252526333f4c5965727e8c98a5a89b8e8174675b4e4134281b0e010000000000000000000000000007101a222b343d464f58616a737c837a71675e54493d31252525231f1a140d050000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3946525f6b7884919daaa79a8e8175685c4f43362a1e12060000000916222f3c4855626e7b8894a1aea69a8d8173675a4d4134271a0e000000000009141e28323c464f58616a727980868c9195989b9c9d9e9d9c9b9895918c86817a736b6e7b8894a1ada296897c7063564a3d3024170a000e1b2734414d5a6673808c99a6b1a4988b7e7265594c4033271a0e02000a16232f3b46515b626464636261605f5f5d5952483e33271b0f030013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000916222f3c4955626f7b8895a2a5988c7e7265584c3f3225190c0000131f2c3945525e6b757777777777777777766d6154483b2e2215080013202c3946535f6c79869191919191959ea9ada2989191919191919191887b6f6255483c2f22150900131f2c3946525f6b76797979797979797972665a4d4034271a0e01000a1623303c4956626e7879797979797979786e6256493c3023160a00101d2a3643505c6975828f9ba79b8e8275685c4f43362a1d25313e4a5764707d8a96a39e9285796c5f5346392d201307000e1b2834414e5b67747e858c9399928b847c8895a2978a7d7164574a3e3124170b0000000000000000000013202c3946535f6c7986939c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9386796c5f5346392c2013000013202c3946535f6c798693a0acaca295887b6f6255483c2f22150900000000000000000000000000000b17222e3944505b66717b86919ba5afa99f968c837a726a635d57514d49464442414041414345474b4f545960666e767f88919ba5b0a99e94897e73685c51453a2e22170b000008131e29333c444a4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d545b626a7071717171716c63574d4d4d4d4d4d4d4d4d4d4d4d4d4c49433b32281d120600000008131e29333c444a4d4d4d4d4d4d4d4d4d4d4d4d4d4f5b666f71717171716f676059524d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4c49433b32281d120600000000040e171f262b2f3132323236424e5b6774818d9aa6a79a8e8174675b4e4134281b0e010000000000000000000000000000071019222b343d464f58616a737971685f554c42382d21181816130f0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4855616e7a8793a0aca5988c7f7366594d4034271b0e020000000714212d3a4754606d7a8793a0ada79b8e8174675b4e4135281b0e0000000005101b25303a444e58616a737c838b91979da1a4a7a6a4a2a1a1a1a2a19c97928b857d756d798693a0aca4978b7e7164584b3e3225180c000f1c2935424f5b6875828e9ba7afa296897c7063574a3d3124180b000007121e2a353f4950565757565554535352514e4840362c21160b000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000915222f3c4855626f7b8895a2a5988b7e7165584b3f3225180c000013202c3946535f6c7984848484848484847b6f6255483c2f2215090013202c3946535f6c798484848484848d99a5aa9e918684848484848484847b6f6255483c2f22150900111e2a37434f5a646b6c6c6c6c6c6c6c6c6960564a3e3225190c00000815212e3a46525d676c6c6c6c6c6c6c6c6c675d52463a2e21150800111e2b3844515e6a7784909da6998d8073675a4d4134271b232f3c4955626f7b8895a1a094877a6d6154473b2e211508000d1a26333f4b57636c737a81888f96968e878a96a2978a7d7164574a3e3124170b0000000000000000000013202c3946535f6c798693a0a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a09386796c5f5346392c2013000013202c3946535f6c798693a0a0a0a095887b6f6255483c2f221509000000000000000000000000000006111d28333e49545f6a747f89939da6b0a89e958d847c756e68625d595552504f4e4d4d4e4f5154575b5f656b71788088919aa3adaba1978d82776c61564b4034291d12060000020d17212a32393d40404040404040404040404040404040414850575e666d747c7d7d7d7d7d74675a4d414040404040404040404040403d38312920160b01000000020d17212a32393d40404040404040404040404045515e6b777d7d7d7d7d79726b635c554d4640404040404040404040404040404040403d38312920160b01000000010c16202930373c3e3e3e3e4046525e6a76838f9ca8a69a8d8073675a4d4034271a0e01000000000000000000000000000000071019222b343d464f5861696c675f564d433a31261b100b0a07030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4a5763707d8996a2afa4978a7e7164584b3e3225180c000000000713202d3a4653606d798693a0aca89b8e8275685b4e4235281c0f000000000b16212c37424c56606a737c858e959ca3a8a8a39e9a979594949496989b9f9d968f877e757885929eaba5988c7f7266594c3f3326190d00111d2a3743505d6a7683909ca9aea194887b6e6255483c2f2216090000020d18232d373f45494b4a49484847464544423d362e251a1005000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000815222e3b4855616e7b8895a1a4988b7e7165584b3e3225180b000013202c3946535f6c7986919191919191887b6f6255483c2f22150900131f2c3945525e6a7577777777777d8a96a3aa9d90847777777777777777766d6154483b2e221508000e1a26323e48525a5f5f5f5f5f5f5f5f5f5d574e44392d221609000005121e2a35414b555c5f5f5f5f5f5f5f5f5f5c554b41352a1e120500121f2c3845525f6b7885929ea5988c7f7265594c3f332619212e3b4754616d7a8794a0a195887b6e6255483c2f221509000b17232f3b46515a61686f767d848b929993959ca4978a7d7164574a3e3124170b0000000000000000000013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09386796c5f5346392c2013000013202c3946535f6c7986939393939393887b6f6255483c2f2215090000000000000000000000000000000b17222d38434d58636d77818b949ea7afa89f968e878079736e6965625f5d5b5b5a5a5b5c5e6063676b70767c838a929aa3acaca2998f857b70665b50453a2f23180c01000000050f1820272d3133343434343434343434343434363d444c535a616970777f868a8a8a8a8174675a4d41343434343434343434343433312c271f170e040000000000050f1820272d3133343434343434343434343845515e6b78838a8a8a8a847c756e665f585149423b3434343434343434343434343433312c271f170e040000000007121d28323b42484b4b4b4b4c5058636e7a86929faba5988b7e7265594c3f3326190d0000000000000000000000000000000000071019222b343d464f585e5f5c554d433a31281f150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a26333f4c5965727e8b98a4b0a3968a7d7063574a3d3024170a000000000713202d3a4653606d798693a0aca89b8f8275685b4f4235281c0f00000006111c28333e49535e68727c868f97a0a7aba39d97928e8b89888788898c8f93989d9991887e7784919eaaa69a8d8073675a4d4034271a0e00121e2b3844515e6b7784919eaaada093867a6d6054473a2d21140700000007111b242d34393d3e3d3d3c3b3a39383735312b241c130900000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000815212e3b4854616e7b8894a1a4988b7e7164574b3e3124180b000013202c3946535f6c7986939e9e9e9e95887b6f6255483c2f22150900111d2a36424e5963696a6a6a6a6e7a8794a0aa9d9084776a6a6a6a6a6a6a6a645b5044382c201307000a16212c3740484f525353535353535353514c453c32281d11050000020d19242f39434a50535353535353535353504a43392f24190d020013202c3946525f6c7986929fa5988b7e7165584b3f322518202d3a4753606d798693a0a296897c6f6255493c2f2216090007131e2a353f4850575e656c737a81888f969da0a0978a7d7164574a3e3124170b0000000000000000000013202c3946535f6c79869393939393939393939393939393939393939386796c5f5346392c2013000013202c3946535f6c7986868686868686867b6f6255483c2f22150900000000000000000000000000000005101b26313c46515b656f79828c959da6aea8a098918b847e7a75716e6c6a6867676767696a6c6f73777c81878e959ca4acaba29a90877d73695f54493e33281d12070000000000060e161c2125272727272727272727272a313940474f565d656c737a82899197938a81776e64584c4033272727272727272727272624211b150d0500000000000000060e161c2125272727272727272727272a3743505c67717a848d96968e878078716a625b544c453e362f282727272727272727272624211b150d0500000000000c18232f3a444d5357585858595c616a74808b97a3afa296897d7064574a3e3125180b000000000000000000000000000000000000071019222b343d464d5153504b433a31281f160d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2834414e5a6774818d9aa6b0a396897c7063564a3d3023170a000000000814212e3a4754606d7a8793a0ada89b8e8275685b4e4235281b0f0000000b16222d39444f5a65707a848e97a1a9a9a199928c86827e7c7b7a7b7d7f83878c92999a90867c84909daaa79a8e8174675b4e4134281b0e00121f2c3845525f6b7885929eabac9f9286796c5f5346392c2013060000000009121b22292d303131302f2e2d2c2c2b2925201a120a0100000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000814212e3b4754616d7a8794a1a4978a7d7164574a3e3124170b000013202c3946535f6c798693a0ababa295887b6f6255483c2f221509000e1a26313d4751585d5d5d5d5f6b7884919daa9d9084776a5d5d5d5d5d5d5d5952493f34281c10040005101a252e373e4346464646464646464645413b332a21160b0000000008131d2731393f44464646464646464646443f3931271d1308000013202c3946535f6c798693a0a5988b7e7165584b3e322518202d3a4653606d798693a0a296897c6f6356493c3023160900020d18232d363e454c535a61686f767d848b929393938a7d7164574a3e3124170b0000000000000000000013202c3946535f6c79868686868686868686868686868686868686868686796c5f5346392c20130000131f2c3946525f6b767979797979797979786d6155483b2f221508000000000000000000000000000000000a15202a353f49535d677079838b949ca4abaaa39c96908a86817e7b787675747373747577797c7f83888d92989fa6aea9a19990887e756b61574d42382d22170c01000000000000040b1115181a1a1a1a1a1a1a1f262d353c434b525960686f767e858c949b948a81786f655c52473c30241a1a1a1a1a1a1a1a1a1a1815100a03000000000000000000040b1115181a1a1a1a1a1a1a1a1a1b2834404b565f68717b848d9799918a837b746d655e574f48413a322b241c1a1a1a1a1a1a1a1815100a03000000000000101c2834404b565e6465656566686c737c86919ca7ab9f93867a6d6155483c2f23160900000000000000000000000000000000000000071019222b343b41454644403931281f160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936424f5c6875828e9ba8b0a3968a7d7063564a3d3024170a000000000a16232f3c4855626e7b8894a1aea79a8d8174675a4e4134281b0e000004101c27333f4a55616c76818c96a0a9aaa0978f87807a75726f6e6d6e7073767b81878e96988d8283909da9a89b8e8275685b4e4235281c0f00131f2c3946525f6c7986929facac9f9285786b5f5245392c1f120600000000000911171d2124242423222121201f1e1c19150f08000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000714212e3a4754616d7a8794a0a4978a7d7063574a3d3124170a000013202c3946535f6c798693a0acafa295887b6f6255483c2f221509000915202b353f474d505151515c6975828e9ba79d9084776a5d5151515151504e4840372d22170b00000009131c252c32373939393939393939393835302921180f0400000000010c151f272e343739393939393939393937342e271f150c01000013202c3946535f6c7986929fa5988b7e7165584b3e322518202d3a4653606d798693a0a296897c6f6255493c2f231609000007111b242c343a41484f565d646b72798086868686867d7164574a3e3124170b00000000000000000000131f2c3946525f6b76797979797979797979797979797979797979797979766b5f5246392c1f130000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c665c5145392d20140700000000000000000000000000000000030e18232d37414b555e677079828a9299a0a7ada7a19b96928d8a8785838281818181828486888b8f93989ea4aaaca59e978f877e756c63594f453b31261b110600000000000000000005090c0d0d0d0d0d17202930383f464e555c646b727981888f979d948b81786f665d534a41362b1f140d0d0d0d0d0d0d0d0d0b08040000000000000000000000000005090c0d0d0d0d0d0d0d0d0d17232e39444d565f69727b858e979c958d867e777069615a534b443d352e261d140d0d0d0d0d0b08040000000000000000121f2b3844505c68707171717274787e858e98a2ada69a8e82766a5e5245392d2014070000000000000000000000000000000000000000071019222a3035383938342f281f160d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111d2a3743505d6a7683909ca9b0a4978a7d7164584b3e3225190d050202040e1a26323e4b5764707d8996a3afa5998c807366594d4033271a0d00000814202c38444f5b66727d88939ea8aca2988e857d756f69656361616263666b70767c848c95948883909ca9a89c8f8275685b4f4235291c0f0013202c3946535f6c7986929facab9e9285786b5e5145382b1f1205000000000000060c111517181716161514131211100d090400000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000714202d3a4753606d7a8794a0a3968a7d7063574a3d3024170a000013202c3946535f6c798693a0acafa295887b6f6255483c2f22150900040f19232d353c414444444d5966727f8b98a49d9084776a5d504444444444423d362e251b1106000000010a131a21262a2c2c2c2c2c2c2c2c2c2c29241f170f06000000000000030d151c23282b2c2c2c2c2c2c2c2c2c2b28231c150d03000000121f2c3945525f6b7885929fa5988c7e7265584c3f322619212e3a4754606d7a8794a0a295887b6f6255483c2f22160900000009121a222930373e454c535a61686f757979797979796f63574a3d3124170a00000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b645a4f43372a1e1100000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5b544a4034291d1104000000000000000000000000000000000007111b252f39434c555e67707880888f959ca2a7aca7a29e9a969491908e8e8d8d8e8f909295989b9fa4a9aba6a09a948d857d756c635a51473d33291f140a0000000000000000000000000000000009141f29323b424951585f676e757d848b939a9e948b82786f665d544b41382f241a0e03000000000000000000000000000000000000000000000000000000000000000000000007121d28323b444d576069727b858e979f989089827a736c645d564e4740382f251b1005000000000000000000000000000013202c3946535f6c797e7e7e7f8184898f97a0aaa99f94897d72665a4e4236291d11040000000000000000000000000000000000000000000710181f25292c2c2b28231d160d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3844515e6b7784919eaab2a5998c8073665a4e41352a1f16110f0f10161f2a36424e5a6773808c98a5b0a3978a7e7164584b3f3225190c00000c1825313d4954606c78838e9aa5afa59a90867c736b645e5956555455575a5f646b727a838d97908d949faba99c8f8275695c4f4236291c0f0013202c3946535f6c7986939facab9e9285786b5e5145382b1e12050000000000000004080b0d0d0c0b0a09080706050401000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000713202d3a4653606d7986939797968a7d7063564a3d3023170a000013202c3946535f6c798693a0a4a4a295887b6f6255483c2f221509000007111b232a303537373e4a5763707c8995a19d9084776a5d50443737373735312c251c13090000000000010910161a1e1f20202020202020201f1d19130d060000000000000000030b12171c1e2020202020202020201e1c17120b0300000000121e2b3845515e6b7784919da6998c807366594d4033271a222f3b4855616e7b8894a1a194877b6e6154483b2e221508000000000910171e252c333a41484f565d646b6c6c6c6c6c6c675e53473b2e221609000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a52483e32261a0e00000a16212c3740484f52535353535353535352504a42382e23180c0000000000000000000000000000000000000009141d27313a434c555e666e767d848b91969ca1a5a9aaa6a3a09e9c9b9a9a9a9a9b9d9fa1a4a7aba8a49f9a958f89827b736b635a51483f352b21170d03000000000000000000000000000000020e1a25303b444d545b626a717880878e969d9e958c827970665d544b42392f261d1308000000000000000000000000000000000000000000000000000000000000000000000000010c162029323b454e576069737c858e98a19b938c857d766f676059524a41372d21160a000000000000000000000000000013202c3946535f6c79868b8b8c8d90949aa1a9a9a1978d83786c61554a3e3226190d0100000000000000000000000000000000000000000000060d14191d1f201f1c18120b040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2c3845525f6b7885929eabb4a89b8f82766a5e52463b3128211d1c1b1d2128313c47535e6a76838f9ba8ada194887b6f6256493d3024170a0004101c2935414d5965717d8994a0aba99e93887e746a6159524d4a4847484a4e53596068717b858f9a9a9ea6b1a99c8f8275695c4f4236291c0f00131f2c3946525f6c7986929facab9e9285786b5f5245382c1f12050000000000030a101518191a1918171615141312100d090300000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0aca79a8e8174675a4d4134271a0e01000a1723303d4a5663707d8a96a3b0a3968a7d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000613202d3946535f6c79868a8a8a8a897c6f6356493c30231609000013202c3946535f6c7986939797979795887b6f6255483c2f2215090000000911191f25282a2f3b4854606d7986929f9d9084776a5d5044372a2a2a2925201a130a0100000000000000050a0e1113131313131313131312100d08020000000000000000000000060b0f12131313131313131313120f0b06000000000000111d2a3743505d6976838f9ca79a8e8174685b4e4235291c24303d4a56636f7c8995a29f9386796d6053473a2d2014070000000000060d131a21282f363d444b52595e5f5f5f5f5f5f5c554c41362b1f1206000000000000000000000a16212c3740484f52535353535353535353535353535353535353535353524f4840372c21160a000005101a252e373e4346464646464646464646433f3830261c120700000000000000000000000000000000000000020c151f28313a434c545c646b727980858b9095999da0a3a5a7a9a9a8a7a7a7a7a8a9a9a7a5a29f9c98948f8a847e777069615951483f362d231910050000000000000000000000000000000005121e2a36424c565e666d747c838a9299a09e958c837970675e544b423930261d140b0100000000000000000000000000000000000000000000000000000000000000000000000000040e172029333c454e57616a737c868f98a19e978f888179726b635c53493e32261a0e020000000000000000000000000013202c3946535f6c79869398989a9ca0a5a8a49e978f857b71665b5044392d21150900000000000000000000000000000000000000000000000002080d10121312100c0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7986929facb7aa9e92867a6e63574d433a322d2a2828292d323a434d58636f7b87939fabaa9e9185796c6053473a2e211508000713202c3845515d6975818d99a5afa4988d82766c62584f47413d3b3b3c3e42484f565f69737d88949faab0b5a99c8f8275695c4f4236291c0f00121f2c3945525f6b7885929eabac9f9285786c5f5245392c1f130600000000050e151b21242626252423232221201f1d19140e07000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c798693a0a6a69a8e8174675a4d4134271a0e01040a1723303d4a5663707d8a96a3a6a3968a7d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000613202c3946535f6c787d7d7d7d7d7d7b6f6255493c2f231609000013202c3946535f6c79868a8a8a8a8a8a887b6f6255483c2f22150900000000070e14191c1f2c3845515e6a7783909c9d9084776a5d5044372a1e1e1c19150f08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2835424e5b6774818d9aa69c8f83766a5d5144382c2527333f4c5865717e8b97a49d9184776b5e5245382c1f1206000000000000020910171e252c333a41484e52535353535353504b433a30251a0e020000000000000000000005101a252e373e434646464646464646464646464646464646464646464646433e372e251a100500000009131c252c32373939393939393939393937332d261e140b000000000000000000000000000000000000000000030d161f28313a424a525961676e747a7f84898d909496999b9c9e9e9f9f9f9f9e9d9c9a989693908c88837e78736c665f574f473f362d241b110800000000000000000000000000000000000814212e3a46525e6870777f868d959ca09f958c837a70675e554c423930271e140b02000000000000000000000000000000000000000000000000000000000000000000000000000000050e17212a333c454e58616a737c868f98a0a09a928b847c756e655a4f42362a1d10040000000000000000000000000013202c3946535f6c798693a0a0a0a09f9e9b98938c857c73695f554a3f33281c1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986939facb9aea2968b7f74695e554c443e3936353536393d444c555f6a75808c97a3afa69a8e8275695d5044382b1f1206000a16232f3b4854616d7985929eaaab9f93877b70655a50463d36312e2e2f32373d444d57616c77828e9aa5b2b5a89c8f8275695c4f4236291c0f00121e2b3845515e6b7784919eaaac9f9386796c5f5346392d201307000000040e171f272c3133333231302f2e2d2c2b29251f1911080000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c7986939a9a9a9a8e8174675a4d4134271a120c0f151923303d4a5663707d8a969a9a9a968a7d7063564a3d3023170a0000000000000000000000000000000000000000000005090c0d0d0d0f1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a0005121e2b3844505c676f70707070707070695e53473a2e211508000013202c3946535f6c787d7d7d7d7d7d7d7d7b6e6255483c2f221509000000000003080c101d2936424f5b6774818d93939084776a5d5044372a1d11100d090400000000000000000000000000000000000000000004060707050300000000000002050708080603000000000000000000000000000000000000000000000d1a26333f4c5865717e8a97a39e9285796d6054483c33323237434f5b6874818d99a69a8e8275685c4f43362a1d11040000000000000000050c131a21282f363d424546464646464644403931281e130800000000000000000000000009131c252c3237393939393939393939393939393939393939393939393937322c251c130900000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2b27221c140c0200000000000000000000000000000000000000000000040d161f28303840484f565d63696e73787c8184878a8c8e9091929292929292908f8e8c898683807c77726d67615b544d453d352d241b12090000000000000000000000000000000000000916222f3c4955626f7a82899193939393938d837a71685e554c433a30271e150c020000000000000000000000000000000000000000000000000000000000000000000000000000000000050f18212a333c464f58616a747d869093939393938e8780776b5e5145382b1e12050000000000000000000000000013202c3946535f6c7986939393939392918f8c87827b736a61584d43382d22170b000000000000000000000000000000000000000000000000000000000000000000000000050a0d0f0f0f0f0f0f0f0f0f0f0d0a0500000000000000000000000001070b0d0f0f0f0f0f0f0f0f0f0e0c090400000000000000000013202c3946535f6c798693a0acb5ada79c90857b70675e564f49454342424345494e565e67717b86919da8aca195897d7165594d4134281c0f03000c1925323e4b5764707c8995a1aea79b8e82766b5f54493e342b25222122262b323b454f5a66717d8995a1aeb5a89b8f8275685b4f4235281c0f00111e2a3744505d6a7683909da9ada093877a6d6054473a2e2114080000010c16202931383d40403f3e3d3c3b3a393835312a231a110700000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c79868d8d8d8d8d8d8174675a4d413427231d171b212528303d4a5663707d8a8d8d8d8d8d8a7d7063564a3d3023170a0000000000000000000000000000000000000000040b1115181a1a1a1a1c2936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a00030f1c28343f4b555d63636363636363635f574d42362a1e12060000121e2b3844505c676f707070707070707070695e52463a2d21140800000000000000010e1a26333f4c5865717e8686868684776a5d5044372a1d110400000000000000000000000000000000000000000001070c10131414120f0a05000002080e11141514130f0b0500000000000000000000000000000000000000000b1724303d4956626e7b87939fa195897c7065594e44403e3f424954606b7784909ca3978b7e7266594d4034271b0e0200000000000000000001080f161d242b32363939393939393938342e271f160c02000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a26211a130a010000000000010910161a1e1f2020202020202020201e1b17110a02000000000000000000000000000000000000000000000000040d161e262e363d444b51575d63686c7074787b7d808283848586868685858483817f7d7a77736f6b67615c565049423b332b231b1209000000000000000000000000000000000000000916222f3c4955626f7c8686868686868686847a71685f564c433a31281e150c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f18212a343d464f58626b747d868686868686868685786b5e5145382b1e12050000000000000000000000000013202c3946535f6c79868686868686868482807b76706961584f463c31271c110600000000000000000000000000000000000000000000000000000000000000000000040b1116191b1c1c1c1c1c1c1c1c1b1916110b04000000000000000000060d12171a1c1c1c1c1c1c1c1c1c1b19151009020000000000000013202c3946535f6c798693a0acada39b98978c82797068605a5552504e4e4f51555a60677079838d98a3aea69b9084786d6155493d3125180c00000e1b2734414d5a66737f8c98a5b0a3978b7e72665a4e42372c22191514161a2129333e4955616d7985929eabb4a89b8e8174685b4e4235281b0f00101c2936424f5c6875828e9ba8aea194887b6e6255483c2f221609000007121d28323b43494c4d4b4b4a4948474645413c352c23180e02000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070013202c3946535f6c79808080808080808074675a4d4135332e2821252c3134363d4a5663707d808080808080807d7063564a3d3023170a00000000000000000000000000000000000000070f161c212526262626262936424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a00000b17232e39434c525657575757575756534d453b31251a0f0400000f1c28343f4b555d636363636363636363635f574d42362a1e120500000000000000000b1724303d4956626e78797979797974695c5043362a1d10040000000000000000000000000000000000000000050c12181c1f21201e1b161008050d14191e2022211f1b161009030000000000000000000000000000000000000815212d3a46525e6b77838f9aa5998d81756a5f56504c4b4c4e535b65707c8894a09e93877b6e62564a3d3125180c000000000000000000000000050c131a20262a2c2c2c2c2c2c2c2b28231d150d040000000000000000000000000000010910161a1e1f2020202020202020202020202020202020202020201f1e1a161009010000000000000000050a0e1113131313131313131313120f0b06000000000000000000000000000000000000000000000000000000040c141c242b333a40464c52575c6064686b6e717375767778797979797877767472706d6a67635f5b56514b453e383129211a110900000000000000000000000000000000000000000916222f3c4855616e7879797979797979797971685f564d433a31281f160c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f18222b343d475059626b75797979797979797979756a5e5144382b1e120500000000000000000000000000131f2c3946525f6b76797979797979797876736f6b655e574f463d342a1f150a00000000000000000000000000000000000000000000000000000000000000000000050e151c22262828282828282828282826221c160e06000000000000000810181e23262828282828282828282825201b140c0300000000000013202c3946535f6c798693a0aca89c918b91948b8279726b66615e5c5b5b5c5e61656b7279828b959fa9aa9f958a7e73685c5044392d2115080000101c2936424f5c6875828e9ba7ada194887b6f62564a3e32261b1009080a0f17222d3945515d6976828f9ca8b3a79a8d8174675a4d4134271b0e000e1b2834414e5a6773808d99a6afa396897d7063574a3e3124180b00000c18232f3a444d54595958575655545352514d473e342a1f1408000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d20130700121f2b3845515d687173737373737373736e64584c42423f3a332b2f373d4142424854606b7373737373737373736b6054483c2f22160900000000000000000000000000000000000006101921282d3133333333333336424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a0005101b26303941474b4c4c4c4c4c4c4c4c4b49443d352b21160b00000b17232e39434c5256575757575757575756534d453b30251a0e0200000000000000000815212d3a46525d666c6c6c6c6c6c6a62584c4034281b0f02000000000000000000000000000000000000030910161d23292c2e2d2b27211a120f171f252a2d2e2e2b27211b140e07000000000000000000000000000000000005121e2a36424e5a66727e8a95a09e92877c7168615c5958585a5e646d77828d99a4998e82766a5e52463a2e2215090000000000000000000000000001080f151a1d1f2020202020201f1c17120b040000000000000000000000000000000000050a0e111313131313131313131313131313131313131313131313110e0a050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a121a21282f353b41464b5054585c5f62646668696b6b6c6c6c6c6b6a69686664615e5b57534f4a453f3a332d261f1710080000000000000000000000000000000000000000000714202d3945515c666c6c6c6c6c6c6c6c6c6c685f564d443b31281f160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061019222b343e475059626a6c6c6c6c6c6c6c6c6c6b63594e4235291d100300000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6b6967635f5a544d453d342b22180e03000000000000000000000000000000000000000000000000000000000000000000040e1720272d3235353535353535353535322e2720180e04000000000007111a22292f3335353535353535353534312c251e150c01000000000013202c3946525f6c7986929faca6998c808a95948b847d76726e6b696868696a6d71767c848b949da7aca2988e83786d62574b4034281c10040000111e2b3744515d6a7783909da9ab9f9285796c6053473a2e22150a00000005101c2835414e5b6774818d9aa7b2a6998c807366594d4033271a0d000d1926323f4c5865717e8b97a4b0a4988b7e7265594c4033271a0e02030f1c2834404b565f65666564636261605f5e5850463b3024180c000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d20130700101c2935414c5760656666666666666666645c524f4f4e4b453d333941494d4f4f4f4f596266666666666666666662594f44382c2014070000000000000000000000000000000000030e18222b32393d40404040404040424f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000a16212d38424b5357585858585858585858554f473d32271c10040006121d27313a41474a4a4a4a4a4a4a4a4a4a47423b33291f140900000000000000000005111d2935404b545c5f5f5f5f5f5f5e5950463b3024180c000000000000000000000000000000000000070e141b21282f34383a3a37322c241b17212930363a3b3a38332c261f18120b05000000000000000000000000000000020e1a26323e4a56616d78848e99a3988d837a726c68666565676a6f767f89939e9e93887d71655a4e42362a1e120600000000000000000000000000000004090e1113131313131313120f0c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f161d242a30353a3f44484c4f5255585a5b5d5e5f5f5f5f5f5e5e5c5b595755524f4b47433e39342e28221b140d050000000000000000000000000000000000000000000005111d2935404b545b5f5f5f5f5f5f5f5f5f5f5d564e443b32291f160d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071019222c353e4750595e5f5f5f5f5f5f5f5f5f5e5951473d3125190d01000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5e5d5a57534e48423b332b22191006000000000000000000000000000000000000000000000000000000000000000000000b16202931393e414242424242424242413e39322a20160c01000000030e19232c343a3f424242424242424242413d3730271d13090000000000121f2c3945525f6b7885929faba6998c80838d98968e88827d7a7775757575777a7d82878e959da6aca39a90867c71675c51453a2f23170c000000121f2c3845525e6b7885919eabaa9d9084776a5e5144382b1f1206000000000d1a2733404d596673808c99a6b1a5988b7e7265584c3f3225190c000b1724303d4956626f7b8894a1ada69a8d8174685b4f43362a1e120b0a121e2b3744505c6871737271706f6e6d6c6a62584d4134281c0f030013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000c1824303a454e555959595959595b5c5c5c5c5c5c5c5b564f453b414b53595c5c5c5c5c5c5c5c595959595959595650473d33271c1004000000000000000000000000000000000009141f2a343d444a4c4d4d4d4d4d4d4d4f5c6975828f9ca9b0a3968a7d7063564a3d3023170a000d1a26323e49545d6465656565656565656561594f44382c201407000b17222d38424a5155555555555555555555524c433a2f24190d010000000000000000010d19242f39424a50535353535353524e473e352a1f140800000000000000000000000000000000030b12181f262c333940454746433e362d241f29333b41464847443e37312a231d160f080000000000000000000000000000000a16222d3945505c67727d87929b9f958c847d787472717273767a8188919b9f968c81766b6055493d32261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005090c0d0d0d0d0d0d0d0d0d0c090500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c12191e242a2f34383c404346494b4d4f505152525352525251504e4d4b4845423f3b37322e28231d17100a030000000000000000000000000000000000000000000000010d18242e39424a5053535353535353535353514c443c322920170d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101a232c353e474e52535353535353535353524e483f362b20150900000000000000000000000000000a16212c3740484f525353535353535352504e4b47423d373029211910070000000000000000000000000000000000000000000000000000000000000000000006111c27323b434a4e4f4f4f4f4f4f4f4f4e4a443c32281d12060000000915202b353e464b4e4f4f4f4f4f4f4f4f4d4942392f251a0f0300000000121f2b3845515e6b7885919eaba69a8d807c868f9999938e8a8684828282828486898e9399a0a7aaa29a91887e746a60554a3f34291e1207000000131f2c3946525f6c7986929faca99c8f8276695c504336291d1003000000000d1a2633404d596673808c99a6b0a3968a7d7064574a3e3124180b000815212e3a4753606c7885919eaaa99c9084776b5f53463a2f231a171718222e3a46535f6c78807e7d7c7b7b797974695d5043372a1d11040013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070008131e29333c43494c4d4d4e586268696969696969696761574c4047525d656969696969696969645c514d4d4d4d4a453e352c21160b0000000000000000000000000000000000010e1a25313b464e555959595959595959595c6975828f9ca9b0a3968a7d7063564a3d3023170a00101c2935424e5a666f7272727272727272726b6054483c2f231609000f1b27333f4a545c616262626262626262625d564c41352a1d110500000000000000000007121d2730383f4446464646464645423c352c23180e02000000000000000000000000000000030c151d232a31373e444b5154534f4840362b26313b454c5255544f49423b352e28211a1209000000000000000000000000000005111d28343f4a56606b758089929a9e968f8984817f7e7e8082868c929a9e968d847a70655a4f44382d211509000000000000000000000000000000000206090c0f1112121212110f0d0a0602000000000000000000000000000000000000040b1115181a1a1a1a1a1a1a1a1a1815110b0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d13191e23282c3033373a3c3e40424344454646464645444342403e3c3936332f2b27221d18120c06000000000000000000000000000000000000000000000000000007121d2730383f444646464646464646464644403a322a20170e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a232c353c424546464646464646464645423d362d24190f04000000000000000000000000000005101a252e373e4346464646464646464544413f3b37322c261f170f0700000000000000000000000000000000000000000000000000000000000000000000000a16222e39434d555a5b5b5b5b5b5b5b5b5a554e443a2e23170b0000020e1a26313c4750575b5b5b5b5b5b5b5b5b59534b41362b1f140700000000111e2b3744515d6a7784909daaa79a8d81747d878f979e9a9693918f8e8e8f9092969a9ea4aaa69f9890887f766c62584e43392e23180c0100000013202c3946535f6c798693a0aca89c8f8275685b4f4235291c0f02000000000e1a2734404d5a6773808d9aa6aea195887b6f6256493c3023160a0006121f2b3844505d6975828e9aa6aca093877b6f63574b40352b2624242529333e4a56626f7b878b8a8988878683766a5d5044372a1e11040013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d20130700020d17212a32383d404045525e6a747575757575757573695d50444b57636f75757575757575756e62564a4040403e3a342c231a0f05000000000000000000000000000000000005111e2a36424d5860666666666666666666666975828f9ca9b0a3968a7d7063564a3d3023170a00111d2a3744505d6a767e7e7e7e7e7e7e7e7d7063574a3d3024170a00121e2b3743505b666d6f6f6f6f6f6f6f6f6e685d5246392d211407000000000000000000010b151e272e33373939393939393936312b231a1107000000000000000000000000000000000b151e272e353c42494f565c605f5a52483d322c38434d575e61605a544d464039332c241b110600000000000000000000000000000c17232e39444f59646d77808990979d9a94908d8c8b8b8c8f92979d9a948c847b72685e53483d32271c1004000000000000000000000000000003090e1216191b1d1e1f1f1f1d1c1916130e0904000000000000000000000000000000060e161c212527272727272727272725211c160f060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d12171c2024272a2d30323435373838393939393837363533312f2d2a26231f1b16110c0601000000000000000000000000000000000000000000000000000000000b151e262e33373939393939393939393938352f2920170e050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a232b3136393939393939393939393936322b241b12080000000000000000000000000000000009131c252c32373939393939393939383735322f2b26211b140d050000000000000000000000000000000000000000000000000000000000000000000000000d1a26323e4a555f6668686868686868686760564b3f33271b0e020005111e2a36424e5862676868686868686868655d53483c3023170b00000000101d2a3643505d6976838f9ca9a89b8e8174747d858d949a9f9f9d9c9b9b9c9d9fa2a6a8a49f9a948d867e766d645a51463c32271c11060000000013202c3946535f6c798693a0aca89c8f8275685b4f4235291c0f02000000020f1b2835414e5b6774818e9aa7ac9f93867a6d6054473b2e21150800030f1c2834414d5965727e8a96a2ada3978b7f73685c51473d3632313031343b45505b66727e8b97979695948c8073675a4e4235291c10030013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070000050f1820272d31333a4653606d7982828282828282786b5e51454c5965727f8282828282827e7164574b3e3333322e29221a11080000000000000000000000000000000000000713202d3946525e69727373737373737373737375828f9ca9b0a3968a7d7063564a3d3023170a00111d2a3744505d6a77848c8c8c8c8c8c8a7d7063574a3d3024170a0013202c3946525f6c787b7b7b7b7b7b7b7b7a6e6255483b2f22150800000000000000000000030c151c23282b2c2c2c2c2c2c2c2a26201911080000000000000000000000000000000007121d27303940464d545a61676d6b64594e4338333e49545f696e6c655e58514b443d362d23180d020000000000000000000000000006121d28333d48525c656e767e868c91969a9c9a989898999b9b98948f89827a726960564c42372c21160b0000000000000000000000000002090f141a1e2225282a2b2c2c2b2a2826221f1a15100a03000000000000000000000000050f1820272d31333434343434343433312d2820180f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070b1014171b1e21232527292a2b2c2c2c2c2c2c2b2a28272523201d1a17130f0a0500000000000000000000000000000000000000000000000000000000000000030c141c22272b2c2c2c2c2c2c2c2c2c2c2b29241e170e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111920262a2c2c2c2c2c2c2c2c2c2c2c2a26211a12090000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2a2826231f1a150f0902000000000000000000000000000000000000000000000000000000000000000000000000000f1c2935424e5b6771757575757575757572675b4f4336291d1003000713202d3946525e6a7375757575757575756f64584c3f3226190c000000000f1c2935424f5b6875828e9ba8a89c8f82756b737b82898e93989b9ea0a1a2a2a1a09e9b98948f89837c746c645b52483f352a20150b000000000013202c3946525f6c7986929faca99c8f8275695c4f4336291d100300000005111e2a3743505c6976828f9ca8aa9d9184786b5e5245392c1f130600000c1825313d4955616d7985919da8a79c9084796d63584f48423f3d3d3e40454d57616c77838f9ba4a3a094887c7064574b3f3226190d010013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000060e151c21242d3a4653606d79868f8f8f8f8f85786b5e51454c5965727f8c8f8f8f8f8b7e7164574b3e312625221d171008000000000000000000000000000000000000000714212e3a4754616d7a8080808080808080808080838f9ca9b0a3968a7d7063564a3d3023170a00111d2a3744505d6a77849098989898978a7d7063574a3d3024170a0013202c3946535f6c7986888888888888887b6f6255483c2f2215090000000000000000000000030a11171b1e2020202020201f1d1a150e0700000000000000000000000000000000000c18232e39424b51585e656c7279756b60554a3f39444f5a65707a767069635c564f483f342a1e130700000000000000000000000000000b16212b36404a535c656d747b81868a8d909192939392908e8b88837d77706860574e443a30251b1005000000000000000000000000060d141a20252a2e323437383838383735322f2b26211b150e0700000000000000000000020d17212a32393d4040404040404040403e39322a21180f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004070b0e111417191b1c1d1e1f1f201f1f1f1e1d1c1a181614110e0a070300000000000000000000000000000000000000000000000000000000000000000000020a11171b1e202020202020202020201f1c18130c050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e151a1d1f2020202020202020201f1e1a150f0800000000000000000000000000000000000000010910161a1e1f202020202020201f1e1c1916130e0a04000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c69768282828282828282776a5d5044372a1d1104000714202d3a4753606d7a82828282828282807366594d4033261a0d000000000e1b2734414d5a6773808d99a6a99d9083776a6970777d83888c8f91939595959493918f8c88837e78716a625a524940362d23190e040000000000121f2c3845525f6b7885919eabaa9d9084776a5d5144372b1e12050000000814212d3946525f6b7884919daaa79b8e8275695c5043372a1d110400000915212d3945515d6975808c97a3aca1958a7f746a6159534e4c4a4a4b4d51575f69737d89949faba79b9084786c6054483b2f23160a000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d20130700000000040b1015202d3a4653606d7986939c9c9c9285786b5e51454c5965727f8c999c9c988b7e7164574b3e31241816120c0600000000000000000000000000000000000000000714212e3a4754616d7a878d8d8d8d8d8d8d8d8d8d8d949fabb0a3968a7d7063564a3d3023170a00111d2a3744505d6a7784909da5a5a4978a7d7063574a3d3024170a0013202c3946535f6c7986939595959595887b6f6255483c2f22150900000000000000000000000000060b0f1213131313131313110e0903000000000000000000000000000000000004111d2935404b545c636970777d847c71665b5146404b56616c7782827b746e67605a50463b2f23170b0000000000000000000000000000050f1a242e38414a535b62696f757a7d8183858686868584827f7b77726c665e564e453c32281e14090000000000000000000000000810171f252b31363a3e41434545454543413e3b37322c261f18110901000000000000000008131e29333c444a4d4d4d4d4d4d4d4d4d4a443c332a21170e050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205080a0c0e0f111212131313131211100f0d0c0a070401000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f121313131313131313131312100c07010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e111313131313131313131313110e0a0400000000000000000000000000000000000000000000050a0e11131313131313131312110f0d0a06020000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c6976838f8f8f8f8f8f84776a5d5044372a1d1104000714202d3a4753606d7a878f8f8f8f8f8d807366594d4033261a0d000000000d1926333f4c5865727e8b98a4ab9e9185786b5f666c72777b8082858788888888868582807b77726c665f58504840372e241b1107000000000000111e2b3744515d6a7784909da9ab9e9285786c5f53463a2e2115090000030e1925313d4955616e7a8793a0aca4988b7f73665a4d4134281b0f02000005111d2935404c58646f7b86919ca7a69b91867c736b645f5b58575757595d6269717a858f9aa5aca1968a7f73675c5044382b1f1307000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070000000000000713202d3a4653606d798693a0a99e9285786b5e51454c5965727f8c99a6a4988b7e7164574b3e3124180b06010000000000000000000000000000000000000000000714212e3a4754616d7a87949a9a9a9a9a9a9a9a9a9a9ea6b0b0a3968a7d7063564a3d3023170a00111d2a3744505d6a7784909daab0a4978a7d7063574a3d3024170a0013202c3946535f6c798693a0a2a2a295887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945515c666e747b82888e83786d62574c46515c67727d888c868079726b62574b3f33261a0d01000000000000000000000000000008121c262f38414950585e64696d71747678797979787775736f6b66615b544c443c332a20160c02000000000000000000000009121a222930373c42464a4d5051525251504e4b47423d37312a231b130a01000000000000000d1924303b454e55595a5a5a5a5a5a5a59554e453c332920170d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c697683909c9c9c9c9084776a5d5044372a1d1104000714202d3a4753606d7a87949c9c9c9a8d807366594d4033261a0d000000000b1824313d4a5763707d8996a2aca093867a6d615b61666b6f7376787a7b7b7b7b7a7876736f6b66615b554e463e362e251c120900000000000000101d2936434f5c6875828e9ba7ada094877b6f62564a3d32261b1009080b151f2a36414d5965717d8a96a3ada195887c7063574a3e3225190c000000000c1824303c47535e6975808b95a0aaa2988f857d766f6b676563636466696d737b838d96a1aba59a8f85796e62574b3f33271b0f03000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070000000000000713202d3a4653606d798693a0ab9e9285786b5e51454c5965727f8c99a6a4988b7e7164574b3e3124180b00000000000000000000000000000000000000000000000714212e3a4754616d7a8794a1a6a6a6a6a6a6a6a6a6a9acacaca3968a7d7063564a3d3023170a00111d2a3744505d6a7784909daaaca4978a7d7063574a3d3024170a0013202c3946535f6c798693a0acafa295887b6f6255483c2f2215090000000000000000000003060809090909090908060200030608090909090909080602000000000000000000000815222e3b4854616d7880868c93948a7e74695e534d58636e79848f97918a847d74675b4e4135281b0e020000000000000000000000000000000a141d262f373f464d53585d6165686a6b6c6c6c6c6a6966635f5b565049423b322a21180e04000000000000000000000009121b242c343b42484d52565a5c5e5f5f5e5d5a57534e49423c352d251c130a01000000000000101c2935414c576066676767676767676660574e453b32291f160d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002040507070808080706050301000000000000000000000000000000000000000000000103050607070808080706050402000000000000000000000000000000000000000000000000000000000000000000000000000000000204060708080807070504020000000000000000000000000000000002020202020100000000000000000000000000000000000000000000000000000000000000000000000203050607080808070605030100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002040506070808080707060403010000000000000000000000000000000000000000000000101c2936434f5c697683909ca8a89d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0a8a69a8d807366594d4033261a0d000000000916222f3c4855616e7a8794a0ada295897c6f6356555a5f6367696c6d6e6f6f6e6d6b6967635f5b56504a433c342d241c130b05000000000000000e1b2734414d5a6673808c98a5b0a3978a7e72665a4e42372c221a1615171d27313c47525e6975818d9aa6a99d9185796c6054473b2f2216090000000008131f2b36424d58636e79848e98a2aaa1978f87817b7773717070717275797e858d959fa8a69d93897e73685d51463a2f23170b00000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070000000000000713202d3a4653606d798693a0a09e9285786b5e51454c5965727f8c99a0a0988b7e7164574b3e3124180b00000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0968a7d7063564a3d3023170a00111d2a3744505d6a7784909da0a0a0978a7d7063574a3d3024170a0013202c3946535f6c798693a0acafa295887b6f6255483c2f2215090000000000000000050b0f131515151515151514120e0b0f131515151515151514120e090300000000000000000815212e3b4754616d78828c969e9b90857a6f645a535e69747f8a95a09b91877c72665a4e4134281b0e02000000000000000000000000000000020b141d252d343b42474d5155585b5d5f5f5f5f5f5e5c5a57534f4a443e38302921180f06000000000000000000000008121b242d363e454c53595e6366696b6b6b6b6967635f5a544d463f372e251c1309000000000000121f2c3845515d697273737373737373726a60574d443b31281f150c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105090c0e10121314151514141311100d0b08050100000000000000000000000000000105080b0d0f11131414151514141312100f0c0a0704000000000000000000000000000000000000000000000000000000000000000002060a0d0f111314141515141312100e0c090602000000000000000105090b0d0e0f0f0f0e0d0c0a08060300000000000000000000000000000000000000000000000000000205090c0e10121314141514141312100e0b0805010000000000000000000000000000000000000000000000000000000000000000000000000003070a0c0e10121314141515141312110f0d0b08050200000000000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d000000000714202d3946525f6b7885919eaaa4978b7e7265594c4f53575a5d5f6161626261605f5d5a57534f4a453f38312a23211f1b17110a0200000000000c1925323e4b5764707d8995a2aea69a8e82766a5f54493e342c25222223282f39434d58636e7a86929eaaa5998d8175695d5044382b1f130600000000030e1a25303c47525d67727c869099a1a9a199928c8783807e7d7d7d7f82858a90979fa8a69e958b81776c61574b4035291e120600000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070000000000000713202d3a4653606d7986939393939285786b5e51454c5965727f8c939393938b7e7164574b3e3124180b00000000000000000000000000000000000000000000000714212e3a4754616d7a8793939393939393939393939393939393938a7d7063564a3d3023170a00111d2a3744505d6a77849093939393938a7d7063574a3d3024170a0013202c3946535f6c798693a0acaca295887b6f6255483c2f221509000000000000000810161b1f22222222222222211e1a161b1f22222222222222211e1a150e06000000000000000713202c3845505c66707a848e99a2978c81766b6059646f7a86919c9e94897f756a60564a3e3226190d0000000000000000000000000000000000020b131b232a30363c4145494c4f505253535352514f4d4a47433e39332d261f170f06000000000000000000000006101a242d363f4850575e646a6f73757778787776736f6b655f58514940372e251b1107000000000013202c3946535f6c79818181818181817c72695f564d433a31271e150b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090d1115181b1d1f2021212121201f1e1c1a1714110d09040000000000000000000004090d1114171a1c1e1f202121212121201f1d1b191613100c0803000000000000000000000000000000000000000000000000000000040a0e1216191c1e1f2021212121201f1d1b1815120e090500000003090d1215181a1b1c1c1c1b1a191715120f0b0600000000000000000000000000000000000000000000050a0e1215181b1d1e202121212121201e1d1a1814110d0804000000000000000000000000000000000000000000000000000000000000000002070b0f1316191b1d1f202121212121201f1e1c1a1815120e0a060100000000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d0000000005111e2a3743505c6975828e9ba7a69a8d8175685c5043474b4e505254555555555452504e4b47433e3b39373432302e2b27221b140b02000000000a16232f3c4854616d7986929eaaaa9f93877b70655a50463e36322f2e303339414a545f6974808b97a2aca195897d7165594d4034281c1003000000000009141f2a35404b56606a747d878f989fa6a49d98938f8d8b8a8a8a8c8e91969ba1a9a39c948c83796f655b50453a2f24180d0100000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070000000000000713202d3a4653606d7986868686868685786b5e51454c5965727f8686868686867e7164574b3e3124180b00000000000000000000000000000000000000000000000714212e3a4754616d7a868686868686868686868686868686868686867d7063564a3d3023170a00111d2a3744505d6a7784868686868686867d7063574a3d3024170a0013202c3946535f6c798693a0a0a0a095887b6f6255483c2f22150900000000000009121a21272c2e2f2f2f2f2f2f2e2b2621272c2e2f2f2f2f2f2f2e2b262018100600000000000004101c28343f4a545e68727c87919b9d93887d7267606b76818c97a0968c82776d63594e44392e22160a000000000000000000000000000000000000010911181f252b3035393d40424445464646454443413e3b37332e28221b140d050000000000000000000000020d18222c363f485159616970757b7f8284858584827f7b76706a625b524940372d23190f040000000013202c3946535f6c79868d8d8d8d8d8d847b71685f554c433930271d140a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090f14191d2125272a2c2d2e2e2e2e2d2c2b292624211d1915100b05000000000000050b1015191d212426292a2c2d2e2e2e2e2d2c2b2a282523201c18140f0a040000000000000000000000000000000000000000000000040a10151a1e2225282a2c2d2e2e2e2e2d2b2a2725221e1a15100b05080e14191e2124262828282828272524211f1c17110a03000000000000000000000000000000000000060b11161a1e212527292b2c2d2e2e2e2d2c2b292724211d19140f0a040000000000000000000000000000000000000000000000000000000003090e13171b1f2225282a2b2d2d2e2e2e2e2d2c2a292724211e1a16110d07010000000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00000000020f1b2834414d5a66737f8b98a4a99d9184786c5f53473b3e41444647484848484746444143484b4a484643413f3d3a38332d251d1309000000000713202c3845515d6975818d99a5afa3988d81766c62584f48423e3c3b3c3f444b535d66707b86919ca8a79c9084786c6155493c3024180c000000000000030e19242f39444e58626b757d868d959ba1a6a39f9c9998979697989a9da1a6a49f99928a827970675d53493e34291e12070000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070000000000000613202d3946535f6b7679797979797979756a5e51444b58657179797979797979797063574a3e3124170b00000000000000000000000000000000000000000000000714212d3a4753606c7779797979797979797979797979797979797979786e6256493c3023160a00101d2a3643505c69747979797979797979786f63564a3d3023170a0013202c3946535f6c7986939393939393887b6f6255483c2f221509000000000007111b242c33383b3c3c3c3c3c3c3a37312c33383b3c3c3c3c3c3c3a37312a22180f040000000000000c17232e38424c56606b757f89939d998e83786e66717c87929d998f847a70655b51473d32281d11050000000000000000000000000000000000000000060d141a1f24292d303335373839393939383634322f2b27221d17100a0200000000000000000000000009141f29343e48515a636b737a81878b8e919292918f8b87827b746d645b52493f352b20160b00000000121f2c3845515e69747d8790999a9a968d847a71675e554b42392f261d130a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d141a20252a2e31343638393a3b3b3a3a39373533302d2925201b16100a030000030a10161c2125292d30333537393a3a3b3b3b3a39383634322f2c2824201b15100a030000000000000000000000000000000000000000070e151b21262a2e323537393a3a3b3b3a39383634312e2a26211c1610131a20252a2e313335353535353432302e2b28231c140c03000000000000000000000000000000040b11171c21262a2e31343638393a3b3b3b3a39383633302d2925201b150f090200000000000000000000000000000000000000000000000001080e141a1f23282b2f32343638393a3b3b3b3a3a39373533312e2a26221d18130d0600000000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00000000000c1925323e4a57636f7c8894a0aca094887b6f63574b40343537393b3b3c3c3b3a393b454e5457575452504e4b4947443e372f251b100500000004101c2935414d5965717d88949faba99e93887e746a615a534e4a4848494b50565d656e78828d97a2aca1968b7f73685c5044382c2014080000000000000008121d28323c465059626b747b838a90959a9ea1a3a5a4a4a3a4a5a5a3a09d98938e87807870675e554b41372d22170c010000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d20130700000000000005121e2b37434f5a646b6c6c6c6c6c6c6c6b63594e4248545f686c6c6c6c6c6c6c6c675e53473b2f221609000000000000000000000000000000000000000000000006121f2b3844505b656b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c675d52463a2e211508000f1b2834404c58626a6c6c6c6c6c6c6c6c6c675d52473a2e2215090013202c3946535f6c7986868686868686867b6f6255483c2f22150900000000030e19232d363e444748484848484847423c363e444748484848484847423c342a20160b00000000000006111c26303a444f59636d77818b96a0958a7f746d78838e999c91877d72685e54493f352b20160b0000000000000000000000000000000000000000000002090e14191d212427292a2c2c2c2c2c2b2a2825221f1b16110b0500000000000000000000000000040f1a26303b46505a636c757d858c92979b9a99999a9b98938d867e766d645b51473c32271c1105000000101d2935414d58626b747e87919aa39f968c837970675d544b41382f251c120900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000911181f252b31363a3d4043454647484847474544423f3c3935312c27211b150e07070e151b21272c3135393c3f424445464748484747464543413e3c3834302c26211b150e070000000000000000000000000000000000010a121920262c32363b3e4143454747484847464543403d3a36322d27211b1d242b31363a3d404142424241403f3d3a38342e261e150b0000000000000000000000000000080f161c22282d32363a3d404244464747484747464442403d3935312c26201a130c0500000000000000000000000000000000000000000000050c13191f252a2f34383b3e41434546474748484746454442403d3a36322e29241e18110a030000000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00000000000916222e3b4753606c7884909ca9a4988c8074685c5045392e2b2c2e2f2f2f2e2e36424d575f6463615f5c5a585653504941372d22160b000000000c1925313d4954606c77838e99a4aea49a90867c736b645e5a57555555585b61676f77818a949ea9a69b9085796e62574b3f34281c100400000000000000010b16202a343e475059626a71787e84898e919497989aa0a9a19b989694908c88827c756e665e554c43392f251b1006000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000020f1b27333e49525a5f5f5f5f5f5f5f5f5e5951473d434d565d5f5f5f5f5f5f5f5f5c554c42372b1f13070000000000000000000000000000000000000000000000030f1c28333f49535b5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5c554b41352a1e1205000c1824303b4650595e5f5f5f5f5f5f5f5f5f5c554c41362a1e120600131f2c3946525f6b767979797979797979786d6155483b2f221508000000000915202a353f484f54555555555555534d463f484f54555555555555534d463c32271c100400000000040b11161e28333d47515b656f7a848e989c91867b737e89949e948a80756b61564c42382d231915100a030000000000000000000000000000000000000000000003080d1114171a1c1e1f2020201f1e1d1b1916130f0a050000000000000000000000000000000915202c37424d57626c757e878f979a95908d8c8c8d90949a98908880766d63594e43382d22160b0000000d1925303c465059626c757e88929ba49e958c82796f665d534a41372e241b12080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a121b222a30373c41464a4d4f5153545454545352514e4c4945413d38322d26201911111920262d33383d4145494c4e50525354545454535351504d4b4844403c37322c261f181109010000000000000000000000000000020b131c232b32383d42474a4e5052535454545453514f4d4a46423d38332c26272f363c42464a4c4e4f4f4f4e4d4b4947443f3830271d12070000000000000000000000020a121920272e33393e42464a4d4f5153535454545352514f4c4945413d37322c251e170f070000000000000000000000000000000000000000070f171e242b30363b4044474b4d4f515353545454545352504e4c4946423e3a352f29231c150d0500000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d000000000006121f2b3743505c6874808c98a4a89c9084786d61564b40352b2121222222232f3b47535e6970706d6b69676462605b53493e33271b0f030000000814202c38444f5b66717d88929da7aca2988e867d766f6a666362616264676c7279818a939ca6a99e94897e73685d51463a2f23170b000000000000000000040e18222c353e4750585f666d73787d8285888a8c8e97a3988f8c8a8784817c77716b645c544c433a31271d130900000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000a16212c3740494f5253535353535353524e483f363b444c515353535353535353504b433a30251a0e030000000000000000000000000000000000000000000000000b17222d3741494f525353535353535353535353535353535353535353504a43392f24190d020008141f2a353e474e52535353535353535353504b433a2f25190e0200111e2a37434f5a646b6c6c6c6c6c6c6c6c6c665c5145392d201407000000040f1b26313c47515a606262626262625f584e47515a606262626262625f584e44382d201408000000060e161d2225292c353f49535e68727c86909a978c8279858f9b978c82786e63594f443a302b2825211b140d0400000000000000000000000000000000000000000000000105080b0e1011121313131212100e0c09060300000000000000000000000000000000020e1a26313d48535e69747e879199978f8984817f7f8184898f969a92897f756a60554a3e33271c1004000008141f2a343e47505a636d768089929ca59e948b81786f655c524940362d241a1108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c242d343b42484d5256595c5e6061616161605f5d5b5855524d49443e38312a231b1b232a31383e44494d5255585b5d5f6061616161605f5e5c5a5754514d48433d37312a231b130b02000000000000000000000000010b141d252e353c43494e53575a5d5f60616161605f5e5c5956524e49443e3730313941474d5256595b5b5b5b5b5a585653504a42392e23180c01000000000000000000030b141c242b32393f444a4e5256595c5e5f60616161605f5e5b5955514d48433d3730292119110800000000000000000000000000000000000009111921282f363c42474c5054575a5c5e5f6061616161605f5d5b5956524f4a45403a342e261f170f07000000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d0000000000030f1b2734404c5864707c88949faba195897e72675c51473d332b252222242a35404b57636f7b7c7a787573716f6c655b4f43372b1e120500000004101c27333e4a55606b76818b959fa8aaa0978f88817b7672706f6e6f7073787d848b939ca5aaa1978d82786d62574c4035291e12070000000000000000000007101a232c353e464e555c62686d7175787b7d7f8794a095887f7d7b7874706b666059524a423a31281f150b0100000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d2013070000000000000005101b252e373e43464646464646464645423d362d323a4044464646464646464644403931281e14090000000000000000000000000000000000000000000000000006111b262f373e43464646464646464646464646464646464646464646443f3931271d13080000020e18232c353c4245464646464646464646443f3931281e130800000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5b544a4034291d11040000000915202c37424d58636c6f6f6f6f6f6f6a60554d58636c6f6f6f6f6f6f6a6055493d3024170b0000050f1820282e3235383b3f424c56606a747e89939d9388808b96998f857a70665c5147413e3b3734312c261f160d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b37424e5965707b859099968d857e7874727274787d848c959b91877c71665b4f44382c2014080000030e18222c353e48515b646d77808a939ca69d948a81776e645b52483f362c231a1007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121c252e363e464d53595e6266686b6c6d6e6e6d6d6b6a6765615e59544f49433c352d25252d353c43494f54595e6165676a6b6d6d6e6e6d6d6c6b696664605d59544e49423c352d251d140b02000000000000000000000009131d262f373f474e545a5f6366696b6d6d6e6e6d6c6a6866625e5a554f49423b3a434b52595e62656768686867666562605c544b4035291d11040000000000000000030c151d262e363d444a50555a5e6265686a6c6d6d6e6d6d6c6a6865625d59544e48413a332b231a11080000000000000000000000000000000009121b232b333a41474d53585c606366696b6c6d6d6e6e6d6c6b6a6865625f5b56514c463f383129211910070000000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d0000000000000b17232f3c48545f6b77838f9aa6a69a8f84786e63594f453d36312f2f30353c46515c68738089878482807d7b776c5f5346392d201306000000000b16222d38444f5a646f79838d969fa7a9a199928c87827f7d7b7b7b7d8084898e959da5aaa1988f857b70665b50453a2f24180d01000000000000000000000008111a232c343c434a51575c6165696c6f717a8794a095887b716e6b68645f5a544e47403930281f160d030000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acada09386796d6053463a2d201307000000000000000009131c252c323739393939393939393936322b24282f3438393939393939393938342f281f160c0200000000000000000000000000000000000000000000000000000a141d252d333739393939393939393939393939393939393939393937342e271f150c0100000007111a232b31363939393939393939393938342e271f160c0100000a16212c3740484f52535353535353535352504a42382e23180c000000020e1a26313d48545f6a757b7b7b7b7b7b716558545f6a757b7b7b7b7b7b7165584b3f3225180c00020d17212a32393e4145484b4e515558626d77818b959a8f8b929c92877d73695e5754504d4a4744413d3830281f150a0000000000000001050809090909090909090909080602000000000000000000000000000000000000000000000000000000000000000000000a16232f3b47535f6a76818c97978d847b736d686666686c727a838c96998e83776c6054483c3024180b00000006101a232c363f49525b656e77818a949da69c938980766d645a51483e352c2219100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101a242e37404850585e646a6e727577797a7b7b7a79787674716e6a65605a544e473f372f2f373f474e545b60656a6e71747678797a7b7b7a7a79777573706d69645f5a544d463f372f261d140b0100000000000000000007111b252f38414951595f656b6f737678797a7b7b7a797775726e6a66605a544d45424c555d646a6e72747575757473716f6c665c5145392d20140700000000000000020b151e272f3840474e555b61666b6e727577797a7a7b7a7a797774716e69655f59534c453d352c231a1108000000000000000000000000000009121b242d353d444c52585e63686c70737577797a7a7b7b7a79787674726e6b67625d57514a433b332b22190f0600000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00000000000007131f2b37434f5b66727e8995a0aba0958a7f756a61574f47413d3b3b3d40464e58626d79849093918f8c8a84786c5f5346392d2013060000000005111c27323d48525d67717a848d959da4aba49d97928e8b898888888a8c90949aa0a7a7a0988f867d73695f544a3f34291e13070000000000000000000000000008111a222a31383f454b5055595d60626d7a8794a095887b6e625f5c58544f49433d362e271e160d04000000000000000013202c3946535f6c798693a0acaca09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0acaca09386796d6053463a2d2013070000000000000000010a131b21272a2c2c2c2c2c2c2c2c2c2a26211a1e24282b2c2c2c2c2c2c2c2c2b28231d160d04000000000000000000000000000000000000000000000000000000020b131b22272a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b28231c150d03000000000008111920262a2c2c2c2c2c2c2c2c2c2c2b28231d150d0400000005101a252e373e4346464646464646464646433f3830261c120700000007131f2b37424e5965707b86888888857a7064575965707b86888888857a7064574b3e3225180b0008131e29333c444a4e5154575b5e6164676b6f79838d989a989b948a80756d6a6663605d5a5653504d49423a31271c11050000000001070d11141616161616161616161615120e090200000000000000000000000000000000000000000000000000000000000000000d1a26323f4b57636f7b87939b90857b7269615c59595b6168707a848f9a94887d7165584c4034271b0e0200000008111a242d374049535c656f78828b949ea59b928980766c635a50473e342b22180f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d18222c364049525a626970757a7e82848687888887868583817d7a76716b665f585149413838414951585f666c71767a7d818385868788888786858482807c7975706b655f58514941382f261d13090000000000000000030e18232d37414a535b636a71767b7f828486878887878684827e7b76716c655e574f4a545e676f757a7e8182828281807e7b786d6155483b2f221508000000000000000a141d273039414a525960666c72777b7e81848586878887868583817e7a75706b645e564f473e352c231a100600000000000000000000000007111b242d363f474f565d64696f74787c7f8284868787888787868583817e7b77736e68625c544d453d342b21180e04000000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d000000000000030f1b27323e4a56616d78848f9aa5a69c91877c73696159524d4a4848494c5158606a747f8a95a09d9b988c8074685c4f43372b1e120500000000000b16212c36414b555f68717a838b9399a0a5a9a39e9b989695959596999ca0a5a8a39c958e867d746b61574d43382d23180d01000000000000000000000000000008101820272e343a4045494d5053606d7a8794a095887b6e6155504c48433e38322b241c150c0400000000000000000013202c3946535f6c798693a0a0a0a09386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0a0a0a09386796d6053463a2d201307000000000000000000010910161b1e1f202020202020201f1e1a150f13181c1f20202020202020201f1c18120b040000000000000000000000000000000000000000000000000000000000010910161b1e2020202020202020202020202020202020202020201e1c17120b0300000000000000070e151a1d1f2020202020202020201e1c17120b03000000000009131c252c32373939393939393939393937332d261e140b000000000b17232f3b47535f6a76818d9594897e73685e535f6a76818d9594897e73685e53473b2f23160a000c1824303b454e565a5d6064676a6d7074777a7d818a96a3a49e9285807c797673706c696663605c59544c43382d22160a000000030b12191d2123232323232323232323211e1a140d05000000000000000000000000000000000000000000000000000000000000000f1c2935424e5a6773808c98968a7e74696057504c4c4f565e68727d8994998d8175685c4f43362a1d11040000000008121b242e37414a535d666f79828c959ea49b91887e756c625950463d342a21170e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f29343e48525b646c747b81868a8e91929494949493918f8d8a86827c77716a635b534a42414a535b636a71777d82868a8d8f9193949494949392918f8c8985817c76706a635b534a42382f251b11070000000000000009141f2a353f49535c656d757c82878b8f91939494949392908e8b87827d7770696159515c66707980868b8d8f8f8f8e8c8a887b6f6255483c2f22150900000000000007111c252f39424b535c636b72787d83878b8e9092939494949392908d8a86817c766f68615950473e352c22180d0300000000000000000000050f19232d363f48515961686f757b8084888c8e909293949494949391908d8a87837e79736d665f574e463d332a20160c010000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d000000000000000a16222d3945505b67727d88939ea8a3988e857b736b645e5956555556585d626a727c86919ba6a99e92877b6f63574b3f33271b0f020000000000040f1a242f39434d565f68717981888e949a9ea2a5a7a4a3a2a2a2a3a5a8a5a19d97918b847c746b62594f453b31261c110600000000000000000000000000000000060e151c23292f34393d414753606d7a8794a095887b6e615548403c37322d272019120b030000000000000000000013202c3946535f6c798693939393939386796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693939393939386796d6053463a2d2013070000000000000000000000050a0e11131313131313131313110e0a04070c1012131313131313131312100c07010000000000000000000000000000000000000000000000000000000000000000050a0f11131313131313131313131313131313131313131313120f0b060000000000000000000003090e1113131313131313131313120f0b0600000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2b27221c140c02000000030f1b2734404c58646f7b87929a8e83786d625758646f7b87929a8e83786d62574c42372b1f130700101c2935414c5760666a6d7073767a7d8083878a8d919ba6aea2978f8c8986827f7c7975726f6c69655e554a3e32261a0d0000030c151d24292d2f3030303030303030302e2a251e170e05000000000000000000000000000000000000000000000000000000000000111e2b3744505d6a76838f9b9285796d62574e454040444c56616c7884909d9084776b5e5245392c1f1306000000000009121c252f38414b545d67707a838c969fa39a91877e746b62584f463c332920170c0200000000000000000000000000000000000000000000000000000000000000000000000000000000030e1a25303b46505a646d767e868c92979a9d9fa0a1a1a0a09e9c9996928d88827c746d655d544b4a535c656d747c82888d9296999c9e9fa0a1a1a1a09f9d9b9895918d88827b746d655c544a41372d23180e030000000000030f1a26313c46515b656e7780878d93979b9e9fa1a1a1a09f9d9a97938e88827b736b6259636e78828b92979a9b9c9b9a9995887b6f6255483c2f2215090000000000040e19232d37414b545d656e757c83898e93979a9d9fa0a1a1a1a09f9c9a96928d87817a736b625950473e34291f150a000000000000000000020c17212b353f48515a636b727a80868c9095989b9d9fa0a1a1a1a09f9e9c9a97938f8a857e78716961584f453c32281d13080000000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d0000000000000005111d28343f4a56616c77818c96a1aaa0978e857c756f69666362616265686e747c858e98a2ada3988d81766a5f53473b2f23170b0000000000000008131d27313b444d565f676f767d83898e9296999b9d9e9f9f9f9e9d9b9895918c868079726a625950473d33291f150a000000000000000000000000000000000000030b11181e23282d313a4753606d7a87939393887b6e6155483b302b27211b150f0800000000000000000000000013202c3946535f6c798686868686868686796c5f5346392c20130600000000000000000000000000000000000000000000000000000000000013202c3946535f6c798686868686868686796d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010910161a1e1f2020202020202020201e1b17110a020000000006121f2b3744505c6874808c9894897d72665b505c6874808c9894897d72665b50453a30251a0f0300121f2b3844515d697276797c808386898c909396999b9a9fa89f9b9b9895928f8c8885827e7b787570665a4e4235281c0f00000a151e272f353a3c3c3c3c3c3c3c3c3c3c3a36302920170c020000000000000000000000000000000000000000000000000000000000121f2c3945525f6b7885919b8f8276695d51463c34333a44505c6874818e9a9386796d6053473a2d2014070000000000000a131d262f39424b555e68717a848d97a0a39990877d746a61574e453b32281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000008141f2b36424d57626c76808890979ea3a6a7a29f9c9a9a9a9a9c9ea19e99948d867f776e665d53525c656e777f868d94999ea2a6a29e9c9b9a9a9a9b9d9fa2a5a19d98938d867f776e665c53493f352a1f140900000000000814202b37424d58626d77808991989ea3a7a6a19e9b9a9a9a9b9d9f9f99938c857d746b626974808a949da3a6a7a09b999895887b6f6255483c2f22150900000000000a15202b353f49535d666f7780878e949a9fa3a6a3a19f9e9e9e9fa1a4a6a29e98928c857d746b62594f463b31261b1005000000000000000009131e29333d47515a636c757d848b92979ca1a4a3a09d9b9a9a9a9b9c9ea0a4a39f9b96908a827b736a61574e443a2f241a0f0400000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00000000000000000c17222e39444f5a65707a858f98a2a9a0978e87807a7572706e6e6f7174797f868e97a0aaa69b91867b7065594e42362b1f130700000000000000010b151f29323b444d555d646b72787d8286898c8f909192929292908e8c8985807b756e67605850473e352b21170d030000000000000000000000000000000000000000060c12171c212d3a4753606d7a86868686867b6e6155483b2e221b16100a0400000000000000000000000000131f2c3946525f6b767979797979797979766b5f5246392c1f1306000000000000000000000000000000000000000000000000000000000000131f2c3946525f6b767979797979797979766b5f5346392d201306000000000000000000000000000000010407090a0c0c0d0d0d0c0b0a0805030000000000000000000000000000000000000000000000000000000000000000000004090c0d0d0d0d0d0d0d0d0d0c0a060100000001060a0c0d0d0d0d0d0d0d0d0d0b08040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0e1113131313131313131313120f0b060000000000000915222e3b4753606c7884909b8f84786c615553606c7884909b8f84786c61554a3f34291e14090000131f2c3946525f6c798286898c8f9296999c9d98948f8e96a0968f90959a9e9b9895928e8b88858276695c4f4336291c100006111c27303940464949494949494949494947423b32281e1308000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986939a8e8174675a4e41352a2833404d596673808c9994877a6d6154473a2e211407000000000000010b141d27303a434c565f68727b858e97a1a2998f867c736a60574d443a3025190d010000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303c47535e69747e88919aa2a9a9a19b96928f8e8d8d8e8f9194989c9f98918981786f655c5a646e77808991989fa5a59f9a9592908e8d8d8d8e9092969a9ea4a49e98918981786e655b51463c31261b1004000000010d1925313c48535e69747e89929ba3aaa8a09a95918f8d8d8d8e9093969a9e978f867d746a6d7985919ca6aea69d958f8c8b8b887b6f6255483c2f2215090000000005111c27323c47515b656f78818a9199a0a6a6a09b9794929191919395989ca2a8a49d968f877e756b61574d43382d22170b00000000000000040f1a25303a454f59636c757e878f969da3a7a19b9793908e8d8d8d8e8f9194989ca1a7a19b948d857c736960564b41362b20150a00000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d000000000000000006111d28333e49535e68737d879099a2a9a099928b86827e7c7b7b7c7e81858a9098a0a9a69d948a80756a5f54483d31261a0e020000000000000000030d172029323b434b535a60666c7176797d80828485868686858482807c79746f6a645d564e463e352c23190f050000000000000000000000000000000000000000000001070c14202d3a4653606c777979797979776d6154483b2e21150a05000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6b645a4f43372a1e1105000000000000000000000000000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6b645a4f43372b1e120500000000000000000000000001060a0e111315171819191a1919181614120f0b07030000000000000000000000000000000000000000000000000000000000030a1015181a1a1a1a1a1a1a1a1a1916120c0500060d1216191a1a1a1a1a1a1a1a1a1815100a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313d4a56636f7b8894978b7f73675b5056636f7b8894978b7f73675b5044392d22170c020000121e2b3844505d6975818d95989b9f9f9b96918c888385919d908484898e92979ca09e9b97948a7e72665a4e4135281c0f000b17232e38424b5255565656565656565656534c443a3025190d010000000000000000000000000000000000000000000000000000000013202c3946535f6c7986939a8e8174675a4e4135292833404c596673808c9994877a6d6154473a2e21140700000000000000020b151e27313a444d566069737c858f98a2a1988e857c72695f564c41362a1e1105000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414d58646f7a85909aa3aca89f97908a8683818181818385888c91969c9b938a81776e64626c768089929ba3a9a19a948e89868381818181828486898e9399a0a7a29b938a81776d62584d42372c21150a00000005111d2935414d5964707b86919ba4ada79e968f8985828181818284868a8e9399988f867c72717d8a96a2ada99e948b84807e7e807b6f6255483c2f221509000000000b16222d38434e59636d77818a939ba3aaa29b958f8b888584848486898c91969da4a8a19890877d73695f54493e33281c11050000000000000a15202b36414c57616b757e889099a0a8a49c96908b878482818181818385888b90969ca3a69f978e857b72675d52483d32261b0f04000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d0000000000000000000b16212c37424c57616b747e879098a0a7a39d97928e8b898888898a8d91969ba2aaa59d948b82786d63584d42372c20150900000000000000000000050e172029313941484f555b61656a6d707375777879797978777573706c68645e58524b443c342c231a11070000000000000000000000000000000000000000000000000005121f2b37444f5b656b6c6c6c6c6c6c665c5145382c201307000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5a52483e32261a0e020000000000000000000000000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5a52493e33271b0f020000000000000000000002080d12161a1d2022242526262626262423211e1b18130f09040000000000000000000000000000000000000000000000000000050e151c212527272727272727272725221d17100811181e222527272727272727272624211b150d05000000000000000005090c0d0d0d0d0d0d0d0d0d0c09050000000002070a0c0d0d0d0d0d0d0d0d0d0b0803000000000000000000000000000000000000000000000d1a2733404c5965727e8b9794877b6f63574c5965727e8b9794877b6f63574b423b32281e13080000101c2834404c5965717d8995a19d98948f8a85817c7885929d9084787d82868b9094999e9e92867a6e62564a3d3125190d000f1b28333f4a545d626363636363636363625e564c41362a1e110500000000000000000000000000000000000000000000000000000000121f2c3945525f6b7885919b8f8275695d51453b33333a444f5b6874818d9a9386796d6053473a2d2014070000000000000000030c151f28323b444e57606a737d869099a2a0978e847b71685e52463a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000815212d3945515d6975818c97a2aca99f968d857f7a767473737476787c80858b91989c938a80766c69747e88929ba4a9a0978f89827d79767473737475777a7d82878e959da6a49c92897e746a5f54493d32261b0f0300000815212d3a46525e6a75818c97a2ada89e958c847d797574737475777a7e83888e95988e847a74818d99a6b0a3988c827973717273746c6054473b2e21150800000005111c28333e4a55606a757f89939ca5a9a0989089847f7b79777778797c80858b929aa2aaa2998f857b71665b5044392d22160a0000000000040f1b26323d48535e68737d87919aa2aba29a928b847f7b77757473737476787b80858b9299a1a9a0978e84796f64594e43372c201509000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00000000000000000005101b25303a454f59626c757e868e969da3a8a29e9a979695959597999da1a7a7a19a938b827970665c51473c31261b0f040000000000000000000000050e171f272f373d444a5055595d616466696a6b6c6c6c6b6a696664605c58534d474039322a221a11080000000000000000000000000000000000000000000000000000030f1b27333e49535a5f5f5f5f5f5f5f5b544a3f34281c1004000000000000000000000000000000000a16212c3740484f525353535353535353524f4840372c21160a000000000000000000000000000000000000000000000000000000000000000a16212c3740484f525353535353535353524f4940372c21160a00000000000000000000070d13191e2226292c2f30323333333332312f2d2b27241f1a150f08010000000000000000000000000000000000000000000000050e1720272d31333434343434343433322e29221a121a22292e32343434343434343433312c261f170d040000000000040b1115181a1a1a1a1a1a1a1a1a1916110c0500070d1317191a1a1a1a1a1a1a1a1a17140f090200000000000000000000000000000000000000000f1c2835424e5b6874818d9a9184786b5f56535b6874818d9a9184786b5f56534c443a3025190d01000c1824303c4855616d79859196918c88837e7975707986929e91847771767a7f84888d92968e82766a5e5245392d21150900121e2b3744505c666e6f6f6f6f6f6f6f6f6f685e52463a2d21140700000000000000000000000000000000000000000000000000000000111e2b3744515d6a76838f9c9185796d62574d443f3f434c55606c7884909c9184786b5e5245392c1f1306000000000000000000030d162029323c454e58616b747d87909aa3a0968d847a6e6255483b2f22150900000000000000000000000000000000000000000000000000000000000000000000000000000b1824313d4955626e7a86929da8ada2978d847b736e6a68676768696c6f747980868e969b92887e736f7a85909aa4aaa0978e857e77716d6a68676767686a6d71767c838b949da6a49b90867b70655a4e43372b20140800000b1824313d4956626e7a86929ea9ada1978c837a726d69676767686b6e72777d838a92968c8176838f9ca8ac9f93877b706764656768635a4f44382c1f13060000000a16212d39444f5b66717c87919ba5aba1978e867e78736f6c6b6a6b6d70747a8188909aa3aba1978d82776c61554a3e33271b0f03000000000914202c37434e59646f7a858f99a2aca29990888079736e6b6867676768696c6f747980878f98a1a99f958b81756a5f54483d3125190e020000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d0000000000000000000009141e29333d47505a636c747c848b92979da1a5a7a4a2a2a2a2a4a6a7a4a09b969089817970675e544a3f352a1f140900000000000000000000000000050d161d252c33393f44494d5155585a5c5d5e5f5f5f5f5e5c5a5754504c47423c362f2820181008000000000000000000000000000000000000000000000000000000000b16222d3741494f525353535353524f4a42382e23180c000000000000000000000000000000000005101a252e373e4346464646464646464646433e372e251a10050000000000000000000000000000000000000000000000000000000000000005101a252e373e4346464646464646464646433e372e251b10050000000000000000020a11181f242a2e3236393b3d3e3f4040403f3e3c3a3734302b26201a130c04000000000000000000000000000000000000000000040d17202931383d4040404040404040403e3a332c231b242c343a3e4040404040404040403d3831291f160b00000000060e161c212527272727272727272725221d170f0911191e232627272727272727272624201a130c0300000000000000000000000000000000000000101d2a3743505d6976838f9b8e82756963625e5d6976838f9b8e82756963625e564c41362a1e1105000814202c3844515d6975818d8a85817c77726e696c7986939e9185786b6a6f73787c81868a8a7e7266594d4135291d11050013202c3946535f6c787c7c7c7c7c7c7c7c7a6e6255483b2f22150900000000000000000000000000000000000000000000000000000000101c2935424e5b6773808c98968a7e73695f564f4c4c4f555e67727d8894998d8175685c5043372a1d110400000000000000000000040e17202a333c464f59626b757e88929ea89f95887b6f6255483c2f22150900000000000000000000000000000000000000000000000000000000000000000000000000000e1a2733404c5965727e8a96a2aea89c91867b7169625e5b5a5a5b5d6063686e757c848c959a8f857a76818c97a1aca2988e857b736c66615d5b5a5a5a5c5e61656b7279818a949ea8a2988d82766b5f54483c3024180b00000e1a2733404c5965727e8a96a2aea79c90857a7068615d5a5a5a5c5e62666b727980899193887d84919eaaa99c9084776b5f58585a5b5851483e33271b0f030000020e1a26323e4a55616c77838e98a3ada3998f857c746d6763605e5d5e6064686f767e88919ca6a99f94897d72665b4f43372b1f1307000000010d1925313d48545f6b76818c96a1aba59a90877e766e68635f5c5a5a5a5b5d5f63686e757d868f99a3a79d92877c7065594e42362a1e11050000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00000000000000000000020c17212b353e48515a626a727980868c9195989b9d9e9f9f9f9e9c9a97948f8a857e776f675e554c42382e23190e030000000000000000000000000000040c131a21282d33383d4145484b4d4f515252535252514f4d4b4844403b36312b241d160e06000000000000000000000000000000000000000000000000000000000005101b252f373e4346464646464646433f382f261c110600000000000000000000000000000000000009131c252c32373939393939393939393937322c251c130900000000000000000000000000000000000000000000000000000000000000000009131c252c32373939393939393939393937322c251c13090000000000000000040c141c232a30353a3e4245484a4b4c4c4d4c4c4a494643403c37312b251e160e0500000000000000000000000000000000000000030d161f29323b43494d4d4d4d4d4d4d4d4d4a453e352b232d363e464b4d4d4d4d4d4d4d4d4c49433b31271d11060000050f1820272d31333434343434343433322e282119131b232a2f32343434343434343433302b251e150c02000000000000000000000000000000000000121e2b3844515e6b7784919a8d81736f6f6f685e6b7784919a8d81736f6f6f685e52463a2d2114070004101c2834404c5965717d837e7975706b6662606d7a86939f9285786c5f63676c71757a7e837a6d6155493d3125190d010013202c3946535f6c7986898989898989887b6f6255483c2f221509000000000000000000000000000000000000000000000000000000000d1a26323f4b57636f7b87939b90857a7168615b59585b60677079838e9994897d7165594c4034271b0f0200000000000000000000020b151e27313a444d57606a737c86919eaaa195887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000000000101c2936424f5b6874818d9aa6afa3978b8074695f57514e4d4d4e5053585d636a727a838d96978c817b87929da8a69b90867c7269615b55514e4d4d4e4f51555a60676f78828c969f9c9893877c7064584c4033271a0d0100101c2936424f5b6874818d9aa6afa3978b7f73685e56504e4d4e4f52555a60676e767f88928f8485929faba79a8e8174685b4f4c4e4f4c463f362c21160b00000007131f2b37434f5a66727d89949faaa89d92877d736a625b565351515254585d646c75808a95a0aca59a8f83776b5f53473b2f23160a00000006121e2a36414d5965707c87929da8a99e93897e756c645d57524f4e4d4d4e5053575d636b747d87919c9e9a978d82766a5e5246392d2014070000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d0000000000000000000000050f19232c363f48505860686f757b8085898c8f909292929291908e8b88847e79736c655d554c433a30261c120700000000000000000000000000000000010910161c22282d3135393c3f41434445464646454443413e3b3834302b251f19130c040000000000000000000000000000000000000000000000000000000000000009131d252d33373939393939393937332d261d140a00000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2a26211a130a01000000000000000000000000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2a27211b130a0100000000000000040d161e262e353b41464a4e525456585959595958575553504c48423d362f2820170f050000000000000000000000000000000000030c151f28313b444d55595a5a5a5a5a5a5a5a5650473d322c353f4850575a5a5a5a5a5a5a5a59544d43392e22170b00020d17212a32393d4040404040404040403e39332b221b252d353b3f40404040404040403f3c372f271e140b020000000000000000000000000000000000121f2c3845525f6b788592998c807c7c7c7a6e626b788592998c807c7c7c7a6e6255483b2f22150900000c1824303c4854616d7777726e69645f5b56616d7a87949f9286796c5f575b6065696e737774695d5145392d211509000013202c3946535f6c7986939696969695887b6f6255483c2f221509000000000000000000000000000000000000000000000000000000000a17232f3b47535f6b76828d98978d837a726c676565676b7179828b95998e83786c6055493c3024180c00000000000000000000010a141d273039434c565f69727c858f98a2a2988f857b6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515d6a7783909ca9aca094877b6f63584d464240404244474c52586068717a858f999388818c98a3aba0958a7e746a6057504945424140414245494e555d66707a859093908c89858174675b4e4134281b0e0100111e2b3744515d6a7783909ca9aca093877b6e63574c4541404143454a4f555c646d76808a948e8f97a2aea6998c8073665a4d404142403b352d241a10050000000a17232f3b47535f6b77838e9aa5aea2978b80756b6158504a47454445484c525a646e78848f9ba7ab9f94887c7063574b3f32261a0d0100000916222e3a46525e6a75818d98a4aea3978c81776c635a524b46434140414244474c5259626b75808a95918e8a87837a6e6154483b2e2115080000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00000000000000000000000007111a242d363e474e565d646a6f74797c808284858686858483817e7b77736e68625b534b433a31281e140a00000000000000000000000000000000000000050b11171c2125292c2f323436373839393938383634322f2c28241f1a140e08010000000000000000000000000000000000000000000000000000000000000000010b131b21272a2c2c2c2c2c2c2c2b27221c140b020000000000000000000000000000000000000000010910161a1e1f20202020202020201f1e1a161009010000000000000000000000000000000000000000000000000000000000000000000000010910161a1e1f20202020202020201f1e1b1610090100000000000000020c161f2830383f464c52575b5e616364656666666564625f5c58534e48413a322921170e04000000000000000000000000000000020b151e27313a434d565f65676767676767676661594e4337353e47515a626667676767676767655f554a3f33271b0e0008131e29333c444a4d4d4d4d4d4d4d4d4d4a453d342b232d373f464b4d4d4d4d4d4d4d4d4c48413930261d140a0100000000000000000000000000000000131f2c3946525f6c7986929b90898989887b6f626c7986929b90898989887b6f6255483c2f22150900000814202c3844505b656c6b67625d58544f55616e7b8894a09386796d60535054595d62676b6a62584d4135291d1105000013202c3946535f6c798693a0a3a3a295887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000000007131f2b37434e5a65707b86909a958c847d7874727274777c838b949b91877d72675b5044382c2014080000000000000000000009131c262f39424b555e68717b848e97a1a39990867d736a5f53473a2e2114080000000000000000000000000000000000000000000000000000000000000000000000000000121f2c3945525f6b7885929eabaa9e9185786b5f53473b35343435373b40474e565f69727d8892998f8b929da9a69b8f84786d62584e453e393534343436393d444b545e68737e8a8783807c79756f65594d4034271a0e0100121f2c3945525f6b7885929eabaa9e9185786b5f52463a35343436393e444b525b646e78828d989ba0a9b2a6998c7f7265594c3f3535332f2a231b1208000000010e1a26333f4b57636f7b87939faba99d91857a6f64594f463f3a3837383b4148525c67737e8a96a2a6a4988c8073675b4e4235291c100300000d1925323e4a56626e7a86929ea9a99d91867b70655b5148403a3634343435373b40475059636e79848985827e7a77736a5f53463a2d2114070000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d0000000000000000000000000008121b242c353d444b52595e64686d7073757778797979787674726f6b67625d575049413931281f160c02000000000000000000000000000000000000000000060b1015191d20232628292b2c2c2c2c2c2b292825231f1c18130e09030000000000000000000000000000000000000000000000000000000000000000000000010910161b1e202020202020201e1b17110a020000000000000000000000000000000000000000000000050a0e1113131313131313131313110e0a05000000000000000000000000000000000000000000000000000000000000000000000000000000050a0e1113131313131313131313110e0a050000000000000000000a141e28313a424a51585d62676a6d6f717273737372706e6c68645f59534b443b332920160c0100000000000000000000000000010a141d273039434c565f687173737373737373736b5f53473a3d475059626c737373737373737371675b4f43362a1d10000d1924303b454e55595a5a5a5a5a5a5a5a564f463d342a343f4951575a5a5a5a5a5a5a5a58534b42392f261c130a0000000000000000000000000000000013202c3946535f6c798693a099969695887b6f626c798693a099969695887b6f6255483c2f221509000004101c28343f4a535b5f5f5b56514c484855626f7b8895a094877a6d615447484d52565b5e5e5950473c3025190d01000013202c3946535f6c798693a0acafa295887b6f6255483c2f22150900000000000000000000000000000000000000000000000000000000030f1a26323d49545f6a747e88919a968f8984817e7e8083888e959b928980756b60554a3f33281c100400000000000000000008121b252e38414b545d67707a838d96a0a49a91877e746b61584d42372b1e1206000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986939faca99d9083766a5d5044372a2727282b2f353c444d57616b76818c989a979ba4aea2968a7e72675c51463c332d29272728292d3239424c57626e797e7a7774706d69655d53483d3124180c000013202c3946535f6c7986929facaa9d9083766a5d5044372a27272a2d32394049525c66717b87929da9b2b2a6998c7f7265594c3f322827241f1811090000000004111d2a36424f5b6773808c98a4b0a4988c8175695d52473d342e2b2b2c3036404b56626e7a86939a9a99988f83766a5d5144382b1f12050004101c2935424e5a66727e8b97a3aea4988c8175695e53493f362f2a282727282b2f363e47515c6874807c7975726e6b6762594e43372b1e12050000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d000000000000000000000000000009121a232b323a41474d53585c606466696a6b6c6c6c6b6a6866635f5b56514b453e372f271f160d0400000000000000000000000000000000000000000000000004090d101417191b1d1e1f1f201f1f1e1d1b191613100c0703000000000000000000000000000000000000000000000000000000000000000000000000000000050a0f1113131313131313120f0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111c26303a434c545c63696e73777a7c7e7f8080807e7d7b7874706a645d564d453b32281d1308000000000000000000000000000a131d262f39424b555e68717a818181818181817b6f6255483c464f59626b757e81818181818181776a5d5144372a1e1100101c2935414c576066676767676767676661584f453c333a45515b636767676767676767645d544b41382e251c120900000000000000000000000000000013202c3946535f6c798693a0a5a3a295887b6f626c798693a0a5a3a295887b6f6255483c2f2215090000000c17232d3841495053524f4a45413c4955626f7c8995a194887b6e6154483c41464a4f52514d473e352a1f140800000013202c3946535f6c798693a0acafa295887b6f6255483c2f22150900000000000000000000000000000000000000000000000000000000000a15212c37424d58626c767f8890989a94908d8c8c8d8f949999918981776d64594f44392e22170b00000000000000000007111a242d37404a535d666f79838c959fa49b92887e756c62594f463c31261a0e02000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c798693a0aca99c908376695d5043362a1d1a1c1f242a323b454f5964707b87929ea4a7adaa9e9286796d62564a3f342a221c1a1a1b1d2127303a45515d6871726e6b6764605d59544b42372c201408000013202c3946535f6c798693a0acaa9d908376695d5043362a1d1b1d21272f37404a545f6a75818c98a4b0b2a6998c7f7265594c3f32261a17130d0700000000000714202d3945525e6b7783909ca8ada194887c7064584c41362b231f1e1f242e3a46525e6a77838e8e8d8c8b8a85796c6053463a2d2013070007131f2c3845515d6a76828f9ba7aca094887c7064584d42372d241e1b1a1a1c1f242c35404b57636d73706c6965625e5b5750473c32261a0e020000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1d1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00000000000000000000000000000008111921282f363c42474c5054575a5c5e5f5f5f5f5e5d5b5956534f4b46403a342d251d150d040000000000000000000000000000000000000000000000000000000104070a0c0e1011121313131211100e0c0a07030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407080909090909080705010001050708090909090908070401000000000000000000000000000000000407080909090909080705010000000000000000000000000000000000000000000000000000020d18232e38424c555e666d747a7f8386898b8c8c8c8c8b8a8784817b766f675f574d44392f24190e03000000000000000000000009121c252f38414b545d67707a838c8d8d8d8d8d887b6f625548454e58616b747d878d8d8d8d8d8d84776a5d5144372a1e1100121f2c3845515d697273737373737373726a61574e453b3d4a56626d73737373737373736f665d534a40372e241b1208000000000000000000000000000013202c3946535f6c798693a0acafa295887b6f626c798693a0acafa295887b6f6255483c2f22150900000006111c262f383f444646433e3a353d4956636f7c8996a295887b6e6255483c353a3e434545413c352c23190e0300000013202c3946535f6c798693a0acaca295887b6f6255483c2f221509000000000000000000000000000000000000000000000000000000000004101b26313c46505a646d767e868d93989b9a9898999c98948e8780776e655c52483d32271c11060000000000000000071019232c363f49525c656f78828b959ea59c928980766c635a50473d342a20150900000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929facaa9d9084776a5d5144382b211c1917192029333d48535e6a76828e9aa6b2b3a79b8e8276695d5145392e2322222222222222222935414c57606565625e5b5854504d49423930251b0f04000013202c3946535f6c7986929facaa9d9084776a5d5144382b1f1a17161d252e38434d5964707b87939fabb2a6998c7f7265594c3f3226190c07020000000000000a16232f3c4855616e7a87939facaa9d9185786c6054483c3024191211131d2936424f5b6874818281807f7e7d7d796d6053473a2d201407000916222f3b4854606d7986929eaba99d9084786b5f53483c30252222222222222222232f3b46515b636664605d5956524f4b453e352b20150a000000101c2936434f5c697683909ca9aa9d9084776a5d5044372a1e1104000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d00000000000000000000000000000000070f161d242b31363b4044484b4d4f515252535252504f4d4a47433f3a352f29221b130c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070c0e1010101010100f0d09090d0f1010101010100e0b070a0e101010101010100d0a05000000000000000000000000000000000000070c11141515151515151514110d080d11141515151515151514110c0700000000000000000000000000070c11141515151515151514110d080100000000000000000000000000000000000000000000000008131e2a353f4a545e6770787f858b8f93959798999999989694918c87817971695f564b41362b1f14080000000000000000000008121b242e37414a535d666f79828c959a9a9a92887f756c6054474e57616a737c868f999a9a988e857b72685c5043362a1d100013202c3946535f6c79818181818181817c736a60574d443e4b5865717e81818181818181786f655c524940362d241a11080000000000000000000000000013202c3946535f6c798693a0acaca295887b6f626c798693a0acaca295887b6f6255483c2f221509000000000a141d262d3337393937322e303d4a5763707d8a96a095897c6f6255493c2f2e3336383835312b231a11070000000013202c3946535f6c798693a0a0a0a095887b6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000a141f2a343e48525b646c747b82878c8f919292918f8c88827c756d655c534a40362b21160b0000000000000000060f19222b353e48515b646e77818a949da69d938a80776d645b51483e352b22180e03000000000000000000000000000000000000000000000000000000000000000000000000000000121f2c3845525e6b7885919eabab9e9285796c6054483c322c2825232221212c37424e5965717d8a96a3afb1a4988b7f72665a4d41352e2e2e2e2e2e2e2e2e2e2e303a454e55595956524f4b4844413d3730271e140a010000121f2c3845525e6b7885919eabab9e9285796c6053473b312a262422212126313c48535f6b77838f9ca8b2a6998c7f7265594c3f3226190c00000000000000000c1825313e4b5764707d8996a2afa79a8e8275695c5044372b1f1308040e1a2733404c59657076757473727271706e675c5144382c1f1306000b1824313e4a5763707c8995a1aea69a8d8174685c4f43372e2e2e2e2e2e2e2e2e2e2e2e3540495157595754504d4946423f3a342c23190f05000000101c2936434f5c697683909ca9aa9e9184776b5e5145382b1f1205000714202d3a4753606d7a8794a0ada69a8d807366594d4033261a0d0000000000000000000000000000000000040c131920252b3034383c3e41434445464646454442403d3a37332e29241e17100902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060707070707070707050200000000000000000000060d13181b1d1d1d1d1d1d1c191515191c1d1d1d1d1d1d1b1713171a1c1d1d1d1d1d1c1a16110b030000000000000000000000000000020b12181d2022222222222222201d1913181d2022222222222222201d18120b03000000000000000000020b12181d2022222222222222201d19130c0400000000000000000000000000000000000000000000010d1824303b46515c667079828a91969b9c97949291919193959a9d98928b837b71675d52473c3025190d01000000000000000007111a242d364049525c656f78828b949ea59c928980766d635a4f4d566069737c858f98a1a2988f867c736960564b4034271b0f0013202c3946535f6c79868d8d8d8d8d8d857c72695f564d434b5865717e8a8d8d8d8d8d8a81776e645b52483f362c231a100700000000000000000000000013202c3946535f6c798693a0a0a0a095887b6f626c798693a0a0a0a095887b6f6255483c2f22150900000000020b141b22272b2d2c2a2724313e4a5764717d8a939393897c6f6356493d3023272a2c2b292520191108000000000013202c3946535f6c7986939393939393887b6f6255483c2f221509000000000000000000000000000000000000000000000000000000000000030e18222c364049525a626a70767b80838586868583807c77716a635b534a41382e241a0f0400000000000000050e18212b343d47505a636d768089939ca69e948b81786e655b52493f362c2319100600000000000000000000000000000000000000000000000000000000000000000000000000000000111e2a3744505d6a76838f9ca8ada195887c7064594e443d383432302f2e2d2d313d4955616e7a8793a0acafa296897c7063574a3e3b3b3b3b3b3b3b3b3b3b3b3b3b3b3c43494c4c4946423f3b3b3b3b38332d251c13090000111e2a3744505d6a76838f9ca8ada194887b6f63584d433b3633312f2e2d2d2d37434f5b6773808c99a5b2a6998c7f7265594c3f3226190c00000000000000000e1a2733404d5966727f8c98a5b1a5988c7f7266594d4034281b0f03000b1824303c48545e666968676766656463625d554b4034281c1004000d1a2633404c5965727e8b98a4b0a4978b7e7265594c403b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3f464b4c4b4844413d3b3b3b3a36302921170d030000101c2936434f5c697683909ca9ab9f9285796c5f53463a2d201408000714212e3a4754616d7a8794a0ada69a8d807366594d4033261a0d00000000000000000000000000000000000001080e141a1f24282c2f323436383939393938373533312e2b27221e18120c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070c10131414141414141414120f0a04000000000000000811181f2427292a2a2a2a2a2825202125282a2a2a2a2a2927231e2227292a2a2a2a2a2926221c150d04000000000000000000000000020c141c23292d2f2f2f2f2f2f2f2d29241e24292d2f2f2f2f2f2f2f2d29231d150c0300000000000000020c141c23292d2f2f2f2f2f2f2f2d29241e160d0400000000000000000000000000000000000000000005111d2935414c57636d78828b949b9d96908b888584848586898e949b9d958d83796f64584d41362a1e12060000000000000007101a232c363f48525b646e77818a949da69d938a81776d645b514c565f68727b858e97a1a29990867d736a61574e443a2f23170b00121f2c3845525e6a747d8790999a9a978e847b71685f554c4a56636e77818a949a9a9a938980766d645a51483e352c22191006000000000000000000000013202c3946535f6c7986939393939393887b6f626c7986939393939393887b6f6255483c2f2215090000000000020a11171b1e20201e1b25313e4b5764717e86868686867d7063574a3d30241b1d1f1f1d19140e0700000000000013202c3946535f6c7986868686868686867b6f6255483c2f2215090000000000000000000000000000000000000000000000000000000000000006111b242e37404850585f656b6f7376787979787673706b666059514941382f261c120800000000000000040d17202a333c464f59626c757f88929ba59e958c82786f665c534940362d241a110700000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2935424e5b6774808c99a5b1a4988c81756a60564f4944413e3d3b3a3a3a393946525f6b7885919eabada194877a6e61554848484848484848484848484848484848484848484848484848484847443f372e251a0f04000f1c2935424e5b6774808c99a5b0a4988c8074695f554d47423f3d3c3b3a3a39393f4b5864717d8a97a3b0a6998c7f7265594c3f3226190c00000000000000000f1c2835424e5b6874818e9aa7afa3968a7d7064574a3e3125180c00000814202c37424c545a5c5b5b5a5958575655524b43392e23180c00000f1b2835414e5b6774818d9aa6afa295897c6f63564a4848484848484848484848484848484848484848484848484848484846413b33291f14090000101c2936434f5c697683909ca9ada094877b6e6155493c3024170c000814212e3b4754616d7a8794a1aea69a8d807366594d4033261a0d000000000000000000000000000000000000000003090e13181c202325282a2b2c2c2c2c2b2a292725221e1b17120d070100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13181d2021212121212121201e1b160f08000000000007111a222a303436363636363635312c2c3135363636363636342f292e3336363636363635322d271f160d0300000000000000000000000a141e262e34393b3c3c3c3c3c3b39352f282f35393b3c3c3c3c3c3b39352e271e140a000000000000000a141e262e34393b3c3c3c3c3c3b39352f281f160c0100000000000000000000000000000000000000000915222e3a46515d69747f8a949d9d948b857f7b797777787a7d8289929b9f958b8075695e52463a2e221509000000000000060f19222c353e48515a646d768089939ca69d948b81786e655b524c555e68717a848d97a0a39a90877e746b61584f453c32281d120700111d2936424d58626b757e87919aa4a0968d847a71675e544b525c656f78828b949ea59b928980766c635a50473e342b22180f060000000000000000000013202c3946535f6c7986868686868686867b6f626c7986868686868686867b6f6255483c2f22150900000000000000060b0f121313111825313e4b576470797979797979786f63564a3d302317111212100d090300000000000000131f2c3946525f6b767979797979797979786d6155483b2f221508000000000000000000000000000000000000000000000000000000000000000009121c252e363e464d545a5f6367696b6c6c6b6a67645f5a554e473f372f261d140a00000000000000030c161f29323c454e58616b747e87919aa49f968c837970665d544a41372e241b12080000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a26333f4c5864707d8995a1aca99d92877c7268605a54504d4b4948474746464646505d6a7784909daaac9f9386796c60555555555555555555555555555555555555555555555555555555555554504940362c211509000d1a26333f4b5864707d8995a1aca89c91867b70675f58524f4c4a484747464646464956626f7c8996a2afa6998c7f7265594c3f3226190c0000000000000000101d2a3643505d6976838f9ca9aea195887b6f6255493c2f23160a0000040f1b26303a42494e4f4f4e4d4c4b4b4a4946413a31271d12070000101d293643505c6975828f9ca8ada094877a6e61555555555555555555555555555555555555555555555555555555555555524c453b31261b0f0300101c2936434f5c697683909ca9afa3968a7d7164584c4034281d120b0915222f3b4855616e7b8894a1aea6998c807366594d4033261a0d0000000000000000000000000000000000000000000003070c101316191b1d1e1f1f201f1f1e1c1a1815120f0a06010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161d24292c2e2e2e2e2e2e2e2d2b27211a1209000000030e19232c343b40434343434343413d36373d41434343434343403b34393f424343434343423e3931281f150a0000000000000000000006111c26303840454848484848484846413a313940454848484848484845403930261c1106000000000006111c26303840454848484848484846413a31281e130800000000000000000000000000000000000000000c1925313e4a56626e7a85919b9f958b8179736f6c6b6a6b6d71778089949f9d92867a6e62564a3d3125180c0000000000050f18212b343e47505a636c768089929ba59e958b82786f665c534b545e67707a838d969fa49a91887e756b62594f463d332a21160c01000d1925313c465059626c757e88929ba49f958c837970665d544a535d666f79828c959ea49b91887e756c625950463d342a21180e05000000000000000000131f2c3946525f6b767979797979797979786d616b767979797979797979786d6155483b2f221508000000000000000000030506060a16232f3c48535e686c6c6c6c6c6c6c675d52473a2e22150900000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c665c5145392d2014070000000000000000000000000000000000000000000000000000000000000000000a131c242c343c42494e53575a5d5e5f5f5f5d5b58544f49433c352e251d140b02000000000000000a151e28313b444e57616a737d879099a3a0978d847a71675e554b42382f251c1209000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1723303c4854606c7884909ba6aea3988e847a726b65605d5a585655545353535252525d697683909daaab9e9285786b616161616161616161616161616161616161616161616161616161616161605b52483d32261a0d000b1723303c4854606c7884909ba6ada2978d83797169635e5b5856555453535353525255626f7b8895a2afa6998c7f7265594c3f3226190c0000000000000000111e2b3844515e6a7784919daaada093877a6d6154473a2e21140800000009141e2831383e4243424140403f3e3d3c3a352f281f150b010000111e2b3744515d6a7784909daaaca09386796d616161616161616161616161616161616161616161616161616161616161615e574d42372b1f130700101c2936434f5c697683909ca9b2a5998d8174685c5045392e241c17161723303d4956636f7c8995a2afa6998c7f7266594c403326190d0000000000000000000000000000000000000000000000000004070a0c0f1012121313131211100e0c09060200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c161f282f35393a3a3a3a3a3a3a3a37322c241b110700000914202b353e464c4f50505050504d484141494e50505050504f4c453d444a4f50505050504e4a433a31261b10040000000000000000000b17222d38424a5155555555555555524b433a424b5155555555555555514b42382e23180d02000000000b17222d38424a5155555555555555524b433a2f24190e03000000000000000000000000000000000000000f1c2835414d5a66727e8a96a2998e83786f6863605e5d5e61666d77828d99a3978b7e7266594d4034271b0e00000000050e17212a333d465059626c757e88919ba49f958c837970665d544a545d667079838c959fa49b92897f766c635950473d342b21180f05000009141f2a343e47505a636d768089929ca59e958b82786f665c534b545d67707a838c969fa39a91877e746b62584f463c332a20170e040000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c665c646b6c6c6c6c6c6c6c6c6c665c5145392d2014070000000000000000000000000007131f2b37424d565c5f5f5f5f5f5f5f5c554c41362a1e1206000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5b544a4034291d1104000000000000000000000000000000000000000000000000000000000000000000010a121b222a31373d42474b4e5052525252504e4b47433e38322b231c130b020000000000000006111c26303a434d566069737c868f98a2a1988e857b72685f554c433930261d130a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202c3844505c68737e8a959fa9aa9f968c847d76716c69666463616160605f5f5f5f5e697683909daaab9e9184776e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6c645a4e4236291d10000714202c3844505c68737f8a959fa9a99e958b837b746f6a676563626160605f5f5f5f5f626f7b8895a2afa6998c7f7265594c3f3226190c0000000000000000121f2c3845525f6b7885929eabac9f9286796c5f5346392d201306000000020c161f262d323536353534333231302f2d2a241d160d03000000121f2b3845525e6b7885919eabac9f9286796e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e695f54483b2f22160900101c2936434f5c697683909ca9b5a99d9185786d61564b40362e2724232326323f4b5864717d8a97a4b0a5988b7e7265584b3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313a40454747474747474746433d362d23190e03000d1a25313c4750585c5d5d5d5d5d59524a4a535a5d5d5d5d5d5c574f464d565b5d5d5d5d5d5b554c43382d2115090000000000000000000f1b27333f4a545c616262626262615d554c414a545d616262626262615c544a3f34291e1307000000000f1b27333f4a545c616262626262615d554c41362b20140900000000000000000000000000000000000000111e2b3744505d6975828e969795897d71675d5753515152555b66717d8995a29a8e8175685b4f4236291c10000000040d172029333c454f58626b747e87919aa3a0968d837a71675e544b535c666f78828b959ea59c928980766d645a51473e352b22190f06000000030e18222c353e48515b646d77808a939ca69d948b81786e655b524b555e68717a848d97a0a39990877d746a61584e453c322920160d04000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5b545a5f5f5f5f5f5f5f5f5f5f5b544a4034291d110400000000000000000000000000030f1a26303b444b5053535353535353504b433a2f25190e02000000000000000000000000000a16212c3740484f52535353535353535352504a42382e23180c0000000000000000000000000000000000000000000000000000000000000000000000000911181f262c32373b3f41444546464544423f3b37322d272019120a0100000000000000000b17222d38424c555f68727b858e98a1a2988f867c736960564d433a31271e140b01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c28343f4b57626d78838d97a0a9a89f968e88827d797573716f6e6d6d6d6c6c6c6b6b6b7683909daaab9e91847b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b766a5e5144372b1e110004101c2834404b57626d78838e97a1aaa69d958d86807b777472706f6e6d6d6c6c6c6b6b6b6f7b8895a2afa6998c7f7265594c3f3226190c0000000000000000131f2c3946525f6c7986929facab9f9285786b5f5245392c1f120600000000040d151c212628292928272625242423211e19130c0400000000131f2c3946525f6c7985929facac9f92857b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a7063574a3d3124170a00101c2936434f5c697683909ca9b6ada195897e72675c52484038333130303136424e5b6773808c99a5b0a3978a7d7064574a3e3124180b00000000000001060a0c0e0e0e0e0e0e0e0d0c09040004080b0d0e0e0e0e0e0e0e0d0a070200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1925303a434b5154545454545454534f483f352a1f140800111d2a36424e5962686969696969645c51525c6569696969696861584d555f676969696969665f54493d3125190d000000000000000000121e2b3743505b666d6f6f6f6f6f6e675d5247505c666e6f6f6f6f6f6d665c51463b2f24180d01000000121e2b3743505b666d6f6f6f6f6f6e675d52473c31251a0e03000000000000000000000000000000000000131f2c3946525f6b788588898a8c85786c60554c474544454955616d7a8693a09c9083766a5d5043372a1d100000030c161f29323b454e57616a747d879099a3a0978e847b71685f554c525c656e78818a949da69d938a80776d645b52483f352c23191007000000000006101a232c363f49525b656e77818a949da69d938a81776d645b514c565f68727b858e97a1a2998f867c736a60574e443b32281f160c030000000000000a16212c3740484f52535353535353535352504a4f52535353535353535352504a42382e23180c00000000000000000000000000000009141f29323a404446464646464646443f3931281e1308000000000000000000000000000005101a252e373e4346464646464646464646433f3830261c120700000000000000000000000000000000000000000000000000000000000000000000000000060e141b21262b2f323537383939383735332f2b27211c150f07000000000000000000000f1b27333f4a545e67717a848d97a0a39990877d736a61574e443b31281f150c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232f3a45515c66717b858e979ea6a8a099938d898582807d7c7b7a79797979797878787783909daaac9f93898888888888888888888888888888888888888888888888888888888888888884776b5e5144382b1e1100000b17232f3a46515c67717c858f98a0a7a79f97918b8783817e7c7b7a7a79797979787878777b8895a2afa6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0acab9e9285786b5e5145382b1e12050000000000030a1016191c1c1c1b1a191918171614120d0801000000000013202c3946535f6c7986939facaca0948a88888888888888888888888888888888888888888888888888888888888888887d7164574a3e3124170b00101c2936434f5c697683909ca9b1a8a29a8f84796e645a524a44403d3c3d3e4148535e6a77838f9ca8aea195887b6f6256493c3023160a0000000000050c1216191a1a1a1a1a1a1a1a1815100a0f14181a1a1a1a1a1a1a1a1917120d0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2a36414c555d606161616161615f5a51473c3024180c00131f2c3945525e6a7476767676766d625656636e767676767673695d515a667176767676767165594d4135291c1004000000000000000013202c3946525f6c787b7b7b7b7b796f64594d53606d787b7b7b7b7b786d62574c4035291e120600000013202c3946525f6c787b7b7b7b7b796f64594d42362b1f1308000000000000000000000000000000000000131f2c3946525f6b767a7b7c7d7e8076695d50443a38373945525f6b7885929f9d9184776a5d5144372a1e1100000a151e28313b444d576069737c868f99a2a1988e857c72695f564d525b646e77818a939da69d948a81786e655c524940362d231a11070000000000000008111a242d374049535c656f78828b949ea59c928980766d635a514d566069727c858f98a1a1988f857c726960564d443a31281e150b02000000000005101a252e373e4346464646464646464646433f4346464646464646464646433f3830261c1207000000000000000000000000000000020d1720282f34383939393939393938342e271f160c0100000000000000000000000000000009131c252c32373939393939393939393937332d261e140b000000000000000000000000000000000000000000000000000000000000000000000000000000030910151a1f2326282a2c2c2c2c2b2926231f1b16100a040000000000000000000000111e2a37434f5b667079838c969fa09a91877e746b61584e453c32291f160c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121e29343f4a555f69737c858d949ba1a6a49e9995918e8c8a89888786868686858585858485919daab0a59b959595959595959595959595959595959595959595959595959595959595959184776b5e5144382b1e11000007121e2934404a55606a737d868e959ca2a7a29c9793908d8b898887878686868685858584848a96a2afa6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0acab9e9285786b5e5145382b1e120500000000000000050a0d0f100f0e0e0d0c0b0a090805010000000000000013202c3946535f6c798693a0acb0a59c96959595959595959595959595959595959595959595959595959595959595958a7d7164574a3e3124170b00101c2936434f5c697683909ca9aa9f9692958a80766c645c55504c4a494a4b4d525a646f7b87939fabab9f9286796d6054473a2e211508000000000710171d2225272727272727272725211b151a2024272727272727272726231e18110900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3a47525e676d6d6d6d6d6d6d6b63584d4034281b0f0013202c3946535f6c79838383837e7266595764717d83838383796d61555b6875828383838276695d5145392c2014080000000000000000131f2c3945525e6a75808888888880756a5e53535f6b7681888888887f73685d51463a2f23170b000000131f2c3945525e6a75808888888880756a5e53473c3024180c000000000000000000000000000000000000111e2a37434f5a646b6d6e7071727370665a4e413c3c3d3f45525f6b7885929f9d9084776a5d5044372a1e110006111c27303a434d565f69727b858e98a1a2998f867c736a60574d515a646d768089939ca59e958b82786f665c534a40372e241b110800000000000000000008121b242e37414a535d666f79828c959fa49b92887f756c6359504e57606a737c869099a2a1978e857b72685f564c433a30271d140b01000000000009131c252c3237393939393939393939393733373939393939393939393937332d261e140b0000000000000000000000000000000000050e161d23282b2c2c2c2c2c2c2c2b28231d150d0400000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2b27221c140c020000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0e1316191c1e1f1f201f1e1c1a17130f0a0500000000000000000000000000121f2c3845525f6b78828b9393939392887e756c62594f463d332a20170d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c18232e38434d57616a737b82898f959a9ea2a5a19e9b99979694949393939292929291919197a2adb7ada6a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a29e9184776a5d5144372a1e110000010d18232e39434e58616b737c838a91969b9fa3a39f9c999796959493939392929292929191939ba6b2a6998c7f7265594c3f3226190c000000000000000013202c3946535f6c798693a0acab9e9285786b5e5145382b1e1205000000000000060c1013151514131211100f0e0d0b08040000000000000013202c3946535f6c798693a0acb7aea6a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2978a7d7164574a3e3124170b00101c2936434f5c697683909ca9a69a8d868d92887e756d66605c5857565657595d636c76818c97a3afa89c8f83766a5e5145382c1f130600000007101922282e323434343434343433312d261f252c303334343434343434322f29231b1208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d4956636f797a7a7a7a7a7a75695c504336291d1000121f2b3844515e6a778490908e8275695d56626f7c899090897d7165595a6673808c909086796d6155493c3024180c0000000000000000111d2a36424e59646e79848f9592867b6f64584f5a646f7a8590959085796e62574b3f33271b0f030000111d2a36424e59646e79848f9592867b6f64584c4035291d100400000000000000000000000000000000000e1a26323e48525a5f616263646567655e5449484848494b4f56626e7a8793a09b8f8275695c4f4336291d10000b17232e38424c555f68717b848e97a0a39990877d746a61574e505a636c767f89929ba59e958c837970665d544a41382e251b1209000000000000000000000009121c252f38414b545d67707a838c969fa49a91887e756b62584f4e58616b747d87909aa3a0978d847a71685e554c42392f261d13090000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2b272a2c2c2c2c2c2c2c2c2c2c2b27221c140c02000000000000000000000000000000000000040c12181c1f202020202020201e1c17120b03000000000000000000000000000000000000010910161a1e1f2020202020202020201e1b17110a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060a0d0f111213131211100d0a0703000000000000000000000000000000121f2c3845525f6b788586868686868680766d635a50473d342b21180e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c27313b454f58616970787e84898e9295989b9d9fa0a1a2a1a0a0a0a09f9f9f9e9e9e9ea2a9b3b3a9a09b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9ba0a9aeaa9d9083776a5d5044372a1d1100000007121d27323c464f59616a727980858a8f9396999c9e9fa1a2a1a1a0a0a09f9f9f9e9e9e9e9fa5adb2a6998c7f7265594c3f3226190c0000000000000000131f2c3946525f6c7986929facab9e9285786b5f5245382c1f120500000000020a11171c20212221201f1e1d1c1b1a1814100a03000000000013202c3946525f6c7986929facb4aaa19c9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9ea5aeaea3968a7d7063574a3d3024170a00101d2a3643505c697683909ca9a5988c7f869191888078716c68656363636466696e757e88929da9afa3988c8073675b4e4236291d10040000030e19222b333a3e41414141414141403d38312930373c40414141414141413f3b342d241a10050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d87878787878376695d5043362a1d1000101d2a3643505c6975828f9c9285796d6155616e7a8794998d8175685c5865727e8b9895897d7165584c4034281b0f03000000000000000e1a26313d47525d68737e8995978c8175695d51535d68737e8a95968a7f73675c5044372b1f130700000e1a26313d47525d68737e8995978c8175695d5145392d21140800000000000000000000000000000000000a16212c3740484f5354555657595a5953535555555556585b6068737e8a96a2978b7f73665a4d4134281b0f000f1b28333f4a545e67717a838d96a0a49a91877e746b62584f4f59626b757e88919ba49f968c837a70675e544b42382f261c1309000000000000000000000000000a131d262f39424c555e68717a848d97a0a39990877d746a61584e4f59626b757e88919aa49f968c837a70675e544b42382f251b10040000000000010910161a1e1f2020202020202020201e1b1e1f2020202020202020201e1b17110a02000000000000000000000000000000000000000001070c101213131313131313120f0b0600000000000000000000000000000000000000000000050a0e1113131313131313131313120f0b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2b3845515e6a7679797979797979776d645b51483e352b22190f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151f29333d464f575f666d73787d8286898c8e91929495959696969797979798989898999da6b0aea2978f8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8f97a2aea99c8f8376695c504336291d10000000000b15202a343d474f5860676e747a7e83878a8d8f919394959696969697979797989898989aa1aab2a6998c7f7265594c3f3226190c0000000000000000121f2c3845525f6b7885929eabac9f9285796c5f5246392c1f1306000000010b141c22282c2e2e2d2c2c2b2a29282724201b140d0400000000121f2c3845525f6b7885929eabafa398908e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e939da8afa296897c6f6356493c3023160900101d2a3643505d697683909daaa5988b7e808a95918a837d787472706f707172757a8087909aa4afa99e93877b6f63574b3f32261a0d0100000915202b343d454a4d4d4d4d4d4d4d4d49433b313942484c4d4d4d4d4d4d4d4b463f362c22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8a949494908376695d5043362a1d10000f1b2835414e5b6774818d9a95897d7165585f6c7985929d9185786c605763707d8996998d8175685c5044382b1f1307000000000000000915202b36404b56616d78848f9b9185796d61554c57626d7984909b9084786c6054473b2f23160a00000915202b36404b56616d78848f9b9185796d6155493d3024180b000000000000000000000000000000000005101a252e373e434647484a4b4c4d4e575f626262626364676b727a858f9b9c91867b6f63574a3e3225190c00121e2b3744505c667079838c959fa49b92887f756c6259504a56616b747e87909aa3a0978d847a71685e554c423930261d140a0100000000000000000000000000010b141d27303a434c565f68727b858e97a1a2998f867c736a60574e5059636c757f88929ba49e958c837970665d544a41372c21150900000000000000050a0e1113131313131313131313120f1113131313131313131313120f0b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d2936424e59646b6c6c6c6c6c6c6c6b655b52493f362c231910070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e18212b343d454d545b62676d7176797d80828486878889898a8a8a8a8a8a8b8b8b8b8c949fabac9f928681818181818181818181818181818181818181818181818186929faca89b8e8275685b4f4235291c0f00000000040e18222b353d464e555c63696e73777a7d80828486878889898a8a8a8a8a8b8b8b8b8c8f98a4b0a6998c7f7265594c3f3226190c0000000000000000111e2b3744515e6a7784909daaaca09386796d6053473a2d20140700000009131d262d34383b3b3a39383736353433312c261f160d03000000111e2b3844515e6a7784919daaada09387818181818181818181818181818181818181818181818181818c99a6aea194887b6e6255483b2f22150900101d2a3643505d697683909daaa4988b7e78838d97948e8984817e7d7c7d7d7f82858b9199a2acaca2988d82766a5f53473b2f23160a0000020e1a26313c464f565a5a5a5a5a5a5a59544d4339424b53595a5a5a5a5a5a5a5751483e33281c100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8a96a19d908376695d5043362a1d10000d1a2633404c5966727f8c98998d8174685c5e6a7784909d95887c706457626e7b88949d9185786c6054473b2f23170a00000000000000040f19242f3a45505b67737e8a96968a7d7165594d515c68737f8b9794887c7064574b3f3226190d0000040f19242f3a45505b67737e8a96968a7d7165594c4034271b0e02000000000000000000000000000000000009131c252c3237393a3c3d3e3f485460696f6f6f6f6f7173777d848d969c948a80756a5e52473a2e22160a0013202c3946535f6c78828b959ea69c928980766d635a50474c5966727d879099a2a1978e857b72685f564c433a30271e140b02000000000000000000000000000000020b151e28313a444d566069737c858f98a2a1988f857c72695f564c515a636d768089929ca59e948b82786f665c53483d32261a0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004090d101111111111110f0c080200000000000000000003090d10111111111111100d0803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a26313d48525a5f5f5f5f5f5f5f5f5f5a534940372d241a1107000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d151d242b333b434a50565c61656a6d70737577797a7b7c7c7d7d7d7d7d7d7e7e7e7e83909daaac9f93867974747474747474747474747474747474747474747474798693a0aca69a8d8073675a4d4134271b0e00000000030d151d242b343c444b51575d62676a6e71747678797a7b7c7c7d7d7d7d7d7e7e7e7e7e8895a2afa6998c7f7265594c3f3226190c0000000000000000101d2a3643505c6976828f9ca8ada194877a6e6154483b2e221508000005101b252f383f44474847464544434241403d3831281f150b000000101d2a3643505d6976838f9ca9ada094877a7474747474747474747474747474747474747474747474808d99a6aca093867a6d6054473a2e21140800111d2a3744505d6a7784909daaa4978b7e717b858e979994908d8b8a89898a8c8e92969ca3ababa39a90867b70655a4e42362b1f1306000005121e2a37424e586166676767676767655f554a3f49545d6567676767676767625a5044392d20140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8a96a39d908376695d5043362a1d10000c1825323e4b5764717d8a979d9184786c605c6976828f9c988c8074675b606d798693a094887c7064574b3f33271a0e020000000000000008121d28343f4a56626e7a86929a8d8175685c504b57636e7a8793988c8073675a4e4135281c0f03000008121d28343f4a56626e7a86929a8d8175685c4f43372a1d11040000000000000000000000000000000000010a131b21272b2d2e2f30313e4b5864717b7b7b7b7c7d8083888e9698928a82786e63594d42362a1e12060013202c3946535f6c7986939da7a1958a80776d645b5148404c596673808c98a2a79b8f857c726960564d443a31281e150c020000000000000000000000000000000000030c161f28323b444e57616a737d869099a2a1978e857b71685e5248515b646d77808a939da69d948a81786e655a4e4235291c10000000000001070b0e0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0e0b070100000000000000000000000000000000000000000000000001090f151a1d1e1e1e1e1e1e1c18130d0600000000000000070e14191c1e1e1e1e1e1e1c19140e070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915202b3640484e5253535353535353524f4941372e251b1208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151f272f353a3c3e3f454b5055595d616466696b6c6d6e6f6f7070707071717171717683909daaada094877a6e67676767676767676767676767676767676767676f7b8894a1aea4988b7e7265594c3f3326190d000000000b151f272f353a3c3e40464c51565a5e626567696b6c6e6f6f707070707171717171717b8895a2afa6998c7f7265594c3f3226190c00000000000000000f1c2835424e5b6874818d9aa7afa295897c6f6256493d3023170a00000a16212c37414a50545554535251504f4e4c49423a31271c110600000f1c2835424e5b6874818e9aa7aea195887b6e67676767676767676767676767676767676767676875828e9ba8aa9e9185786b5f5245392c1f130600111e2a3744515d6a7784909da9a4978a7d70737c858e969d9c9a9796969697989a9ea2a7aaa5a09991887e746a5f54493d32261a0e0200000714212d3a46535f6a7374747474747471675b4f424d59656f747474747474736c6155493c2f23160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8a96a39d908376695d5043362a1d10000a1723303d4956636f7c8995a194887c70635b6774818d9a9c9084776b5f5f6b7885919e988c8073675b4f43362a1e1206000000000000030e19242d363e45515d6976828e9b9184786b5f5246525e6a76838f9b8f8276695d5044372b1e110500030e19242d363e46515d6976828e9b9184786b5e5245392c201306000000000000000000000000000000000000010910161b1e20212225323e4b5865717e888888898a8c8f9493908c8780786f665c52473c31251a0e020013202c3946535f6c7986939fa9a094887f756c62594f46404c596673808c99a4a79b8e847a71675e544b42382f251c120900000000000000000000000000000000000000030d162029323c454e58616b747d87909aa3a0968d847a6e62554849525b656e78818a949da69d938a80766a5d5144372a1e1100000000060d12171a1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1a17120d0600000000000000000000000000000000000000000000020b131a2126292b2b2b2b2b2a28241f18100700000000000911192025292b2b2b2b2b2b2925201911090100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f1a242e363d43454646464646464646433e372f251c13090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121c2731394146494a4b4d4e4f50515254575a5c5e5f616262636363636364646465697683909daaaea295897c6f635b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b64717d8a96a3afa296897c7063574a3e3124180b00000006121c2731394146494a4b4d4e4f50515255585a5d5e606162626363636364646464656f7b8895a2afa6998c7f7265594c3f3226190c00000000000000000d1a2733404d5966727f8b98a4b0a3978a7d7164584b3f3226190d00020e1a26323e49535b6161605f5e5d5c5b5b59544c43392e22160a00000d1a2733404d5966727f8b98a4afa3968a7d70645b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5e6b7784909da9a89c8f8376695d5044372a1e110500111e2b3844515e6a7784919c9c9c96897d706a737c848b92979ca0a3a3a3a4a5a6a5a4a19e9a958e877f766c62584d42372c2115090000000815222e3b4854616e7b818181818181776a5d50444f5b68758181818181817d7063574a3d3024170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8a96a39d908376695d5043362a1d10000815222e3b4854616e7a8794a0988c8073675b66727f8c98a093877b6f635d6a7683909c9c9083776b5f53463a2e22160900000000000008141f2b353f484f545a66727e8b9893867a6d615450545a6773808c989185786c5f5246392c2013070008141f2b353f484f545a66727e8b9893867a6d6154473b2e2115080000000000000000000000000000000000000000050a0f1213141825323e4b5865717e8b959596979990898784817b756e665d544a40362b201409000013202c3946535f6c79848d97a0a59a91877e746b61584e454c5966737f88929ba4a0968c837970665d544a41372e241b120800000000000000000000000000000000000000040e17202a333c464f59626b757e88929ea89f95887b6f6255484049535c666f78828b97a3a59c9184776a5d5144372a1e110000000710171e2327292929292929292929292929292929292929292929292927231e1710070000000000000000000000000000000000000000040c141d252c32363738383838373430292219100600000008121b232b313537383838383735312b231b130b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121b242c323639393939393939393937332d251d130a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e39434b52565758595a5c5d5e5f5e59514f515354555556565657575757575d697683909daab0a4978b7e7265594e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e5a6773808c99a5aca093877a6e6155483b2f2216090000000b17232e39434b52565758595a5c5d5e5f5e59515052535455565656575757575757626f7b8895a2afa5998c7f7265594c3f3226190c00000000000000000c1825313e4a5763707c8995a2aea5998c8073675a4e4135291c100605111e2a36434f5a656d6e6d6c6b6a696867655e554a3f33261a0e01000c1825313e4a5763707c8995a2aea5988c8073675a4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e54616d7a86939faca6998d8174675b4e4235281c0f0300121f2c3845525e6b78859090909090897c6f626a727980868c90949698999a9a9a999795928e89837c756d645a51463c31261b10040000000915222f3c4855626f7b888e8e8e8e84776b5e51444f5c6975828e8e8e8e8a7d7164574b3e3124180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8a96a39d908376695d5043362a1d10000714202d3a46535f6c7986929f9c9083776b5f64717d8a97a3978b7e73665c6875828e9ba093877b6f63564a3e3226190d0100000000000c1824303c47515a606263707c899695887b6f62565b606264707d8a9693877a6d6154473b2e211508000c1824303c47515a606263707c899695887b6f6256493c2f2316090000000000000000000000000000000000000000060c1216191b1c25323e4b5865717e8b9898999a9a8d827f7b76706a645c544b42382e24190e030000121f2b3844515d68727b858e98a1a39990867d736a60574d4a57626d768089939ca59e958c82786f665c534940362d241a1107000000000000000000000000000000000000020b151e27313a444d57606a737d86919eaaa195887b6f6255483e48515a646d77818a96a3a79e9184776a5d5144372a1e11000006101922292f333536363636363636363636363636363636363636363635332f2922191006000000000000000000000000000000000000050e161e262f363d42444444444444403b342b22180d0200040f1a242d353c41444444444444413c352d251d140c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121a21262a2c2c2c2c2c2c2c2c2c2a27211b130b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28343f4a555d626465666768696b6c6a63594d4546474849494a4a4a4a4a4b515d6a7784909daab3a69a8d8175685c504441414141414141414141414146525e6a76838f9ba8a99d9084776b5e5246392d2014070000030f1c28343f4a555d626465666768696b6c6a63594d4546474849494a4a4a4a4a4b56636f7c8996a2afa5988c7e7265584c3f3225190c00000000000000000916222f3b4854616d7a86929faba89b8f82766a5d5145392d2116131214202d3946525f6b777b7a79787776757470675b4f4236291d1003000916222f3b4854616d7986929faba89b8f82766a5e5246414141414141414141414141414c5864707d8995a2aea3968a7d7165584c3f33261a0d010013202c3946535f6c79838383838383837b6e6260686f757b8084878a8c8d8d8e8d8c8b8886827d78726b635b52483f342a1f150a00000000091623303c4956626f7c89969a9a9285786b5e5245505d697683909a9a988b7e7165584b3e3225180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8a96a39d908376695d5043362a1d100005121f2b3845515e6b7784919d9f93877b6f62636f7c8995a29b8f83766a5e6773808d99a3978b7e72665a4e4235291d110500000000000e1b2834404d58636c6f6f6f7b8794968a7d706359646c6f6f6f7b889595887b6f6255493c2f221609000e1b2834404d58636c6f6f6f7b8894968a7d7063574a3d3124170a000000000000000000000000000000000000000810171e222627292a323e4b5865717e8b8b8b8c8e91948f8b87827b746b62594e44392e23170c000000101c2834404c566069737c868f98a2a2988f857c72695f564c515b646d77818a939da69d948b81786e655b52493f362c2319100600000000000000000000000000000000010a141d27303a434c565f69727c858f98a2a2988f857b6f62554847505a636c768089929ca79e958c82776a5d5144372a1e1100030e18222c343a3f42424242424242424242424242424242424242424242423f3a342c22180e0300000000000000000000000000000000070f172028303840484e5151515151504c463d34291e1307000915202b363f474d5151515151514d473f372f261e160e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f151a1e1f20202020202020201e1b16100901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2b3744505c676e7071737475767778756a5e5145393b3b3c3c3d3d3d3d3e46525f6b7885929eabb6a99d9185786c6155493e343434343434343434343f4b56626e7a86939faba5998d8174685c4f43362a1e1105000005121e2b3744505c676e7071737475767778756a5e51453a3b3c3c3d3d3d3d3e3e4b5864717d8a97a4b0a4988b7e7165584b3e3225180c00000000000000000713202c3945515e6a76838f9ba7ab9e9286796d6155493d3228221f1f2026313d4955616e7a8786868584838281776a5d5044372a1d1104000713202c3945515e6a76828f9ba7ab9e92867a6e62574b40363434343434343434343a45515c6874818d99a5ab9f93877a6e6255493c3024170b0000121f2c3945525e6a7476767676767676756b60565d646a6f74777b7d7e80818181807e7c7976716c676059514940362d23180e03000000000a1723303d4a5663707d8996a39f9285796c5f5246505d6a7784909da5988c7e7265594c3f3226190c00000000000000000000000000000000000000000000000000000004060808080808080808080808080808080808080808080808080808080a1723303d4a5663707d8a96a39d908376695d5043362a1d100003101d2a3643505c6976828f9ca3978b7e7266616e7a8794a09f92867a6e6265727e8b98a49b8f82766a5e5245392d2115080000000000101c2936434f5c69757b7b7b7b8794978b7e71645d69767b7b7b7b889496897c706356493d3023160a00101c2936434f5c69757b7b7b7b8794978a7e7164574b3e3125180b00000000000000000000000000000000000007111a22292e32343536383e4b5865717e7e7e7e7f81858a9097938d867d746a60554a3f34281c110500000c18242f3a444e57616a737d879099a3a1978e857b71685f554c525b656e78818b949ea69d938a80776d645b51483e352b22180f0600000000000000000000000000000009131c262f39424b555e68717b848e97a1a39990867d736a5f53474f59626b757e88929ba49f968c837970665b4f4236291d100009141f2a343e454b4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4b453e342a1f14090000000000000000000000000000000911192129323a424a525a5e5e5e5e5e5d574f463b2f24180c000e1a26323d4751595d5e5e5e5e5d5851494038302820170f0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0e11131313131313131313110f0a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c787d7e808182838485796c6053473b302f2f30303030313c4855616e7a8793a0acb9ada195897d71665b50453b332c292828292d333c46505c67737e8a96a3ada195897d7164584c4033271b0e0200000613202c3946535f6c787d7e808182838485796c6053473b2f2f303030303036424e5a6673808c99a5afa3968a7d7063574a3d3124170b000000000000000004111d2936424e5a67737f8b97a3aea295897d71655a4e443a322e2c2c2d3038424e5965717d8a939291908f8d8174685b4f4236291d10030004101d2935424e5a66727e8b97a2aea3978b7f73685d52483e352e2a2828282b3037414b56616d7985919da9a79b8f83776a5e5246392d2114080000111d2936424d5862686969696969696968635a4f52595e63686b6e70727374747373716f6d6965615b554e473f372e241b110700000000000a1724313d4a5764707d8a97a4a09386796c605346515e6a7784919ea6998c807366594c4033261a0d00000000000000000000000000000000000000000000000000060c1013141515151515151515151515151515151515151515151515151515151723303d4a5663707d8a96a39d908376695d5043362a1d1000000f1c2835424e5b6774818d9aa79b8e82766a606c7986929fa2968a7e716563707d8a96a39e92867a6e6155493d3124180c0000000000101c2936434f5c6976838888888b96988b7e71655d6a77848888888c96978a7d7063574a3d3024170a00101c2936434f5c6976838888888b96988b7e7165584b3e3225180b0000000000000000000000000000000000040f19232c343a3f41424344454955616b717171717375797e858e979890867c72675c5045392d211509000007131e28323c454e58616b747e87919aa4a0968d847a71675e544b535c666f78828c959ea59c928980766c635a50473d342a21180e050000000000000000000000000008121b252e38414b545d67707a838d96a0a49a91877e746b61584d4e58616b747e87919aa4a0978d847a71675e544a3e32261a0e000d1925313c4650575b5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5b5750463c3125190d00000000000000000000000000020a121a232b333b444c545c646a6b6b6b6b6961574c4034281b0f00111d2a36424e59636a6b6b6b6b69635b524a423a32292119110900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3945525e6b77848b8c8d8e9091887c6f63584c423c3937363637383c424d5964717d8996a2afbbb1a59a8e82776c61574d453d3835343436393e454e58626d78848f9ba7a89c9185796d6155483c3024170b00000006121f2c3945525e6b77848b8c8d8e9091887b6f63574b413b39373636373a3e47525e6a76828f9ba8ada094877b6e6255493c2f2316090000000000000000010d1a26323e4b57636f7b87939eaaa69a8e82766b60554c443e3a3938393c424a545f6a76818d999f9e9d968a7d7165584c4033271a0e0100010d1926323e4a56626e7a86929da9a79b9085796e64595047403a36343435373b4149535d68737e8a95a1ada2968b7e73675a4e42362a1d110500000d1925313c4650575c5c5c6063636363625e574d474d53575b5f62646566676767666563605d5955504a443d352d251c12090000000000000b1825313e4b5764717e8b97a4a093877a6d605347515e6b7885919ea69a8d8073675a4d4034271a0d0100000000000000000000000000000000000000000000020a11171c1f212121212121212121212121212121212121212121212121212121212123303d4a5663707d8a96a39d908376695d5043362a1d1000000d1a2733404d5966737f8c99a59e92867a6d616b7784919da69a8e827569626f7b8895a1a2968a7d7165594d4134281c100400000000101c2936434f5c697683909595969d988c7e72655d6a7784909595979e978a7d7164574a3e3124170b00101c2936434f5c697683909595969d988c7e7265584c3f3225190c00000000000000000000000000000000000a16212b353e454b4e4f505152535459616565656566696d747c85909b988e84786d6155493d3125180c0000010c16202a333d464f59626c757f88929ba59f968c83796f665d534a545d677079838c969fa49b92887e756c62594f463c332a20170d04000000000000000000000007111a242d37404a535d666f79838c959fa59b92887f756c62594f4d57606a737d869099a3a1978e857b72685f554c42382d22160a00111d2936424d5862686969696969696969696969696969696969696969696862584d4236291d11000000000000000000000000030c141c242c353d454d565e666e767777777773685c5043362a1d1000131f2c3945525e6b7577777777756d645c544c443b332b231a120a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a36434f5c6875818d999a9b9c988c8074685e544c48464443434345484d545e6975818d99a5b2bcb6aa9f94887d73695f574f49444241414245494f576069747e8a95a0aca3978c8074685c5044382c20140800000004111d2a36434f5c6875818d999a9b9c988b8073685d534c484544434344464a5059636f7a86929eabaa9d9185786c5f53463a2d2114080000000000000000000a16222e3a46525e6a76828d99a4aa9e93887c72675e554f4a47454546484d535c66707b87929eaaa99d9185796d6155493d3024170b0000000916222e3a46525e6975818c98a3aca1968b80756b6259514b464341414244474c535b656f79848f9ba6a89d91867a6e62564a3e32261a0e0100000914202a353e464c4f57626b6f6f6f6f6f695f534742474b4f5255585d63676b6e6f6f6e6c68635d564e453c32281e130a000000000000000c1825323f4b5865717e8b98a5a194877a6e615447525f6c7885929fa79a8e8174675b4e4134281b0e01000000000000000000000000000000000000000000020b141c23282c2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e303d4a5663707d8a96a39d908376695d5043362a1d1000000c1825323e4b5864717e8a97a4a2968a7d71656976828f9ca89e9185796d606d7a8693a0a69a8e8175695d5044382c20140700000000101c2936434f5c697683909ca2a3a5988c7e72655d6a7784909da2a3a4978a7d7164574a3e3124170b00101c2936434f5c697683909ca2a3a5988c7e7265584c3f3225190c00000000000000000000000000000000030f1b27323d4750575a5b5d5e5f60615e5758585858595c626a737e8a96a095897d7265594d4034281b0f020000050e18212b343d47505a636d768089939ca69e958b82786f655c524b555e67717a848d97a0a49a91877e746b61584e453c32291f160c03000000000000000000071019232c363f49525c656f78828b959ea69c938980766d635a504c565f69727c858f98a2a2988f867c736960564d433a31261c110500121f2c3845525e6a73757575757575757575757575757575757575757575736a5e5245382c1f120000000000000000000000050d151e262e363e474f575f6770788084848484776a5d5044372a1d110013202c3946535f6c79848484847e766e665e554d453d352c241c140c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1b2734404c5965717d8995a1a8a89c91857a6f665e585552515050505154585e66707b86929da9b4afaeb0a59a8f857b7168615a54514e4d4e4f51555a6169727b86909ba6a79c91867b6f63584c4034281c1004000000010e1b2734404c5965717d8995a1a8a89c9085796f655d5854525050505152565b626b75808b97a3afa5998d8175695c5044372b1e120500000000000000000006121e2a36424e5a65717c88939ea9a4998e83797067605a565352525355585e656e78828d98a3aea3988c8175695d5145392d21140800000006121e2a35414d5964707b87929da7a79c92877d746b635c56524f4e4d4e5053585e656d76818b96a1aca2978c8075695d52463a2e22160a000000030e19232c343b404d5a66737c7c7c7c7b6f63564a3e444a50575d63696e73777a7c7c7b78746e6860574e443a2f24190e030000000000000c1926323f4c5965727f8c98a5a195887b6e615548535f6c7986929fa89b8e8275685b4e4235281b0f020000000000000000000000000000000000000000000a141d262d34383a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3d4a5663707d8a96a39d908376695d5043362a1d1000000a1723303d4956636f7c8995a2a69a8d8175696774818e9aa7a195897d70646b7885929eaa9d9185796d6054483c3023170b00000000101c2936434f5c697683909ca9afa5988c7e72655d6a7784909daaafa4978a7d7164574a3e3124170b00101c2936434f5c697683909ca9afa5988c7e7265584c3f3225190c0000000000000000000000000000000006131f2b37434e59626768696a6b6d6d6960554b4b4b4d5158626d7986929f9a8e8275695c5043362a1d1104000000060f19222b353e48515b646d77818a949da69d948a81776e645b514c555f68727b858e97a1a39990867d736a60574e443b31281e150c0200000000000000060f19222b353e48515b646e77818a949da69d948a81776d645b514c555e68717b848e97a1a39990867d736a61574e443b31281f150a000013202c3946535f6c79828282828282828282828282828282828282828282796c5f5346392c201300000000000000000000060f171f2730384048505961697179828a9191897e74695c5043362a1d1000131f2c3946525f6b76818b919189807870675f574f473e362e261e150d050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824303d4955616d7985909ba7ada2968c81786f6964615f5d5d5c5d5e6064697078828c97a3aea9a3a2a5aca1978d837a726b65605d5b5a5b5c5e61666c737b848d97a2aba0968b8075695e53473b2f24180c00000000000b1824303d4955616d7985909ca7ada1968b81776f6864605e5d5d5d5d5f62666c747d87919ca8aba094897d7165594d4034281c0f03000000000000000000020e1a26313d4954606b76828c97a2aaa0958b8279726b6662605f5f5f6164697077808a949ea9a79c92877b7064584d4135291d1104000000010d1925313c48535f6a75808b96a0aaa3998f867d756d67625e5c5b5a5b5d5f63696f778089929da7a59b90857a6f64584d4135291e12060000000007111a222933404c5966727f8989897e7266594e4a4f555c62686e747a7f8487898988858079726960564c41362b1f14080000000000000d1a2633404d596673808c99a6a295887c6f62554953606d798693a0a89c8f8275695c4f4236291c0f03000000000000000000000000000000000000000005111b262f383f4447484848484848484848484848484848484848484848484848484848484848484a5663707d8a96a39d908376695d5043362a1d1000000915222f3b4855616e7b8794a1aa9d9185796c6673808c99a5a5998d8174686a7783909da9a195897c7064584c3f33271b0f03000000101c2936434f5c697683909ca9aca5988c7e72655d6a7784909daaaca4978a7d7164574a3e3124170b00101c2936434f5c697683909ca9aca5988c7e7265584c3f3225190c000000000000000000000000000000000815212e3b4753606b7375767778797a7165594c3f3f4046515e6a7784909d9d9184776b5e5145382b1f120500000000071019232c363f49525c656e78818b949ea69c938980766d635a504d566069737c868f98a2a2988f857c736960564d433a30271e140b010000000000050e18212b343d47505a636d768089939ca69e948b81786e655c524b545d67707a838d96a0a39a91877e746b61584e453c32291f160d03000013202c3946535f6c79868f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f86796c5f5346392c201300000000000000000008101821293139414a525a626b737b838b94958b81776d63584c4034281b0f00111e2a37434f5a646f79838d97928a8279716961595048403830271f170f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814202d3945515c68737f8a959fa9a89d938a817a75706d6b6a69696a6b6d70747a828a949ea9a99f97959aa3a99f958d847d76716d6a686767686a6d72777d858d969fa9a2998f84796f63584d42362a1f130700000000000814202d3945515c68747f8a95a0aaa79d9389817a74706d6b6a69696a6c6e72777e868f99a3aea4998e83786c6055493d3024180c00000000000000000000000915212c38434f5a65707b86909aa4a79d948b837c77726f6d6c6b6c6e71757a8189929ca6a99f958b80756a5f53483c3024180c00000000000814202b37424d59646f79848e98a1aba1988f877f78736e6b68676768696c6f747a8189929ba4a79d94897e74695e53473c3025190d01000000000008101825323e4b5864717d8a968e82766a5f57575b61676d737980858b9094969694918b847b72685d52473c3025190d0100000000000e1a2734404d5a6773818d9aa6a396897c6f63564954616d7a8794a0a99c908376695c504336291d100300000000000000000000000000000000000000000b16222d38414a505454545454545454545454545454545454545454545454545454545454545454545663707d8a96a39d908376695d5043362a1d1000000714202d3a4653606c7986929faca195897c7064717e8a97a4a99c9084786c6875828e9ba8a5998c8074685c4f43372b1f1206000000101c2936434f5c697683909ca0a0a0988c7e72655d6a7784909da0a0a0978a7d7164574a3e3124170b00101c2936434f5c697683909ca0a0a0988c7e7265584c3f3225190c000000000000000000000000000000000915222f3c4855626f7b82838485868074675b4f443f3f44515d6a7784909d9f9285786b5f5245382c1f1205000000000007111a242d37404a535c666f79828c959fa59b92887f756c62594f4e57616a737d869099a3a1978e857b72685f554c423930261d130800000000040d17202a333d464f59626c757f88929ba59f958c83796f665d534a535d666f79838c959fa49b92887e756c62594f463c332a20170d0400000013202c3946535f6c7986939c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9386796c5f5346392c201300000000000000010a121a222a333b434b535c646c747c858d95988e84796f655b51463b3024180c000e1a26323e48535d67717b86909a948b837b736b625a524a41393129211810080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404c57626e78838d97a1a9a59c938c85817d7a787776767677797c80868c949da6aaa1978d88919aa3a89f968f88827d797675747475777a7d82888f979fa8a39a90877d72685d52473c30251a0e02000000000004101c2834404c57636e79848e98a1aaa59b938b85807c797877767677787a7e83899098a1aba69c92887d72675b5044382c201408000000000000000000000004101b27323d49545e69747e88929ba4a69d958e88837e7b797878797a7d81868c939ba4a8a0978d83796e64594d42372b1f14080000000000030f1a26313c47525d67727c868f99a1a9a199918a847e7a777574747576787b80858c939ba4a79e958c82776d62574c41362b1f1408000000000000000a1723303c4956626f7b889492877b71686463666c72787e858b91969ca0a2a2a19c968d84796f64584d41352a1e120600000000000e1b2834414e5b6774818e9aa7a3968a7d7063574a54616e7b8894a1aa9d9083776a5d5044372a1d110400000000000000000000000000000000000000000f1b27333e49535b6061616161616161616161616161616161616161616161616161616161616161616163707d8a96a39d908376695d5043362a1d10000006121f2b3845515e6b7784919daaa5998c8074686f7c8996a2aca094887b6f6773808d99a6a99c9084786b5f53473b2f22160a000000101c2936434f5c6976839093939393938c7e72655d6a77849093939393938a7d7164574a3e3124170b00101c2936434f5c6976839093939393938c7e7265584c3f3225190c000000000000000000000000000000000815212e3b4754606d79868f91928f83776b60564f4c4c4e55606c7885919e9e9285786b5f5245382c1f120500000000000008121b252e38414a545d67707a838d96a0a49a91877e746b61584e4e58616b747e87919aa3a0978d847a71675e544b42382f251a0f040000030c161f29323c454e58616b747e87919aa4a0968d837a70675d544a525c656f78828b959ea59c928980766c635a50473d342b21180e050000000013202c3946535f6c798693a0a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a09386796c5f5346392c2013000000000000030b131b242c343c454d555d656e767e868f979a90867c72675d53493f352a1f1408000a16212c37414b555f69747e88929c958d857c746c645c534b433b332a221a120a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232f3a46515c67717c858f979fa6a59d97918d898785848383838486898c91979ea6a8a0988f857e889199a1a8a099938d8985838181818284868a8e949aa1a8a19991887e756b61564b41362b1f1409000000000000000c18232f3b46515c67727c868f98a0a7a59d96918c8986848483838485878a8e949aa2aaa49c948a80766b61554a3f33281c10040000000000000000000000000a16212c37424d57626c768089929aa2a7a099938e8b888685858687898d91979ea5a69f978e857b71675d52473c31261a0f030000000000000914202b36414b56606a747d878f989fa6a39c958f8a8784828181818385888c91979da5a49d958c837970665b51463b3025190e03000000000000000815212e3a4753606c798592988d837a73707072777d838a90969ca2a4a1a0a0a2a59f968b8075695e52463a2e22160900000000000f1b2835424e5b6875828e9ba8a4978a7d7164574b55626f7b8895a2aa9e9184776a5e5144372b1e11050000000000000000000000000000000000000000111e2b37434f5b656d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e707d8a96a39d908376695d5043362a1d10000003111d2a3743505d6976838f9ca9a89c9084786b6e7b8794a1aca4988c807367727e8b98a5aca094887b6f63574b3e32261a0e010000101c2936434f5c697683868686868686867e72655d6a7784868686868686867d7164574a3e3124170b00101c2936434f5c697683868686868686867e7265584c3f3225190c0000000000000000000000000000000006131f2c3845515e6a76838f9b9e93887c7168605b59595a5e67717c8894a19d9084776a5e5144382b1e12050000000000000009131c262f38424b555e68717a848e97a0a39990877d736a60574d4f59626c757e88929ba49f968c837970665d544a41362b20140900000a151e28313b444e57616a737d879099a3a1978e847b71685e554b515b646e77818a949da69d938a80776d645a51483e352b22190f06000000000013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09386796c5f5346392c20130000000000020c151d252d363e464e575f676f77808890989d93897e746a60564b41372d23180e020005101a252f39434d58626c76808b959f978f867e766e655d554d453c342c241b130a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131e2935404b555f6a737c858d959ca1a7a29d9996939290909090919295989da2a8a39d968e867c767f878f979da3a49e9995928f8e8e8e8f9092969a9fa5a39d968f877e766c63594f443a2f24190e030000000000000007131e2a35404b55606a747d868e969ca2a7a19c98959391909090909194969a9fa5a6a09a928a81786e645a4f44392e22170b0000000000000000000000000004101b26313b46505a646d76808890979ea4a49f9b9795939292929496999da2a8a29b948d857c73695f554b40362b20140900000000000000030e19242f39444e58626b747d868d959ba2a6a09b9793908f8e8e8e8f9194989ca2a5a09a938b837a71675e54493f342a1f1308000000000000000006121f2b3844515d6976828e9a958c84807d7d7e83898f959ba1a39d9894939395999f9d91867a6e62564a3e3225190d00000000000f1c2936424f5c6875828f9ca8a4988b7e7165584b55626f7c8995a2ab9e9185786b5e5145382b1f1205000000000000000000000000000000000000000013202c3946525f6c777b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7d8a96a39d908376695d5043362a1d100000000f1c2835424e5b6874818e9aa0a0a094887b6f6c7986929fa0a09b8f83776b707d8a96a0a0a0988b7f73675b4e42362a1e11050000101c2936424f5c687479797979797979797970645c69747979797979797979796f63574a3d3124170a00101c2936424f5c68747979797979797979797064584b3e3225180c0000000000000000000000000000000004101d2936424e5a67737e8a96a1998e837a726b676565676a7078838e99a4998d8174685c4f4336291d100400000000000000010a141d263039434c565f69727b858e98a1a2988f857c72695f564c505a636c768089929ca59e958b82786f665c53483d3125190c0006111c26303a434d566069737c868f99a2a2988f857c72695f564c505a636d768089939ca69d948a81786e655b52483f362c2319100700000000000013202c3946535f6c79869393939393939393939393939393939393939386796c5f5346392c201300000000000a141e272f373f485058606871798189929a9f958b81776c62584e443a2f251b110700000009131d27313c46505a646e78838d97a198908880776f675f574e463e362d251c13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18232e39434e58616a737b838a90969b9fa2a5a2a09e9d9d9c9d9e9fa1a5a4a19d98928b847c746d757d858c92989da1a4a19e9c9b9a9a9b9d9fa2a4a09c97928b857d756c645a51473d33281d13080000000000000000020d18232e39444e58626b747c848b91979b9fa3a4a29f9e9d9c9c9d9ea0a3a6a39f9a958f8881786f665c52483d33281c1106000000000000000000000000000009141f29343e48525b646d767e868d93989da2a5a3a1a09f9f9fa0a2a5a4a09c97918a837b726a61574d43392f24190e03000000000000000008131d28323c465059626b747b838a90969b9fa3a39f9d9b9a9a9b9c9ea1a4a29e9a958f88817971685f554c42382d23180d02000000000000000003101c2835414d5a66727e8a969e96908c8a898b8f949aa0a49e97918c888686898d949c978b7e72665a4e4135291c100300000000101d2936434f5c6976838f9ca9a5988c7e7265594c5663707c8996a3ac9f9285786c5f5245392c1f1306000000000000000000000000000000000000000013202c3946535f6c798688888888888888888888888888888888888888888888888888888888888888888888888d98a49d908376695d5043362a1d100000000e1a2733404d596673808c93939393938b7f736b7784919393939393877a6e6f7b8893939393938f83776a5e52463a2d21140800000e1b2733404c57626a6c6c6c6c6c6c6c6c6c685f58626a6c6c6c6c6c6c6c6c6c675e53473b2e221609000e1b2733404c57626a6c6c6c6c6c6c6c6c6c685f54483c3023170a00000000000000000000000000000000010d1a26323e4a56626e79848f9a9f958c847c7774727273767b828b959f9e93887c7064584c4033271b0e020000000000000000020b141e27313a444d57606a737c868f99a0a0978e857b71685d5148515a646d77808a939da09d948b81786e64594d4134281b0f000b17222d38424c555f68727b858e98a1a29990867c736a60574d5059626c757f88929ba59e958b82786f665c534940362d241a11070000000000000013202c3946535f6c79868686868686868686868686868686868686868686796c5f5346392c20130000000006111c2630394149515a626a727a838b939ba2988d83796f655b50463c32281e130900000000010b15202a343e48525c67717b858f9aa29a928981797168605850483f372e241a0f04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27323c464f58616971787f858a8f9396999b9c9e9f9fa09f9f9e9c9a9895918c87817a726a636b737a81878c9195989b9d9e9fa09f9f9e9c9a9894908c86817a736b635a52483f352b21160c0100000000000000000007121d27323c465059626a727980868b8f9396999b9d9e9f9fa09f9e9d9b9996938f8a847d766f665d544a40362c21160b000000000000000000000000000000030d18222c364049525b646c747b82888d9195999b9d9e9fa09f9e9d9b9894908b857f78716960574e453c32271d1208000000000000000000010c16202a343e475059626a71787f858a8f93979a9c9d9f9fa09f9e9d9b9996928e89837d766f675f564d433a30261c1106000000000000000000000d1925313e4a56626e7985909ba19c989696989b9fa59f99928c86807c797a7d828a939b8f82766a5d5144382b1f120600000000111d2a3743505d6a7683909daaa6998c807366594d5763707d8a97a3ac9f9386796c5f5346392d201306000000000000000000000000000000000000000013202c3946535f6c79869394949494949494949494949494949494949494949494949494949494949494949494979fa99d908376695d5043362a1d100000000c1925323f4b5864717e8686868686868683776a7683868686868686867e726d7a86868686868686867a6e6255483c2f22160900000b17232f3b4650585e5f5f5f5f5f5f5f5f5f5d5650595e5f5f5f5f5f5f5f5f5f5c554c41362b1f1206000b17232f3b4650585e5f5f5f5f5f5f5f5f5f5d564d42372c20140700000000000000000000000000000000000a16222e3a46515d68737d88919a9e958e8883817f7e8082878c949d9e958c82766b6054483c3024180b00000000000000000000020c151f28323b454e57616a747d8790939393938d847a6d61544748525b656e78818b93939393938a8075695c4f4336291c10000f1b27333f4a545e67717a848d97a0a39a90877d746a61584e4e58616b747e87919aa49f968c837970665d544a41372e241b12080000000000000000131f2c3946525f6b76797979797979797979797979797979797979797979766b5f5246392c1f13000000000b17222e38424b535b636c747c848c959da49a90867c71675d53493f342a20160c020000000000030e18222c36414b555f69737d88929ca49b938b837a726a625a514940362c2015090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b15202a343d464f585f676e74797e8386898c8e9091929293929291908e8b8885807b756f68605961696f767b8185888c8e90919293929291908e8b8884807b756f686159514840362d23190f0500000000000000000000000b16202a343e47505860676e747a7f83878a8d8f90919292939292908f8d8a87837e78736c645d544b42382f241a0f050000000000000000000000000000000006101a242e374049525a626970767c8185898c8f909292939292908e8b8884807a746d665f574e453c332a20150b0100000000000000000000040e18222c353e4750585f676e74797e83878a8d8f919292939292908f8c8a86827d78726c645d554d443b31281e140a00000000000000000000000915212d3a45515d68737e89939da4a5a3a3a4a59f9a948e87817b756f6d6d7178818c979285796c6053473a2e21150800000000111e2b3744515d6a7784919daaa69a8d8173675a4d5764717d8a97a4aca093867a6d6053473a2d201407000000000000000000000000000000000000000013202c3946535f6c798693a0a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a3a8aa9d908376695d5043362a1d100000000a1724303d4a56636f787979797979797979756a73797979797979797979716b767979797979797979786e6155483c2f221609000007131e29343e464d52535353535353535353514b474e52535353535353535353504b433a30251a0e020007131e29343e464d52535353535353535353514b443b31261b0f03000000000000000000000000000000000006121d2935404b56616c767f8890979e9994908d8c8c8d8f92989e9b948c837a70655a4f43382c2014080000000000000000000000030d162029333c454f58626b757e868686868686867a6d6154474049535c666f78828686868686868376695c4f4336291c1000111e2a37434f5b667079838c969fa09b91887e756b62594f48545f6a737d879099a0a0968d847a71675e544b42382f251c1209000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b645a4f43372a1e11000000000f1b27333f4a545d656d757e868e969ea79d92887e746a5f554b41372d23180e040000000000000006101a242f39434d57616c76808a949fa59d958c847c746b635b52483d3125190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e18222b343d464e555c62686e72767a7d8082838485868686858483817e7c78746f6a645d564f575e646a7074797c7f828385868686858483817e7c78746f6a645d564f473f362e241b1107000000000000000000000000040e18222c353e464e565d63696e73777a7d8082848585868686858482807d7a77726d67615a534b423930261d130800000000000000000000000000000000000008121c252e37404850585f656b7075797d808284858686868584827f7c78736e69635c554d453c332a21180e0400000000000000000000000006101a232c353e464e555c62686e73777b7e81838485868686858482807d7a76716c67615a534b433b32291f160c02000000000000000000000005111d2935404c57626d77818a93999e9f9f9d99948f89837c767069646061666f7a869195887b6f6256493d3023170a00000000121e2b3845515e6b7784919ea0a09a8e8174675b4e5865717e8b98a0a0a094877a6d6154473b2e211408000000000000000000000000000000000000000013202c3946535f6c798693a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09d908376695d5043362a1d100000000915222e3a47525d676c6c6c6c6c6c6c6c6c6b63696c6c6c6c6c6c6c6c6c68646b6c6c6c6c6c6c6c6c6c665c5145392d2014070000020d18222c353c424546464646464646464644403c424546464646464646464644403931281e13080000020d18222c353c424546464646464646464644403a32291f140a000000000000000000000000000000000000010d18242f3a454f5a646d767e868c92979a9c9a9898999b9c9995908a827a71685e53493e32271b0f04000000000000000000000000040e17212a333d465059636c7679797979797979776c6053473a414a545d6670787979797979797974685c4f4236291c1000121f2c3845525f6b78828b93939393928980766c635950474a5763707c868f939393938e857b71685f554c423930261d130a000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a52483e32261a0e00000000121e2b3744505b666f777f879098a0a09f958b81766c62584e44392f251b110600000000000000000008131d27313b45505a646e78838d97a0a09e968e867e756d64594d4135281c0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061019222b343c434a51575d62666a6d70737576777879797978777674726f6c68645f59534c454c53595f64686c707375777879797978787674726f6c68635e59524c453d352d241b1209000000000000000000000000000006101a232c343c444b52585e63676b6e71737577787979797978777574716e6a66615c564f48413930271e150b01000000000000000000000000000000000000000a131c252e363e464d545a5f64696d7073757778797979787775726f6c68635d57514a433b332a21180f06000000000000000000000000000008111a232c343c434a51575d62676b6e717476777879797978777573716d6a66615b564f484139312920170d04000000000000000000000000010d18242f3a46505b656f7881888e919292918d88837d77716b645e5853545e6975818e938a7d7164584b3e3225190c00000000121f2c3945525f6b788592939393938e8275685b4e5865727e8c9393939393887b6e6155483b2e221508000000000000000000000000000000000000000013202c3946535f6c7986939393939393939393939393939393939393939393939393939393939393939393939393939393908376695d5043362a1d1000000006121e2a36414c555c5f5f5f5f5f5f5f5f5f5e595e5f5f5f5f5f5f5f5f5f5d5a5f5f5f5f5f5f5f5f5f5f5b544b4035291d110500000006101a232a313639393939393939393939383431363939393939393939393938342e271f160c0200000006101a232a31363939393939393939393938342f2820170d030000000000000000000000000000000000000007121e29333e48525b646c747b81868a8e9092939392918f8d89847e7870685f564c42372c21160a0000000000000000000000000000050f18212b343e47515a646b6c6c6c6c6c6c6c6b655b50443838424b545e676c6c6c6c6c6c6c6c6a62574c4033271b0e00121f2c3845525f6b788586868686868680776d645a51473e4a5763707d868686868686857c72695f564d433a30271e140b01000000000000000000000a16212c3740484f52535353535353535353535353535353535353535353524f4840372c21160a0000000013202c3946535f6c7881899193939393938d83796f655a50463c32271d130900000000000000000000010b151f29343e48525c66717b858f939393939390877f76695d5043372a1d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071019222a323940464c51565a5e616466686a6b6b6c6c6c6c6b6a686663605c58534e48413b41484e53585c606366686a6b6c6c6c6c6b6a686663605c57534d47413a332b231b12090000000000000000000000000000000008111a222a323940474c52575b5f626567696a6b6c6c6c6c6b6a696765625e5a56514b453e372f271e150c030000000000000000000000000000000000000000010a131c242c343b42494e54595d616467696a6b6c6c6c6b6a686663605c57524c463f38312921180f060000000000000000000000000000000008111a222a323940464c51565b5f626567696b6b6c6c6c6b6a696764615e5a55504a443e372f271f170e05000000000000000000000000000007131e29343f49535d666f767d8284868684817d77726c666059534d474d5965727e868686807366594d4033271a0d0000000013202c3946535f6c79868686868686868275695c4f59667380868686868686867b6f6255493c2f221609000000000000000000000000000000000000000013202c3946535f6c7986868686868686868686868686868686868686868686868686868686868686868686868686868686868376695d5043362a1d10000000020e19252f3a434b50535353535353535353524e51535353535353535353514f52535353535353535353504a42392e24180d01000000000811192025292c2c2c2c2c2c2c2c2c2c2b28262a2c2c2c2c2c2c2c2c2c2c2b28231d150d0400000000000811192025292c2c2c2c2c2c2c2c2c2c2b28241d160e050000000000000000000000000000000000000000010c17222c364049525a626970757a7e8184858686868583817d78736d665e564d443a30251b1005000000000000000000000000000000060f19222c353f48525a5f5f5f5f5f5f5f5f5f5b53493f333039424c555c5f5f5f5f5f5f5f5f5e5850463b2f23170b00121f2b3845515e6a7679797979797979776e655b52483f3d4a56636f7879797979797979736a60574e443b31281e150c02000000000000000000000005101a252e373e434646464646464646464646464646464646464646464646433e372e251a10050000000013202c3946535f6c798686868686868686867b71675d53483e342a20160b010000000000000000000000030d18222c36404a555f69737d868686868686868684776a5d5044372a1d1100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101820272e353b40454a4e5255575a5c5d5e5f5f5f5f5f5e5d5b595754504c47423c3630363d42474c5054575a5c5d5e5f5f5f5f5e5d5b595653504c47423c362f282119110900000000000000000000000000000000000008101820282f353b41464b4f5255585a5c5d5e5f5f5f5f5f5e5c5a5855524e4a453f3a332c251d150c0300000000000000000000000000000000000000000000010a121a222a31373d43484d5154575a5c5e5f5f5f5f5f5d5c5a5753504b46413b352e271f170f0600000000000000000000000000000000000008101820272e353b40464a4f5256585b5d5e5f5f5f5f5f5e5c5a5855514e49443f39332c251d150d05000000000000000000000000000000020d18232d37414b545d656c71757879797775716c66615b554e48423d4a56636f78797979797266594d4033271a0d00000000131f2c3946525f6b76797979797979797973685b4f5865717979797979797979786e6155483c2f2216090000000000000000000000000000000000000000131f2c3946525f6b7679797979797979797979797979797979797979797979797979797979797979797979797979797979797974685c4f4336291d100000000008131e2831393f44464646464646464646454245464646464646464646454346464646464646464646443f3830271d1207000000000000070e14191d1f2020202020202020201f1c1a1d1f2020202020202020201f1c17120b0400000000000000070e14191d1f2020202020202020201f1c18120c040000000000000000000000000000000000000000000005101a242e37404850585e656a6e72757778797979787674716d68625c544d443b32281e1409000000000000000000000000000000000007101a232d3640484e5253535353535353524f4941372d27303a434b505353535353535353524d463e34291e130700101d2936424e59646b6c6c6c6c6c6c6c6c665c534940363a47525d676c6c6c6c6c6c6c6c6961584e453c32291f160c030000000000000000000000000009131c252c3237393939393939393939393939393939393939393939393937322c251c13090000000000131f2c3946525f6b7679797979797979797974695f554b41372c22180e040000000000000000000000000006101a242e39434d57616b7579797979797979797974695c5043362a1d1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e151d23292f353a3e4245484b4d4f5051525253535251504f4d4a4744403b37312b252b31373c4044474b4d4f51525253535251504f4d4a47443f3b36312b251e170f070000000000000000000000000000000000000000070e161d242a30353a3f4346494c4e4f5152525353525251504e4c4946423e39342e28221a130b03000000000000000000000000000000000000000000000000000910181f262c32373c4145484b4d4f515253535252514f4d4a47443f3b35302a231c150d050000000000000000000000000000000000000000060e151c23292f353a3e4346494c4e50515253535252514f4e4b4845423d39332e28211a130b03000000000000000000000000000000000006111b263039424b535a6065696b6c6c6b6865605b554f4a433d373a47525d676c6c6c6c6c6960554a3d3125180c00000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6a62574b545f686c6c6c6c6c6c6c6c6c665c5145392d2014070000000000000000000000000000000000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a62584c4034271b0e00000000010c161f272e343839393939393939393939363839393939393939393938373939393939393939393937332e261e150b000000000000000003090d111213131313131313131312100e1113131313131313131313120f0c070000000000000000000003090d111213131313131313131312100c070100000000000000000000000000000000000000000000000008121c252e363f464d53595e6266686a6c6c6c6c6b6a6764615c57514a433b322920160c0200000000000000000000000000000000000008111b242e363d43454646464646464646433e372f261e2831393f44464646464646464645423c352c22180d02000e1a26313d48525a5f5f5f5f5f5f5f5f5f5b544a41372e36414c555c5f5f5f5f5f5f5f5f5e584f463c332a20170d040000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a26211a130a010000000000111e2a37434f5a646b6c6c6c6c6c6c6c6c6c6a62584d43392f251b100600000000000000000000000000000008121c27313b454f5a636b6c6c6c6c6c6c6c6c6c6a62584c4034281b0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b12181e24292e3236393c3e414244454546464645454442403e3b3834302b26201a20262b3034383b3e4042444546464646454442403e3b37332f2a25201a130c0500000000000000000000000000000000000000000000040c12191f252a2e33363a3d3f4143444546464646454443413f3d3936322d28231d17100901000000000000000000000000000000000000000000000000000000060d141b21262c3035383c3f41434445464646454443403e3b37332f2a241f18110a0300000000000000000000000000000000000000000000040b12181e24292e32363a3d3f42434545464646454443413f3c3935312d28221d16100901000000000000000000000000000000000000000a141e27303941484f55595c5e5f5f5e5c59544f4a443e38322c36414c555c5f5f5f5f5f5d574e44392d211509000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5e5850454d565d5f5f5f5f5f5f5f5f5f5b544b4035291d110500000000000000000000000000000000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5e5950463b3024180c0000000000040d151d23282b2c2c2c2c2c2c2c2c2c2c2a2c2c2c2c2c2c2c2c2c2c2b2a2c2c2c2c2c2c2c2c2c2c2b27221c140c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c252d343b42484d5256595c5e5f5f5f5f5e5d5b5855504b453f38312920170e04000000000000000000000000000000000000000009121b242c323639393939393939393937332d251d161f272e343839393939393939393936312a231a100600000915202b3640484e5253535353535353524f4a42382f252f3a434b505353535353535353514d463d342a21170e0500000000000000000000000000000000010910161a1e1f2020202020202020202020202020202020202020201f1e1a161009010000000000000e1a26323e48525a5f5f5f5f5f5f5f5f5f5f5e5850463c31271d130900000000000000000000000000000000010b151f29333d4851595e5f5f5f5f5f5f5f5f5f5e5950463b3024180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d13181d2226292d2f3234363738393939393938373534312f2b28241f1a140f151a1f24282c2f32343637383939393938373533312e2b27231f1a140e080200000000000000000000000000000000000000000000000001080e13191e22262a2d303234363738393939393838363533302d2a26221d18120c0500000000000000000000000000000000000000000000000000000000000003090f151b2024292c2f323436383939393938373634312f2b27231e19130d070000000000000000000000000000000000000000000000000000070d13181d22262a2e3033353738393939393837363432302d2925211c17110b05000000000000000000000000000000000000000000020c151e272f373e44494d5052535352504c48443e39332d27252f3a434b505353535353514c453c32271c1105000000000a16212c3740484f525353535353535353524d463e444c51535353535353535353504a42392e24180d0100000000000000000000000000000000000000000a16212c3740484f52535353535353535353535353535353535353535353535353535353535353535353535353535353535353524e473e342a1f1307000000000000030b12171c1e2020202020202020201f1e1f2020202020202020201f1e1f2020202020202020201e1b17110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131b222a31373c42464a4d4f515253535352504e4c4844403a342e261f170e050000000000000000000000000000000000000000000009121a21262a2c2c2c2c2c2c2c2c2c2a27221b130d151d23282b2c2c2c2c2c2c2c2c2c292520191108000000040f1a242e363d43454646464646464646433f382f261e2831393f44464646464646464645413b342b22180f0500000000000000000000000000000000000000050a0e111313131313131313131313131313131313131313131313110e0a0500000000000000000a16212c3740484f52535353535353535353524d463e342a20150b010000000000000000000000000000000000030d17222c363f484e52535353535353535353524e473e352a1f1408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070c11161a1d20232527292a2b2c2c2c2c2c2b2a292725221f1c18130e0904090e13181c1f222527292b2c2c2c2c2c2b2a292725221f1b17130e09030000000000000000000000000000000000000000000000000000000002080d12161a1e21242628292b2c2c2c2c2c2c2b2a282624211e1a16110c0601000000000000000000000000000000000000000000000000000000000000000000040a0f14181c202326282a2b2c2c2c2c2c2b292725221f1b17120d08020000000000000000000000000000000000000000000000000000000002070d12161a1e212426282a2b2c2c2c2c2c2b2a282623201d1915100b06000000000000000000000000000000000000000000000000030c151d252c33383d41434546464543403c38332d28221c1e2831393f44464646464645413b332a20160b000000000005101a252e373e4346464646464646464645423c343a4044464646464646464646443f3830271d120700000000000000000000000000000000000000000005101a252e373e434646464646464646464646464646464646464646464646464646464646464646464646464646464646464645423c352c22180d020000000000000000060b0f12131313131313131313131112131313131313131313121113131313131313131313120f0b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010911181f262b31363a3d404344454646464544423f3c38342f29231c150d05000000000000000000000000000000000000000000000000080f151a1e1f20202020202020201e1b161009030b12171c1e20202020202020201f1d19140e07000000000008121b242c323639393939393939393937332d261d161f272e343839393939393939393835302a22191006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101a252e373e434646464646464646464645423c342c22180e040000000000000000000000000000000000000005101a242d363d424546464646464646464645423c352c23180e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105090d111416191b1c1e1e1f2020201f1f1e1c1a1816130f0b070300000003070c101316191b1c1e1f1f20201f1f1e1c1a1815120f0b0702000000000000000000000000000000000000000000000000000000000000000001060a0e111417191b1d1e1f1f20201f1f1e1d1b191714110e0a05000000000000000000000000000000000000000000000000000000000000000000000000000003080c101416191b1d1e1f2020201f1e1d1b1916130f0b0702000000000000000000000000000000000000000000000000000000000000000001060a0e1215171a1c1d1e1f2020201f1e1d1b191714110d0905000000000000000000000000000000000000000000000000000000030b131a21272c313437383939383634302c27221c1611161f272e343839393939393835302921180e0400000000000009131c252c32373939393939393939393836312a2f353839393939393939393937332e261e150b000000000000000000000000000000000000000000000009131c252c3237393939393939393939393939393939393939393939393939393939393939393939393939393939393939393936312b231a1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d141a20252a2e313436383939393938373533302c28231e18110a030000000000000000000000000000000000000000000000000000040a0e11131313131313131313110f0a05000000060b0f12131313131313131312110d09030000000000000009121a21262a2c2c2c2c2c2c2c2c2c2b27221c140d151d23282b2c2c2c2c2c2c2c2c2c29251f1810070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131c252c3237393939393939393939393836312a221a100600000000000000000000000000000000000000000008121b242b3236393939393939393939393936312b231a110700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104070a0c0e101112121313131312110f0e0c09060300000000000000000003070a0c0e1011121313131312110f0e0c09060300000000000000000000000000000000000000000000000000000000000000000000000000000205080b0d0f101112131313131211100f0d0b0805010000000000000000000000000000000000000000000000000000000000000000000000000000000000000004070a0d0f1011121313131211100e0c09060300000000000000000000000000000000000000000000000000000000000000000000000000000205080b0d0f1112121313131211100f0d0a080401000000000000000000000000000000000000000000000000000000000000010910161c2125282a2c2c2c2c2a2724201b16110b050d151d23282b2c2c2c2c2c2c29241e170f0600000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c29251f24292b2c2c2c2c2c2c2c2c2c2b27221c140c030000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2a2520191108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090f14191e212527292b2c2c2c2c2c2a292623201c17120d0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f151a1e1f20202020202020201e1b17110a030b12171c1e20202020202020201f1d19140d060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a131a21262a2c2c2c2c2c2c2c2c2c2c2c29251f181007000000000000000000000000000000000000000000000009121a21262a2c2c2c2c2c2c2c2c2c2c2c2a2620191108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b1015181b1e1f20201f1d1b1814100b050000030b12171c1e20202020201f1c19130d05000000000000000000010910161a1e1f20202020202020201f1d1914181c1f2020202020202020201e1b17110a0200000000000000000000000000000000000000000000000000010910161a1e1f2020202020202020202020202020202020202020202020202020202020202020202020202020202020201f1d1a140e07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004090d1215181b1d1e1f2020201f1e1c1a1714100c0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0e11131313131313131313120f0b06000000060b0f12131313131313131312100d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010910161a1e1f2020202020202020201f1d19140e0600000000000000000000000000000000000000000000000000080f151a1e1f2020202020202020201f1d1a150e0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080c0f1112131312110f0c0804000000000000060b0f12131313131312100d0802000000000000000000000000050a0e1113131313131313131312110d090c1012131313131313131313120f0b060000000000000000000000000000000000000000000000000000000000050a0e111313131313131313131313131313131313131313131313131313131313131313131313131313131313131313110d090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105090c0e10121313131312110f0d0b080400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0e111313131313131313131312110d0903000000000000000000000000000000000000000000000000000000040a0e111313131313131313131313110e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + offset: 0 + size: 0 + path: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: LiberationSans SDF + m_EditorClassIdentifier: + hashCode: 231247347 + material: {fileID: 2180264} + materialHashCode: -1183942120 + fontAssetType: 1 + m_fontInfo: + Name: Liberation Sans + PointSize: 86 + Scale: 1 + CharacterCount: 250 + LineHeight: 98.90625 + Baseline: 0 + Ascender: 77.84375 + CapHeight: 59.1875 + Descender: -18.21875 + CenterLine: 0 + SuperscriptOffset: 77.84375 + SubscriptOffset: -12.261719 + SubSize: 0.5 + Underline: -12.261719 + UnderlineThickness: 6.298828 + strikethrough: 23.675 + strikethroughThickness: 0 + TabWidth: 239.0625 + Padding: 9 + AtlasWidth: 1024 + AtlasHeight: 1024 + atlas: {fileID: 2846298} + m_glyphInfoList: + - id: 32 + x: 10 + y: 1033 + width: 23.90625 + height: 96.0625 + xOffset: 0 + yOffset: 77.84375 + xAdvance: 23.90625 + scale: 1 + - id: 33 + x: 1004 + y: 619 + width: 8.3125 + height: 59.15625 + xOffset: 7.75 + yOffset: 59.1875 + xAdvance: 23.90625 + scale: 1 + - id: 34 + x: 336 + y: 10 + width: 23.21875 + height: 18.59375 + xOffset: 3.625 + yOffset: 59.1875 + xAdvance: 30.53125 + scale: 1 + - id: 35 + x: 426 + y: 611 + width: 47.03125 + height: 58.84375 + xOffset: 0.375 + yOffset: 58.84375 + xAdvance: 47.84375 + scale: 1 + - id: 36 + x: 164 + y: 361 + width: 45.5 + height: 69.625 + xOffset: 0.90625 + yOffset: 63.6875 + xAdvance: 47.84375 + scale: 1 + - id: 37 + x: 405 + y: 953 + width: 70.34375 + height: 60.15625 + xOffset: 3.0625 + yOffset: 59.6875 + xAdvance: 76.46875 + scale: 1 + - id: 38 + x: 383 + y: 779 + width: 53 + height: 60.34375 + xOffset: 3 + yOffset: 59.53125 + xAdvance: 57.375 + scale: 1 + - id: 39 + x: 796 + y: 234 + width: 7.71875 + height: 18.59375 + xOffset: 4.34375 + yOffset: 59.1875 + xAdvance: 16.40625 + scale: 1 + - id: 40 + x: 146 + y: 738 + width: 22.78125 + height: 80.125 + xOffset: 5.3125 + yOffset: 62.34375 + xAdvance: 28.625 + scale: 1 + - id: 41 + x: 165 + y: 450 + width: 22.8125 + height: 80.125 + xOffset: 0.5 + yOffset: 62.34375 + xAdvance: 28.625 + scale: 1 + - id: 42 + x: 807 + y: 42 + width: 30.75 + height: 30.1875 + xOffset: 1.375 + yOffset: 59.1875 + xAdvance: 33.46875 + scale: 1 + - id: 43 + x: 725 + y: 422 + width: 41.78125 + height: 42.0625 + xOffset: 4.1875 + yOffset: 49.65625 + xAdvance: 50.21875 + scale: 1 + - id: 44 + x: 569 + y: 889 + width: 8.4375 + height: 20.1875 + xOffset: 7.71875 + yOffset: 9.21875 + xAdvance: 23.90625 + scale: 1 + - id: 45 + x: 764 + y: 15 + width: 21 + height: 6.71875 + xOffset: 3.8125 + yOffset: 26.21875 + xAdvance: 28.625 + scale: 1 + - id: 46 + x: 558 + y: 710 + width: 8.1875 + height: 9.1875 + xOffset: 7.84375 + yOffset: 9.21875 + xAdvance: 23.90625 + scale: 1 + - id: 47 + x: 383 + y: 667 + width: 23.90625 + height: 63.15625 + xOffset: 0 + yOffset: 62.34375 + xAdvance: 23.90625 + scale: 1 + - id: 48 + x: 787 + y: 475 + width: 41.09375 + height: 60.90625 + xOffset: 3.34375 + yOffset: 60.0625 + xAdvance: 47.84375 + scale: 1 + - id: 49 + x: 321 + y: 386 + width: 37.0625 + height: 59.15625 + xOffset: 6.53125 + yOffset: 59.1875 + xAdvance: 47.84375 + scale: 1 + - id: 50 + x: 962 + y: 298 + width: 39.1875 + height: 60.0625 + xOffset: 4.3125 + yOffset: 60.0625 + xAdvance: 47.84375 + scale: 1 + - id: 51 + x: 908 + y: 380 + width: 40.78125 + height: 60.90625 + xOffset: 3.25 + yOffset: 60.0625 + xAdvance: 47.84375 + scale: 1 + - id: 52 + x: 378 + y: 386 + width: 43.34375 + height: 59.15625 + xOffset: 1.96875 + yOffset: 59.1875 + xAdvance: 47.84375 + scale: 1 + - id: 53 + x: 441 + y: 386 + width: 40.78125 + height: 60 + xOffset: 3.4375 + yOffset: 59.1875 + xAdvance: 47.84375 + scale: 1 + - id: 54 + x: 339 + y: 48 + width: 39.6875 + height: 60.90625 + xOffset: 4.34375 + yOffset: 60.0625 + xAdvance: 47.84375 + scale: 1 + - id: 55 + x: 501 + y: 386 + width: 39.09375 + height: 59.15625 + xOffset: 4.40625 + yOffset: 59.1875 + xAdvance: 47.84375 + scale: 1 + - id: 56 + x: 968 + y: 378 + width: 40.34375 + height: 60.90625 + xOffset: 3.71875 + yOffset: 60.0625 + xAdvance: 47.84375 + scale: 1 + - id: 57 + x: 398 + y: 54 + width: 39.71875 + height: 60.90625 + xOffset: 4.03125 + yOffset: 60.0625 + xAdvance: 47.84375 + scale: 1 + - id: 58 + x: 941 + y: 175 + width: 8.1875 + height: 45.4375 + xOffset: 7.84375 + yOffset: 45.4375 + xAdvance: 23.90625 + scale: 1 + - id: 59 + x: 800 + y: 158 + width: 8.4375 + height: 56.4375 + xOffset: 7.71875 + yOffset: 45.4375 + xAdvance: 23.90625 + scale: 1 + - id: 60 + x: 422 + y: 465 + width: 41.78125 + height: 43.65625 + xOffset: 4.21875 + yOffset: 50.15625 + xAdvance: 50.21875 + scale: 1 + - id: 61 + x: 847 + y: 413 + width: 41.78125 + height: 27.71875 + xOffset: 4.1875 + yOffset: 42.1875 + xAdvance: 50.21875 + scale: 1 + - id: 62 + x: 483 + y: 465 + width: 41.78125 + height: 43.65625 + xOffset: 4.21875 + yOffset: 50.15625 + xAdvance: 50.21875 + scale: 1 + - id: 63 + x: 848 + y: 460 + width: 41.09375 + height: 60.0625 + xOffset: 3.5 + yOffset: 60.0625 + xAdvance: 47.84375 + scale: 1 + - id: 64 + x: 10 + y: 939 + width: 73.125 + height: 74.1875 + xOffset: 6.75 + yOffset: 62.34375 + xAdvance: 87.3125 + scale: 1 + - id: 65 + x: 751 + y: 871 + width: 57.03125 + height: 59.15625 + xOffset: 0.15625 + yOffset: 59.1875 + xAdvance: 57.375 + scale: 1 + - id: 66 + x: 939 + y: 619 + width: 45.75 + height: 59.15625 + xOffset: 7.03125 + yOffset: 59.1875 + xAdvance: 57.375 + scale: 1 + - id: 67 + x: 825 + y: 782 + width: 54.46875 + height: 60.90625 + xOffset: 4.34375 + yOffset: 60.0625 + xAdvance: 62.09375 + scale: 1 + - id: 68 + x: 808 + y: 703 + width: 50.9375 + height: 59.15625 + xOffset: 7.03125 + yOffset: 59.1875 + xAdvance: 62.09375 + scale: 1 + - id: 69 + x: 492 + y: 707 + width: 46.59375 + height: 59.15625 + xOffset: 7.03125 + yOffset: 59.1875 + xAdvance: 57.375 + scale: 1 + - id: 70 + x: 725 + y: 484 + width: 42.03125 + height: 59.15625 + xOffset: 7.03125 + yOffset: 59.1875 + xAdvance: 52.53125 + scale: 1 + - id: 71 + x: 593 + y: 809 + width: 56.15625 + height: 60.90625 + xOffset: 4.3125 + yOffset: 60.0625 + xAdvance: 66.90625 + scale: 1 + - id: 72 + x: 947 + y: 698 + width: 48.03125 + height: 59.15625 + xOffset: 7.03125 + yOffset: 59.1875 + xAdvance: 62.09375 + scale: 1 + - id: 73 + x: 571 + y: 56 + width: 8.03125 + height: 59.15625 + xOffset: 7.90625 + yOffset: 59.1875 + xAdvance: 23.90625 + scale: 1 + - id: 74 + x: 655 + y: 66 + width: 35.28125 + height: 60 + xOffset: 1.34375 + yOffset: 59.1875 + xAdvance: 43 + scale: 1 + - id: 75 + x: 682 + y: 875 + width: 49.34375 + height: 59.15625 + xOffset: 7.03125 + yOffset: 59.1875 + xAdvance: 57.375 + scale: 1 + - id: 76 + x: 514 + y: 56 + width: 37.90625 + height: 59.15625 + xOffset: 7.03125 + yOffset: 59.1875 + xAdvance: 47.84375 + scale: 1 + - id: 77 + x: 828 + y: 862 + width: 57.53125 + height: 59.15625 + xOffset: 7.03125 + yOffset: 59.1875 + xAdvance: 71.625 + scale: 1 + - id: 78 + x: 315 + y: 671 + width: 48.03125 + height: 59.15625 + xOffset: 7.03125 + yOffset: 59.1875 + xAdvance: 62.09375 + scale: 1 + - id: 79 + x: 305 + y: 779 + width: 58.71875 + height: 60.90625 + xOffset: 4.0625 + yOffset: 60.0625 + xAdvance: 66.90625 + scale: 1 + - id: 80 + x: 670 + y: 572 + width: 45.75 + height: 59.15625 + xOffset: 7.03125 + yOffset: 59.1875 + xAdvance: 57.375 + scale: 1 + - id: 81 + x: 10 + y: 843 + width: 58.71875 + height: 76.3125 + xOffset: 4.0625 + yOffset: 60.0625 + xAdvance: 66.90625 + scale: 1 + - id: 82 + x: 666 + y: 730 + width: 51.0625 + height: 59.15625 + xOffset: 7.03125 + yOffset: 59.1875 + xAdvance: 62.09375 + scale: 1 + - id: 83 + x: 878 + y: 701 + width: 49.5 + height: 60.90625 + xOffset: 3.875 + yOffset: 60.0625 + xAdvance: 57.375 + scale: 1 + - id: 84 + x: 600 + y: 651 + width: 48.625 + height: 59.15625 + xOffset: 1.90625 + yOffset: 59.1875 + xAdvance: 52.53125 + scale: 1 + - id: 85 + x: 668 + y: 651 + width: 48.84375 + height: 60 + xOffset: 6.625 + yOffset: 59.1875 + xAdvance: 62.09375 + scale: 1 + - id: 86 + x: 749 + y: 792 + width: 56.59375 + height: 59.15625 + xOffset: 0.375 + yOffset: 59.1875 + xAdvance: 57.375 + scale: 1 + - id: 87 + x: 305 + y: 954 + width: 80.5 + height: 59.15625 + xOffset: 0.375 + yOffset: 59.1875 + xAdvance: 81.15625 + scale: 1 + - id: 88 + x: 899 + y: 781 + width: 53.625 + height: 59.15625 + xOffset: 1.90625 + yOffset: 59.1875 + xAdvance: 57.375 + scale: 1 + - id: 89 + x: 593 + y: 730 + width: 53.59375 + height: 59.15625 + xOffset: 1.875 + yOffset: 59.1875 + xAdvance: 57.375 + scale: 1 + - id: 90 + x: 872 + y: 622 + width: 47.125 + height: 59.15625 + xOffset: 2.71875 + yOffset: 59.1875 + xAdvance: 52.53125 + scale: 1 + - id: 91 + x: 188 + y: 758 + width: 17.09375 + height: 80.15625 + xOffset: 6.125 + yOffset: 62.34375 + xAdvance: 23.90625 + scale: 1 + - id: 92 + x: 557 + y: 624 + width: 23.90625 + height: 63.15625 + xOffset: 0 + yOffset: 62.34375 + xAdvance: 23.90625 + scale: 1 + - id: 93 + x: 455 + y: 773 + width: 17.0625 + height: 80.15625 + xOffset: 0.65625 + yOffset: 62.34375 + xAdvance: 23.90625 + scale: 1 + - id: 94 + x: 964 + y: 248 + width: 39.53125 + height: 30.90625 + xOffset: 0.40625 + yOffset: 59.1875 + xAdvance: 40.34375 + scale: 1 + - id: 95 + x: 894 + y: 265 + width: 50.09375 + height: 5.46875 + xOffset: -1.3125 + yOffset: -11.625 + xAdvance: 47.84375 + scale: 1 + - id: 96 + x: 807 + y: 10 + width: 17.8125 + height: 12.875 + xOffset: 4.4375 + yOffset: 63.34375 + xAdvance: 28.625 + scale: 1 + - id: 97 + x: 99 + y: 12 + width: 44.1875 + height: 47.125 + xOffset: 3.625 + yOffset: 46.28125 + xAdvance: 47.84375 + scale: 1 + - id: 98 + x: 456 + y: 135 + width: 38.6875 + height: 63.15625 + xOffset: 5.53125 + yOffset: 62.34375 + xAdvance: 47.84375 + scale: 1 + - id: 99 + x: 163 + y: 12 + width: 37.0625 + height: 47.125 + xOffset: 3.625 + yOffset: 46.28125 + xAdvance: 43 + scale: 1 + - id: 100 + x: 485 + y: 528 + width: 38.65625 + height: 63.15625 + xOffset: 3.59375 + yOffset: 62.34375 + xAdvance: 47.84375 + scale: 1 + - id: 101 + x: 220 + y: 12 + width: 40.34375 + height: 47.125 + xOffset: 3.625 + yOffset: 46.28125 + xAdvance: 47.84375 + scale: 1 + - id: 102 + x: 632 + y: 145 + width: 22.8125 + height: 62.21875 + xOffset: 1.1875 + yOffset: 62.25 + xAdvance: 23.90625 + scale: 1 + - id: 103 + x: 514 + y: 135 + width: 38.65625 + height: 64 + xOffset: 3.59375 + yOffset: 46.15625 + xAdvance: 47.84375 + scale: 1 + - id: 104 + x: 674 + y: 145 + width: 36.28125 + height: 62.3125 + xOffset: 5.9375 + yOffset: 62.34375 + xAdvance: 47.84375 + scale: 1 + - id: 105 + x: 722 + y: 228 + width: 7.5625 + height: 62.3125 + xOffset: 5.75 + yOffset: 62.34375 + xAdvance: 19.09375 + scale: 1 + - id: 106 + x: 558 + y: 777 + width: 15.40625 + height: 80.15625 + xOffset: -2.125 + yOffset: 62.34375 + xAdvance: 19.09375 + scale: 1 + - id: 107 + x: 543 + y: 542 + width: 37.34375 + height: 62.3125 + xOffset: 5.78125 + yOffset: 62.34375 + xAdvance: 43 + scale: 1 + - id: 108 + x: 730 + y: 146 + width: 7.5625 + height: 62.3125 + xOffset: 5.78125 + yOffset: 62.34375 + xAdvance: 19.09375 + scale: 1 + - id: 109 + x: 669 + y: 809 + width: 60.25 + height: 46.28125 + xOffset: 5.6875 + yOffset: 46.28125 + xAdvance: 71.625 + scale: 1 + - id: 110 + x: 544 + y: 476 + width: 36.53125 + height: 46.28125 + xOffset: 5.6875 + yOffset: 46.28125 + xAdvance: 47.84375 + scale: 1 + - id: 111 + x: 902 + y: 313 + width: 40.59375 + height: 47.125 + xOffset: 3.59375 + yOffset: 46.28125 + xAdvance: 47.84375 + scale: 1 + - id: 112 + x: 263 + y: 476 + width: 38.6875 + height: 64.0625 + xOffset: 5.53125 + yOffset: 46.25 + xAdvance: 47.84375 + scale: 1 + - id: 113 + x: 335 + y: 212 + width: 38.71875 + height: 64.125 + xOffset: 3.59375 + yOffset: 46.28125 + xAdvance: 47.84375 + scale: 1 + - id: 114 + x: 796 + y: 272 + width: 21.5 + height: 46.28125 + xOffset: 5.6875 + yOffset: 46.28125 + xAdvance: 28.625 + scale: 1 + - id: 115 + x: 837 + y: 268 + width: 37.5 + height: 47 + xOffset: 2.375 + yOffset: 46.15625 + xAdvance: 43 + scale: 1 + - id: 116 + x: 766 + y: 80 + width: 21.9375 + height: 56.25 + xOffset: 1.28125 + yOffset: 55.625 + xAdvance: 23.90625 + scale: 1 + - id: 117 + x: 807 + y: 92 + width: 36.53125 + height: 46.28125 + xOffset: 5.5625 + yOffset: 45.4375 + xAdvance: 47.84375 + scale: 1 + - id: 118 + x: 600 + y: 393 + width: 42.4375 + height: 45.4375 + xOffset: 0.28125 + yOffset: 45.4375 + xAdvance: 43 + scale: 1 + - id: 119 + x: 600 + y: 889 + width: 62.4375 + height: 45.4375 + xOffset: -0.15625 + yOffset: 45.4375 + xAdvance: 62.09375 + scale: 1 + - id: 120 + x: 662 + y: 393 + width: 41.09375 + height: 45.4375 + xOffset: 0.9375 + yOffset: 45.4375 + xAdvance: 43 + scale: 1 + - id: 121 + x: 663 + y: 489 + width: 42.625 + height: 63.28125 + xOffset: 0.1875 + yOffset: 45.4375 + xAdvance: 43 + scale: 1 + - id: 122 + x: 828 + y: 178 + width: 35.21875 + height: 45.4375 + xOffset: 3.46875 + yOffset: 45.4375 + xAdvance: 43 + scale: 1 + - id: 123 + x: 987 + y: 933 + width: 25.78125 + height: 80.15625 + xOffset: 1.40625 + yOffset: 62.34375 + xAdvance: 28.71875 + scale: 1 + - id: 124 + x: 229 + y: 371 + width: 6.96875 + height: 80.53125 + xOffset: 7.65625 + yOffset: 62.34375 + xAdvance: 22.34375 + scale: 1 + - id: 125 + x: 216 + y: 79 + width: 25.71875 + height: 80.15625 + xOffset: 1.40625 + yOffset: 62.34375 + xAdvance: 28.71875 + scale: 1 + - id: 126 + x: 663 + y: 459 + width: 42.5 + height: 10.65625 + xOffset: 3.84375 + yOffset: 33.90625 + xAdvance: 50.21875 + scale: 1 + - id: 160 + x: 10 + y: 1033 + width: 23.90625 + height: 96.0625 + xOffset: 0 + yOffset: 77.84375 + xAdvance: 23.90625 + scale: 1 + - id: 161 + x: 710 + y: 66 + width: 8.3125 + height: 59.15625 + xOffset: 10.15625 + yOffset: 45.4375 + xAdvance: 28.625 + scale: 1 + - id: 162 + x: 457 + y: 55 + width: 37.09375 + height: 60.46875 + xOffset: 5.65625 + yOffset: 59.1875 + xAdvance: 47.84375 + scale: 1 + - id: 163 + x: 600 + y: 537 + width: 43.9375 + height: 60.0625 + xOffset: 2.40625 + yOffset: 60.0625 + xAdvance: 47.84375 + scale: 1 + - id: 164 + x: 883 + y: 182 + width: 38.34375 + height: 38.40625 + xOffset: 4.71875 + yOffset: 47.84375 + xAdvance: 47.84375 + scale: 1 + - id: 165 + x: 736 + y: 642 + width: 48.0625 + height: 59.15625 + xOffset: -0.09375 + yOffset: 59.1875 + xAdvance: 47.84375 + scale: 1 + - id: 166 + x: 255 + y: 371 + width: 6.96875 + height: 80.53125 + xOffset: 7.65625 + yOffset: 62.34375 + xAdvance: 22.34375 + scale: 1 + - id: 167 + x: 191 + y: 559 + width: 38.15625 + height: 69.53125 + xOffset: 4.8125 + yOffset: 62.34375 + xAdvance: 47.84375 + scale: 1 + - id: 168 + x: 735 + y: 313 + width: 23.40625 + height: 7.71875 + xOffset: 1.875 + yOffset: 58.9375 + xAdvance: 28.625 + scale: 1 + - id: 169 + x: 401 + y: 873 + width: 60.71875 + height: 60.71875 + xOffset: 1.28125 + yOffset: 60.0625 + xAdvance: 63.375 + scale: 1 + - id: 170 + x: 982 + y: 881 + width: 31.03125 + height: 32.78125 + xOffset: 1.0625 + yOffset: 60.15625 + xAdvance: 31.84375 + scale: 1 + - id: 171 + x: 644 + y: 13 + width: 40.84375 + height: 33.5625 + xOffset: 3.46875 + yOffset: 39.5 + xAdvance: 47.84375 + scale: 1 + - id: 172 + x: 398 + y: 10 + width: 41.78125 + height: 24.09375 + xOffset: 4.1875 + yOffset: 31.6875 + xAdvance: 50.21875 + scale: 1 + - id: 173 + x: 955 + y: 87 + width: 21 + height: 6.71875 + xOffset: 3.8125 + yOffset: 26.21875 + xAdvance: 28.625 + scale: 1 + - id: 174 + x: 225 + y: 779 + width: 60.71875 + height: 60.71875 + xOffset: 1.28125 + yOffset: 60.0625 + xAdvance: 63.375 + scale: 1 + - id: 175 + x: 894 + y: 290 + width: 48.9375 + height: 3.9375 + xOffset: -0.71875 + yOffset: 64.9375 + xAdvance: 47.5 + scale: 1 + - id: 176 + x: 912 + y: 43 + width: 24.09375 + height: 23.9375 + xOffset: 5.09375 + yOffset: 60.0625 + xAdvance: 34.40625 + scale: 1 + - id: 177 + x: 970 + y: 458 + width: 41.78125 + height: 51.1875 + xOffset: 2.71875 + yOffset: 51.21875 + xAdvance: 47.1875 + scale: 1 + - id: 178 + x: 863 + y: 123 + width: 25.28125 + height: 36 + xOffset: 1.71875 + yOffset: 59.6875 + xAdvance: 28.625 + scale: 1 + - id: 179 + x: 599 + y: 10 + width: 25.84375 + height: 36.53125 + xOffset: 1.125 + yOffset: 59.6875 + xAdvance: 28.625 + scale: 1 + - id: 180 + x: 844 + y: 10 + width: 17.8125 + height: 12.875 + xOffset: 3 + yOffset: 63.34375 + xAdvance: 28.625 + scale: 1 + - id: 181 + x: 972 + y: 777 + width: 41.6875 + height: 63.28125 + xOffset: 5.875 + yOffset: 45.4375 + xAdvance: 49.5625 + scale: 1 + - id: 182 + x: 198 + y: 179 + width: 39.15625 + height: 70.25 + xOffset: 3.34375 + yOffset: 59.1875 + xAdvance: 46.1875 + scale: 1 + - id: 183 + x: 857 + y: 42 + width: 8.1875 + height: 9.25 + xOffset: 10.1875 + yOffset: 27.96875 + xAdvance: 28.625 + scale: 1 + - id: 184 + x: 558 + y: 739 + width: 15.28125 + height: 18.21875 + xOffset: 4.96875 + yOffset: 0 + xAdvance: 28.625 + scale: 1 + - id: 185 + x: 912 + y: 86 + width: 23.375 + height: 35.5 + xOffset: 3.34375 + yOffset: 59.1875 + xAdvance: 28.625 + scale: 1 + - id: 186 + x: 863 + y: 71 + width: 29.25 + height: 32.78125 + xOffset: 1.125 + yOffset: 60.15625 + xAdvance: 31.40625 + scale: 1 + - id: 187 + x: 704 + y: 11 + width: 40.84375 + height: 33.5625 + xOffset: 3.46875 + yOffset: 39.5 + xAdvance: 47.84375 + scale: 1 + - id: 188 + x: 582 + y: 954 + width: 65.40625 + height: 59.15625 + xOffset: 2.34375 + yOffset: 59.1875 + xAdvance: 71.71875 + scale: 1 + - id: 189 + x: 495 + y: 954 + width: 67.03125 + height: 59.15625 + xOffset: 2.34375 + yOffset: 59.1875 + xAdvance: 71.71875 + scale: 1 + - id: 190 + x: 667 + y: 954 + width: 64.71875 + height: 59.65625 + xOffset: 3.0625 + yOffset: 59.6875 + xAdvance: 71.71875 + scale: 1 + - id: 191 + x: 909 + y: 460 + width: 41.125 + height: 60.0625 + xOffset: 5.5 + yOffset: 45.4375 + xAdvance: 52.53125 + scale: 1 + - id: 192 + x: 910 + y: 939 + width: 57.03125 + height: 74.59375 + xOffset: 0.15625 + yOffset: 74.59375 + xAdvance: 57.375 + scale: 1 + - id: 193 + x: 88 + y: 453 + width: 57.03125 + height: 74.59375 + xOffset: 0.15625 + yOffset: 74.59375 + xAdvance: 57.375 + scale: 1 + - id: 194 + x: 10 + y: 367 + width: 57.03125 + height: 75.15625 + xOffset: 0.15625 + yOffset: 75.1875 + xAdvance: 57.375 + scale: 1 + - id: 195 + x: 10 + y: 272 + width: 57.03125 + height: 75.5 + xOffset: 0.15625 + yOffset: 75.53125 + xAdvance: 57.375 + scale: 1 + - id: 196 + x: 87 + y: 362 + width: 57.03125 + height: 71.96875 + xOffset: 0.15625 + yOffset: 72 + xAdvance: 57.375 + scale: 1 + - id: 197 + x: 10 + y: 177 + width: 57.03125 + height: 75.0625 + xOffset: 0.15625 + yOffset: 75.0625 + xAdvance: 57.375 + scale: 1 + - id: 198 + x: 204 + y: 954 + width: 81.3125 + height: 59.15625 + xOffset: 1 + yOffset: 59.1875 + xAdvance: 86 + scale: 1 + - id: 199 + x: 10 + y: 79 + width: 54.46875 + height: 78.28125 + xOffset: 4.34375 + yOffset: 60.0625 + xAdvance: 62.09375 + scale: 1 + - id: 200 + x: 84 + y: 79 + width: 46.59375 + height: 74.59375 + xOffset: 7.03125 + yOffset: 74.59375 + xAdvance: 57.375 + scale: 1 + - id: 201 + x: 150 + y: 79 + width: 46.59375 + height: 74.59375 + xOffset: 7.03125 + yOffset: 74.59375 + xAdvance: 57.375 + scale: 1 + - id: 202 + x: 88 + y: 547 + width: 46.59375 + height: 75.15625 + xOffset: 7.03125 + yOffset: 75.1875 + xAdvance: 57.375 + scale: 1 + - id: 203 + x: 492 + y: 786 + width: 46.59375 + height: 71.96875 + xOffset: 7.03125 + yOffset: 72 + xAdvance: 57.375 + scale: 1 + - id: 204 + x: 150 + y: 644 + width: 17.8125 + height: 74.59375 + xOffset: 0.375 + yOffset: 74.59375 + xAdvance: 23.90625 + scale: 1 + - id: 205 + x: 154 + y: 550 + width: 17.8125 + height: 74.59375 + xOffset: 5.9375 + yOffset: 74.59375 + xAdvance: 23.90625 + scale: 1 + - id: 206 + x: 354 + y: 859 + width: 27.8125 + height: 75.15625 + xOffset: -1.9375 + yOffset: 75.1875 + xAdvance: 23.90625 + scale: 1 + - id: 207 + x: 155 + y: 177 + width: 23.40625 + height: 71.96875 + xOffset: 0.28125 + yOffset: 72 + xAdvance: 23.90625 + scale: 1 + - id: 208 + x: 905 + y: 860 + width: 57.40625 + height: 59.15625 + xOffset: 0.5625 + yOffset: 59.1875 + xAdvance: 62.09375 + scale: 1 + - id: 209 + x: 87 + y: 173 + width: 48.03125 + height: 75.5 + xOffset: 7.03125 + yOffset: 75.53125 + xAdvance: 62.09375 + scale: 1 + - id: 210 + x: 10 + y: 652 + width: 58.71875 + height: 75.4375 + xOffset: 4.0625 + yOffset: 74.59375 + xAdvance: 66.90625 + scale: 1 + - id: 211 + x: 10 + y: 557 + width: 58.71875 + height: 75.4375 + xOffset: 4.0625 + yOffset: 74.59375 + xAdvance: 66.90625 + scale: 1 + - id: 212 + x: 10 + y: 462 + width: 58.71875 + height: 76 + xOffset: 4.0625 + yOffset: 75.1875 + xAdvance: 66.90625 + scale: 1 + - id: 213 + x: 10 + y: 747 + width: 58.71875 + height: 76.34375 + xOffset: 4.0625 + yOffset: 75.53125 + xAdvance: 66.90625 + scale: 1 + - id: 214 + x: 832 + y: 941 + width: 58.71875 + height: 72.8125 + xOffset: 4.0625 + yOffset: 72 + xAdvance: 66.90625 + scale: 1 + - id: 215 + x: 969 + y: 190 + width: 38.34375 + height: 38.40625 + xOffset: 5.9375 + yOffset: 47.84375 + xAdvance: 50.21875 + scale: 1 + - id: 216 + x: 751 + y: 950 + width: 61.03125 + height: 63.78125 + xOffset: 2.96875 + yOffset: 61.5625 + xAdvance: 66.90625 + scale: 1 + - id: 217 + x: 150 + y: 858 + width: 48.84375 + height: 75.4375 + xOffset: 6.625 + yOffset: 74.59375 + xAdvance: 62.09375 + scale: 1 + - id: 218 + x: 218 + y: 859 + width: 48.84375 + height: 75.4375 + xOffset: 6.625 + yOffset: 74.59375 + xAdvance: 62.09375 + scale: 1 + - id: 219 + x: 286 + y: 859 + width: 48.84375 + height: 76 + xOffset: 6.625 + yOffset: 75.1875 + xAdvance: 62.09375 + scale: 1 + - id: 220 + x: 160 + y: 269 + width: 48.84375 + height: 72.8125 + xOffset: 6.625 + yOffset: 72 + xAdvance: 62.09375 + scale: 1 + - id: 221 + x: 87 + y: 268 + width: 53.59375 + height: 74.59375 + xOffset: 1.875 + yOffset: 74.59375 + xAdvance: 57.375 + scale: 1 + - id: 222 + x: 735 + y: 563 + width: 45.75 + height: 59.15625 + xOffset: 7.03125 + yOffset: 59.1875 + xAdvance: 57.375 + scale: 1 + - id: 223 + x: 422 + y: 528 + width: 43.03125 + height: 63.15625 + xOffset: 5.9375 + yOffset: 62.34375 + xAdvance: 52.53125 + scale: 1 + - id: 224 + x: 251 + y: 670 + width: 44.1875 + height: 64.15625 + xOffset: 3.625 + yOffset: 63.34375 + xAdvance: 47.84375 + scale: 1 + - id: 225 + x: 426 + y: 689 + width: 44.1875 + height: 64.15625 + xOffset: 3.625 + yOffset: 63.34375 + xAdvance: 47.84375 + scale: 1 + - id: 226 + x: 493 + y: 624 + width: 44.1875 + height: 63.46875 + xOffset: 3.625 + yOffset: 62.625 + xAdvance: 47.84375 + scale: 1 + - id: 227 + x: 865 + y: 540 + width: 44.1875 + height: 62.53125 + xOffset: 3.625 + yOffset: 61.6875 + xAdvance: 47.84375 + scale: 1 + - id: 228 + x: 929 + y: 540 + width: 44.1875 + height: 59.75 + xOffset: 3.625 + yOffset: 58.9375 + xAdvance: 47.84375 + scale: 1 + - id: 229 + x: 187 + y: 648 + width: 44.1875 + height: 70.1875 + xOffset: 3.625 + yOffset: 69.34375 + xAdvance: 47.84375 + scale: 1 + - id: 230 + x: 10 + y: 12 + width: 69.875 + height: 47.125 + xOffset: 2.75 + yOffset: 46.28125 + xAdvance: 76.46875 + scale: 1 + - id: 231 + x: 339 + y: 128 + width: 37.0625 + height: 64.5 + xOffset: 3.625 + yOffset: 46.28125 + xAdvance: 43 + scale: 1 + - id: 232 + x: 384 + y: 302 + width: 40.34375 + height: 64.15625 + xOffset: 3.625 + yOffset: 63.34375 + xAdvance: 47.84375 + scale: 1 + - id: 233 + x: 393 + y: 218 + width: 40.34375 + height: 64.15625 + xOffset: 3.625 + yOffset: 63.34375 + xAdvance: 47.84375 + scale: 1 + - id: 234 + x: 599 + y: 310 + width: 40.34375 + height: 63.46875 + xOffset: 3.625 + yOffset: 62.625 + xAdvance: 47.84375 + scale: 1 + - id: 235 + x: 782 + y: 338 + width: 40.34375 + height: 59.75 + xOffset: 3.625 + yOffset: 58.9375 + xAdvance: 47.84375 + scale: 1 + - id: 236 + x: 629 + y: 227 + width: 17.8125 + height: 63.3125 + xOffset: 0.40625 + yOffset: 63.34375 + xAdvance: 23.90625 + scale: 1 + - id: 237 + x: 659 + y: 310 + width: 17.8125 + height: 63.3125 + xOffset: 5.65625 + yOffset: 63.34375 + xAdvance: 23.90625 + scale: 1 + - id: 238 + x: 735 + y: 340 + width: 27.8125 + height: 62.625 + xOffset: -1.875 + yOffset: 62.625 + xAdvance: 23.90625 + scale: 1 + - id: 239 + x: 757 + y: 156 + width: 23.40625 + height: 58.90625 + xOffset: 0.3125 + yOffset: 58.9375 + xAdvance: 23.90625 + scale: 1 + - id: 240 + x: 396 + y: 134 + width: 41 + height: 64.40625 + xOffset: 3.59375 + yOffset: 63.59375 + xAdvance: 47.84375 + scale: 1 + - id: 241 + x: 280 + y: 10 + width: 36.53125 + height: 61.6875 + xOffset: 5.84375 + yOffset: 61.6875 + xAdvance: 47.84375 + scale: 1 + - id: 242 + x: 444 + y: 302 + width: 40.59375 + height: 64.15625 + xOffset: 3.59375 + yOffset: 63.34375 + xAdvance: 47.84375 + scale: 1 + - id: 243 + x: 453 + y: 218 + width: 40.59375 + height: 64.15625 + xOffset: 3.59375 + yOffset: 63.34375 + xAdvance: 47.84375 + scale: 1 + - id: 244 + x: 569 + y: 227 + width: 40.59375 + height: 63.46875 + xOffset: 3.59375 + yOffset: 62.625 + xAdvance: 47.84375 + scale: 1 + - id: 245 + x: 572 + y: 145 + width: 40.59375 + height: 62.53125 + xOffset: 3.59375 + yOffset: 61.6875 + xAdvance: 47.84375 + scale: 1 + - id: 246 + x: 842 + y: 334 + width: 40.59375 + height: 59.75 + xOffset: 3.59375 + yOffset: 58.9375 + xAdvance: 47.84375 + scale: 1 + - id: 247 + x: 786 + y: 417 + width: 41.78125 + height: 38.53125 + xOffset: 2.71875 + yOffset: 47.9375 + xAdvance: 47.1875 + scale: 1 + - id: 248 + x: 804 + y: 635 + width: 48.71875 + height: 48.46875 + xOffset: 1.84375 + yOffset: 46.875 + xAdvance: 52.53125 + scale: 1 + - id: 249 + x: 504 + y: 302 + width: 36.53125 + height: 64.15625 + xOffset: 5.8125 + yOffset: 63.34375 + xAdvance: 47.84375 + scale: 1 + - id: 250 + x: 513 + y: 218 + width: 36.53125 + height: 64.15625 + xOffset: 5.8125 + yOffset: 63.34375 + xAdvance: 47.84375 + scale: 1 + - id: 251 + x: 666 + y: 227 + width: 36.53125 + height: 63.46875 + xOffset: 5.8125 + yOffset: 62.625 + xAdvance: 47.84375 + scale: 1 + - id: 252 + x: 599 + y: 66 + width: 36.53125 + height: 59.75 + xOffset: 5.8125 + yOffset: 58.9375 + xAdvance: 47.84375 + scale: 1 + - id: 253 + x: 88 + y: 838 + width: 42.625 + height: 81.15625 + xOffset: 0.1875 + yOffset: 63.34375 + xAdvance: 43 + scale: 1 + - id: 254 + x: 88 + y: 738 + width: 38.4375 + height: 80.15625 + xOffset: 5.78125 + yOffset: 62.34375 + xAdvance: 47.84375 + scale: 1 + - id: 255 + x: 88 + y: 642 + width: 42.625 + height: 76.75 + xOffset: 0.1875 + yOffset: 58.9375 + xAdvance: 43 + scale: 1 + - id: 8192 + x: 10 + y: 1033 + width: 0 + height: 0 + xOffset: 0 + yOffset: 0 + xAdvance: 43 + scale: 1 + - id: 8193 + x: 10 + y: 1033 + width: 0 + height: 0 + xOffset: 0 + yOffset: 0 + xAdvance: 86 + scale: 1 + - id: 8194 + x: 10 + y: 1033 + width: 0 + height: 0 + xOffset: 0 + yOffset: 0 + xAdvance: 43 + scale: 1 + - id: 8195 + x: 10 + y: 1033 + width: 0 + height: 0 + xOffset: 0 + yOffset: 0 + xAdvance: 86 + scale: 1 + - id: 8196 + x: 10 + y: 1033 + width: 0 + height: 0 + xOffset: 0 + yOffset: 0 + xAdvance: 28.6875 + scale: 1 + - id: 8197 + x: 10 + y: 1033 + width: 0 + height: 0 + xOffset: 0 + yOffset: 0 + xAdvance: 21.5 + scale: 1 + - id: 8198 + x: 10 + y: 1033 + width: 0 + height: 0 + xOffset: 0 + yOffset: 0 + xAdvance: 14.3125 + scale: 1 + - id: 8199 + x: 10 + y: 1033 + width: 0 + height: 0 + xOffset: 0 + yOffset: 0 + xAdvance: 47.84375 + scale: 1 + - id: 8200 + x: 10 + y: 1033 + width: 0 + height: 0 + xOffset: 0 + yOffset: 0 + xAdvance: 23.90625 + scale: 1 + - id: 8201 + x: 10 + y: 1033 + width: 0 + height: 0 + xOffset: 0 + yOffset: 0 + xAdvance: 17.21875 + scale: 1 + - id: 8202 + x: 10 + y: 1033 + width: 0 + height: 0 + xOffset: 0 + yOffset: 0 + xAdvance: 7.1875 + scale: 1 + - id: 8203 + x: 10 + y: 1033 + width: 0 + height: 0 + xOffset: 0 + yOffset: 0 + xAdvance: 0 + scale: 1 + - id: 8204 + x: 399 + y: 470 + width: 3.5 + height: 65.5 + xOffset: -1.78125 + yOffset: 54.0625 + xAdvance: 0 + scale: 1 + - id: 8205 + x: 228 + y: 271 + width: 18.8125 + height: 70.84375 + xOffset: -9.40625 + yOffset: 59.40625 + xAdvance: 0 + scale: 1 + - id: 8206 + x: 257 + y: 181 + width: 20 + height: 70.84375 + xOffset: -1.75 + yOffset: 59.40625 + xAdvance: 0 + scale: 1 + - id: 8207 + x: 261 + y: 91 + width: 20 + height: 70.84375 + xOffset: -18.3125 + yOffset: 59.40625 + xAdvance: 0 + scale: 1 + - id: 8210 + x: 823 + y: 243 + width: 47.78125 + height: 5.75 + xOffset: 0 + yOffset: 24.71875 + xAdvance: 47.84375 + scale: 1 + - id: 8211 + x: 890 + y: 240 + width: 47.78125 + height: 5.75 + xOffset: 0 + yOffset: 24.71875 + xAdvance: 47.84375 + scale: 1 + - id: 8212 + x: 225 + y: 754 + width: 86 + height: 5.75 + xOffset: 0 + yOffset: 24.71875 + xAdvance: 86 + scale: 1 + - id: 8213 + x: 495 + y: 929 + width: 86 + height: 5.75 + xOffset: 0 + yOffset: 24.71875 + xAdvance: 86 + scale: 1 + - id: 8214 + x: 560 + y: 394 + width: 20.46875 + height: 62.3125 + xOffset: 7.5 + yOffset: 62.34375 + xAdvance: 35.53125 + scale: 1 + - id: 8215 + x: 600 + y: 617 + width: 50.09375 + height: 14.5625 + xOffset: -1.3125 + yOffset: -3.65625 + xAdvance: 47.5 + scale: 1 + - id: 8216 + x: 996 + y: 127 + width: 8.4375 + height: 19.1875 + xOffset: 5.3125 + yOffset: 59.1875 + xAdvance: 19.09375 + scale: 1 + - id: 8217 + x: 390 + y: 589 + width: 8.4375 + height: 19.1875 + xOffset: 5.3125 + yOffset: 59.1875 + xAdvance: 19.09375 + scale: 1 + - id: 8218 + x: 556 + y: 17 + width: 8.4375 + height: 19.1875 + xOffset: 5.3125 + yOffset: 8.21875 + xAdvance: 19.09375 + scale: 1 + - id: 8219 + x: 996 + y: 88 + width: 8.4375 + height: 19.1875 + xOffset: 5.28125 + yOffset: 59.1875 + xAdvance: 19.09375 + scale: 1 + - id: 8220 + x: 360 + y: 628 + width: 22.34375 + height: 19.1875 + xOffset: 3.125 + yOffset: 59.1875 + xAdvance: 28.625 + scale: 1 + - id: 8221 + x: 348 + y: 589 + width: 22.34375 + height: 19.1875 + xOffset: 3.125 + yOffset: 59.1875 + xAdvance: 28.625 + scale: 1 + - id: 8222 + x: 514 + y: 17 + width: 22.34375 + height: 19.1875 + xOffset: 3.125 + yOffset: 8.21875 + xAdvance: 28.625 + scale: 1 + - id: 8223 + x: 766 + y: 41 + width: 21.4375 + height: 19.1875 + xOffset: 3 + yOffset: 59.1875 + xAdvance: 28.625 + scale: 1 + - id: 8224 + x: 207 + y: 471 + width: 36.28125 + height: 68.09375 + xOffset: 5.78125 + yOffset: 62.34375 + xAdvance: 47.84375 + scale: 1 + - id: 8225 + x: 249 + y: 560 + width: 36.3125 + height: 68.21875 + xOffset: 5.6875 + yOffset: 62.34375 + xAdvance: 47.84375 + scale: 1 + - id: 8226 + x: 305 + y: 587 + width: 23.3125 + height: 23.3125 + xOffset: 3.375 + yOffset: 40.15625 + xAdvance: 30.09375 + scale: 1 + - id: 8230 + x: 330 + y: 750 + width: 62.625 + height: 9.1875 + xOffset: 11.65625 + yOffset: 9.21875 + xAdvance: 86 + scale: 1 + - id: 8234 + x: 560 + y: 311 + width: 20 + height: 63.25 + xOffset: -1.75 + yOffset: 51.78125 + xAdvance: 0 + scale: 1 + - id: 8235 + x: 696 + y: 310 + width: 20 + height: 63.25 + xOffset: -18.28125 + yOffset: 51.78125 + xAdvance: 0 + scale: 1 + - id: 8236 + x: 266 + y: 281 + width: 20 + height: 70.71875 + xOffset: -10 + yOffset: 59.28125 + xAdvance: 0 + scale: 1 + - id: 8237 + x: 305 + y: 296 + width: 20 + height: 70.71875 + xOffset: -10 + yOffset: 59.28125 + xAdvance: 0 + scale: 1 + - id: 8238 + x: 296 + y: 191 + width: 20 + height: 70.71875 + xOffset: -10 + yOffset: 59.28125 + xAdvance: 0 + scale: 1 + - id: 8239 + x: 10 + y: 1033 + width: 0 + height: 0 + xOffset: 0 + yOffset: 0 + xAdvance: 17.21875 + scale: 1 + - id: 8240 + x: 103 + y: 953 + width: 81.34375 + height: 60.125 + xOffset: 2.28125 + yOffset: 59.6875 + xAdvance: 86 + scale: 1 + - id: 8242 + x: 908 + y: 141 + width: 10.9375 + height: 21.78125 + xOffset: 3.5625 + yOffset: 59.1875 + xAdvance: 16.125 + scale: 1 + - id: 8243 + x: 315 + y: 630 + width: 25.3125 + height: 21.78125 + xOffset: 3.5625 + yOffset: 59.1875 + xAdvance: 30.4375 + scale: 1 + - id: 8244 + x: 459 + y: 14 + width: 34.25 + height: 21.78125 + xOffset: -3.875 + yOffset: 59.1875 + xAdvance: 30.4375 + scale: 1 + - id: 8249 + x: 955 + y: 113 + width: 21.21875 + height: 33.5625 + xOffset: 3.6875 + yOffset: 39.5 + xAdvance: 28.625 + scale: 1 + - id: 8250 + x: 956 + y: 34 + width: 21.1875 + height: 33.5625 + xOffset: 3.71875 + yOffset: 39.5 + xAdvance: 28.625 + scale: 1 + - id: 8252 + x: 749 + y: 234 + width: 27.46875 + height: 59.15625 + xOffset: 7.75 + yOffset: 59.1875 + xAdvance: 43 + scale: 1 + - id: 8254 + x: 969 + y: 166 + width: 34.0625 + height: 4.90625 + xOffset: -2.6875 + yOffset: 68.03125 + xAdvance: 28.625 + scale: 1 + - id: 8260 + x: 600 + y: 458 + width: 43.09375 + height: 59.15625 + xOffset: -17.46875 + yOffset: 59.1875 + xAdvance: 14.375 + scale: 1 + - id: 8286 + x: 738 + y: 64 + width: 8.1875 + height: 62.3125 + xOffset: 7.84375 + yOffset: 62.34375 + xAdvance: 23.90625 + scale: 1 + - id: 8298 + x: 300 + y: 101 + width: 20 + height: 70.71875 + xOffset: -10 + yOffset: 59.28125 + xAdvance: 0 + scale: 1 + - id: 8299 + x: 321 + y: 465 + width: 20 + height: 70.71875 + xOffset: -10 + yOffset: 59.28125 + xAdvance: 0 + scale: 1 + - id: 8300 + x: 281 + y: 386 + width: 20.15625 + height: 70.71875 + xOffset: -10.09375 + yOffset: 59.28125 + xAdvance: 0 + scale: 1 + - id: 8301 + x: 993 + y: 529 + width: 20.15625 + height: 71 + xOffset: -10.09375 + yOffset: 59.5625 + xAdvance: 0 + scale: 1 + - id: 8302 + x: 344 + y: 296 + width: 20.0625 + height: 70.84375 + xOffset: -10.0625 + yOffset: 59.40625 + xAdvance: 0 + scale: 1 + - id: 8303 + x: 360 + y: 465 + width: 20 + height: 70.71875 + xOffset: -10 + yOffset: 59.28125 + xAdvance: 0 + scale: 1 + - id: 8364 + x: 800 + y: 555 + width: 45.9375 + height: 60.90625 + xOffset: 0.65625 + yOffset: 60.0625 + xAdvance: 47.84375 + scale: 1 + - id: 8482 + x: 481 + y: 877 + width: 68.40625 + height: 32.53125 + xOffset: 7.875 + yOffset: 59.1875 + xAdvance: 86 + scale: 1 + - id: 9633 + x: 737 + y: 721 + width: 51.4375 + height: 51.4375 + xOffset: 0.25 + yOffset: 51.46875 + xAdvance: 51.9375 + scale: 1 + m_kerningInfo: + kerningPairs: + - m_FirstGlyph: 32 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 65 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 32 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 89 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 32 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 84 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 87 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -3.1914062 + yAdvance: 0 + m_SecondGlyph: 97 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -3.1914062 + - m_FirstGlyph: 87 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -3.1914062 + yAdvance: 0 + m_SecondGlyph: 65 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -3.1914062 + - m_FirstGlyph: 87 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 101 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 87 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -0.7558594 + yAdvance: 0 + m_SecondGlyph: 121 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -0.7558594 + - m_FirstGlyph: 87 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 111 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 87 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 114 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 87 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 44 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 87 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 59 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 87 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 117 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 87 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 58 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 87 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 45 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 87 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 46 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 119 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 44 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 119 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 46 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 65 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 32 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 65 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -3.1914062 + yAdvance: 0 + m_SecondGlyph: 87 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -3.1914062 + - m_FirstGlyph: 65 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 119 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 65 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 86 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 65 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 89 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 65 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 84 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 65 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 121 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 65 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 118 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 65 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 8217 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 86 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 97 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 86 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 65 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 86 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 101 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 86 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -3.1914062 + yAdvance: 0 + m_SecondGlyph: 121 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -3.1914062 + - m_FirstGlyph: 86 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 105 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 86 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 111 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 86 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -3.1914062 + yAdvance: 0 + m_SecondGlyph: 114 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -3.1914062 + - m_FirstGlyph: 86 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -7.8945312 + yAdvance: 0 + m_SecondGlyph: 44 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -7.8945312 + - m_FirstGlyph: 86 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -3.1914062 + yAdvance: 0 + m_SecondGlyph: 59 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -3.1914062 + - m_FirstGlyph: 86 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -3.1914062 + yAdvance: 0 + m_SecondGlyph: 117 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -3.1914062 + - m_FirstGlyph: 86 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -3.1914062 + yAdvance: 0 + m_SecondGlyph: 58 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -3.1914062 + - m_FirstGlyph: 86 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 45 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 86 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -7.8945312 + yAdvance: 0 + m_SecondGlyph: 46 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -7.8945312 + - m_FirstGlyph: 89 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 32 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 89 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 97 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 89 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 65 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 89 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -7.8945312 + yAdvance: 0 + m_SecondGlyph: 101 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -7.8945312 + - m_FirstGlyph: 89 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 112 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 89 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -7.8945312 + yAdvance: 0 + m_SecondGlyph: 113 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -7.8945312 + - m_FirstGlyph: 89 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 118 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 89 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -3.1914062 + yAdvance: 0 + m_SecondGlyph: 105 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -3.1914062 + - m_FirstGlyph: 89 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -7.8945312 + yAdvance: 0 + m_SecondGlyph: 111 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -7.8945312 + - m_FirstGlyph: 89 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -11.0859375 + yAdvance: 0 + m_SecondGlyph: 44 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -11.0859375 + - m_FirstGlyph: 89 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -5.584961 + yAdvance: 0 + m_SecondGlyph: 59 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -5.584961 + - m_FirstGlyph: 89 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 117 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 89 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 58 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 89 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -7.8945312 + yAdvance: 0 + m_SecondGlyph: 45 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -7.8945312 + - m_FirstGlyph: 89 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -11.0859375 + yAdvance: 0 + m_SecondGlyph: 46 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -11.0859375 + - m_FirstGlyph: 82 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 87 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 82 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 86 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 82 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 89 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 82 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 84 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 84 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 32 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 84 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -9.532227 + yAdvance: 0 + m_SecondGlyph: 97 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -9.532227 + - m_FirstGlyph: 84 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -9.532227 + yAdvance: 0 + m_SecondGlyph: 99 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -9.532227 + - m_FirstGlyph: 84 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 79 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 84 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 119 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 84 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 65 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 84 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -9.532227 + yAdvance: 0 + m_SecondGlyph: 101 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -9.532227 + - m_FirstGlyph: 84 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 121 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 84 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -3.1914062 + yAdvance: 0 + m_SecondGlyph: 105 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -3.1914062 + - m_FirstGlyph: 84 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -9.532227 + yAdvance: 0 + m_SecondGlyph: 111 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -9.532227 + - m_FirstGlyph: 84 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -3.1914062 + yAdvance: 0 + m_SecondGlyph: 114 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -3.1914062 + - m_FirstGlyph: 84 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -9.532227 + yAdvance: 0 + m_SecondGlyph: 115 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -9.532227 + - m_FirstGlyph: 84 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -9.532227 + yAdvance: 0 + m_SecondGlyph: 44 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -9.532227 + - m_FirstGlyph: 84 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -9.532227 + yAdvance: 0 + m_SecondGlyph: 59 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -9.532227 + - m_FirstGlyph: 84 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -3.1914062 + yAdvance: 0 + m_SecondGlyph: 117 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -3.1914062 + - m_FirstGlyph: 84 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -9.532227 + yAdvance: 0 + m_SecondGlyph: 58 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -9.532227 + - m_FirstGlyph: 84 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 45 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 84 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -9.532227 + yAdvance: 0 + m_SecondGlyph: 46 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -9.532227 + - m_FirstGlyph: 80 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 32 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 80 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 65 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 80 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -11.0859375 + yAdvance: 0 + m_SecondGlyph: 44 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -11.0859375 + - m_FirstGlyph: 80 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -11.0859375 + yAdvance: 0 + m_SecondGlyph: 46 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -11.0859375 + - m_FirstGlyph: 49 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 49 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 121 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 44 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 121 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 46 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 70 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 65 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 70 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -9.532227 + yAdvance: 0 + m_SecondGlyph: 44 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -9.532227 + - m_FirstGlyph: 70 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -9.532227 + yAdvance: 0 + m_SecondGlyph: 46 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -9.532227 + - m_FirstGlyph: 118 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 44 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 118 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 46 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 102 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 102 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 102 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 1.5537109 + yAdvance: 0 + m_SecondGlyph: 8217 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: 1.5537109 + - m_FirstGlyph: 76 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -3.1914062 + yAdvance: 0 + m_SecondGlyph: 32 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -3.1914062 + - m_FirstGlyph: 76 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 87 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 76 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 86 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 76 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 89 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 76 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -6.3828125 + yAdvance: 0 + m_SecondGlyph: 84 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -6.3828125 + - m_FirstGlyph: 76 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -3.1914062 + yAdvance: 0 + m_SecondGlyph: 121 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -3.1914062 + - m_FirstGlyph: 76 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 8217 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 114 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 44 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 114 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -4.745117 + yAdvance: 0 + m_SecondGlyph: 46 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -4.745117 + - m_FirstGlyph: 114 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 3.1914062 + yAdvance: 0 + m_SecondGlyph: 8217 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: 3.1914062 + - m_FirstGlyph: 8216 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 8216 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 8217 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -3.1914062 + yAdvance: 0 + m_SecondGlyph: 32 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -3.1914062 + - m_FirstGlyph: 8217 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 115 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + - m_FirstGlyph: 8217 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: -1.5537109 + yAdvance: 0 + m_SecondGlyph: 8217 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: -1.5537109 + m_kerningPair: + m_FirstGlyph: 0 + m_FirstGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + m_SecondGlyph: 0 + m_SecondGlyphAdjustments: + xPlacement: 0 + yPlacement: 0 + xAdvance: 0 + yAdvance: 0 + xOffset: 0 + fallbackFontAssets: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: e3265ab4bf004d28a9537516768c1c75 + pointSizeSamplingMode: 1 + pointSize: 86 + padding: 9 + packingMode: 4 + atlasWidth: 1024 + atlasHeight: 1024 + characterSetSelectionMode: 1 + characterSequence: 32 - 126, 160 - 255, 8192 - 8303, 8364, 8482, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 2 + renderMode: 7 + includeFontFeatures: 0 + fontWeights: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 diff --git a/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset.meta b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset.meta new file mode 100644 index 0000000..66e69d1 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8f586378b4e144a9851e7b34d9b748ee +timeCreated: 1484171803 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/LineBreaking Following Characters.txt b/Assets/TextMesh Pro/Resources/LineBreaking Following Characters.txt new file mode 100644 index 0000000..a52cc38 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/LineBreaking Following Characters.txt @@ -0,0 +1 @@ +)]}〕〉》」』】〙〗〟’”⦆»ヽヾーァィゥェォッャュョヮヵヶぁぃぅぇぉっゃゅょゎゕゖㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ々〻‐゠–〜?!‼⁇⁈⁉・、%,.:;。!?]):;=}¢°"†‡℃〆%,. \ No newline at end of file diff --git a/Assets/TextMesh Pro/Resources/LineBreaking Following Characters.txt.meta b/Assets/TextMesh Pro/Resources/LineBreaking Following Characters.txt.meta new file mode 100644 index 0000000..73ed660 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/LineBreaking Following Characters.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fade42e8bc714b018fac513c043d323b +timeCreated: 1425440388 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/LineBreaking Leading Characters.txt b/Assets/TextMesh Pro/Resources/LineBreaking Leading Characters.txt new file mode 100644 index 0000000..285696e --- /dev/null +++ b/Assets/TextMesh Pro/Resources/LineBreaking Leading Characters.txt @@ -0,0 +1 @@ +([{〔〈《「『【〘〖〝‘“⦅«$—…‥〳〴〵\[({£¥"々〇〉》」$⦆¥₩ # \ No newline at end of file diff --git a/Assets/TextMesh Pro/Resources/LineBreaking Leading Characters.txt.meta b/Assets/TextMesh Pro/Resources/LineBreaking Leading Characters.txt.meta new file mode 100644 index 0000000..cc684b3 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/LineBreaking Leading Characters.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d82c1b31c7e74239bff1220585707d2b +timeCreated: 1425440388 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Shaders.meta b/Assets/TextMesh Pro/Resources/Shaders.meta new file mode 100644 index 0000000..622b295 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 99f836c9cb9345dba2e72c4a1f2d0695 +folderAsset: yes +timeCreated: 1436068007 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap-Custom-Atlas.shader b/Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap-Custom-Atlas.shader new file mode 100644 index 0000000..c130a16 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap-Custom-Atlas.shader @@ -0,0 +1,142 @@ +Shader "TextMeshPro/Bitmap Custom Atlas" { + +Properties { + _MainTex ("Font Atlas", 2D) = "white" {} + _FaceTex ("Font Texture", 2D) = "white" {} + _FaceColor ("Text Color", Color) = (1,1,1,1) + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + _MaskSoftnessX ("Mask SoftnessX", float) = 0 + _MaskSoftnessY ("Mask SoftnessY", float) = 0 + + _ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + _Padding ("Padding", float) = 0 + + _StencilComp("Stencil Comparison", Float) = 8 + _Stencil("Stencil ID", Float) = 0 + _StencilOp("Stencil Operation", Float) = 0 + _StencilWriteMask("Stencil Write Mask", Float) = 255 + _StencilReadMask("Stencil Read Mask", Float) = 255 + + _ColorMask("Color Mask", Float) = 15 +} + +SubShader{ + + Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } + + Stencil + { + Ref[_Stencil] + Comp[_StencilComp] + Pass[_StencilOp] + ReadMask[_StencilReadMask] + WriteMask[_StencilWriteMask] + } + + + Lighting Off + Cull [_CullMode] + ZTest [unity_GUIZTestMode] + ZWrite Off + Fog { Mode Off } + Blend SrcAlpha OneMinusSrcAlpha + ColorMask[_ColorMask] + + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + + #include "UnityCG.cginc" + + struct appdata_t { + float4 vertex : POSITION; + fixed4 color : COLOR; + float2 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct v2f { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + float2 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + float4 mask : TEXCOORD2; + }; + + uniform sampler2D _MainTex; + uniform sampler2D _FaceTex; + uniform float4 _FaceTex_ST; + uniform fixed4 _FaceColor; + + uniform float _VertexOffsetX; + uniform float _VertexOffsetY; + uniform float4 _ClipRect; + uniform float _MaskSoftnessX; + uniform float _MaskSoftnessY; + + float2 UnpackUV(float uv) + { + float2 output; + output.x = floor(uv / 4096); + output.y = uv - 4096 * output.x; + + return output * 0.001953125; + } + + v2f vert (appdata_t v) + { + float4 vert = v.vertex; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + + vert.xy += (vert.w * 0.5) / _ScreenParams.xy; + + float4 vPosition = UnityPixelSnap(UnityObjectToClipPos(vert)); + + fixed4 faceColor = v.color; + faceColor *= _FaceColor; + + v2f OUT; + OUT.vertex = vPosition; + OUT.color = faceColor; + OUT.texcoord0 = v.texcoord0; + OUT.texcoord1 = TRANSFORM_TEX(UnpackUV(v.texcoord1), _FaceTex); + float2 pixelSize = vPosition.w; + pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1])); + + // Clamp _ClipRect to 16bit. + float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); + + return OUT; + } + + fixed4 frag (v2f IN) : SV_Target + { + fixed4 color = tex2D(_MainTex, IN.texcoord0) * tex2D(_FaceTex, IN.texcoord1) * IN.color; + + // Alternative implementation to UnityGet2DClipping with support for softness. + #if UNITY_UI_CLIP_RECT + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); + color *= m.x * m.y; + #endif + + #if UNITY_UI_ALPHACLIP + clip(color.a - 0.001); + #endif + + return color; + } + ENDCG + } +} + + CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI" +} diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta b/Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta new file mode 100644 index 0000000..ffea03c --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 48bb5f55d8670e349b6e614913f9d910 +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap-Mobile.shader b/Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap-Mobile.shader new file mode 100644 index 0000000..1517a12 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap-Mobile.shader @@ -0,0 +1,144 @@ +Shader "TextMeshPro/Mobile/Bitmap" { + +Properties { + _MainTex ("Font Atlas", 2D) = "white" {} + _Color ("Text Color", Color) = (1,1,1,1) + _DiffusePower ("Diffuse Power", Range(1.0,4.0)) = 1.0 + + _VertexOffsetX("Vertex OffsetX", float) = 0 + _VertexOffsetY("Vertex OffsetY", float) = 0 + _MaskSoftnessX("Mask SoftnessX", float) = 0 + _MaskSoftnessY("Mask SoftnessY", float) = 0 + + _ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + + _StencilComp("Stencil Comparison", Float) = 8 + _Stencil("Stencil ID", Float) = 0 + _StencilOp("Stencil Operation", Float) = 0 + _StencilWriteMask("Stencil Write Mask", Float) = 255 + _StencilReadMask("Stencil Read Mask", Float) = 255 + + _ColorMask("Color Mask", Float) = 15 +} + +SubShader { + + Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } + + Stencil + { + Ref[_Stencil] + Comp[_StencilComp] + Pass[_StencilOp] + ReadMask[_StencilReadMask] + WriteMask[_StencilWriteMask] + } + + + Lighting Off + Cull Off + ZTest [unity_GUIZTestMode] + ZWrite Off + Fog { Mode Off } + Blend SrcAlpha OneMinusSrcAlpha + ColorMask[_ColorMask] + + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma fragmentoption ARB_precision_hint_fastest + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + + #include "UnityCG.cginc" + + struct appdata_t { + float4 vertex : POSITION; + fixed4 color : COLOR; + float2 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct v2f { + float4 vertex : POSITION; + fixed4 color : COLOR; + float2 texcoord0 : TEXCOORD0; + float4 mask : TEXCOORD2; + }; + + sampler2D _MainTex; + fixed4 _Color; + float _DiffusePower; + + uniform float _VertexOffsetX; + uniform float _VertexOffsetY; + uniform float4 _ClipRect; + uniform float _MaskSoftnessX; + uniform float _MaskSoftnessY; + + v2f vert (appdata_t v) + { + v2f OUT; + float4 vert = v.vertex; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + + vert.xy += (vert.w * 0.5) / _ScreenParams.xy; + + OUT.vertex = UnityPixelSnap(UnityObjectToClipPos(vert)); + OUT.color = v.color; + OUT.color *= _Color; + OUT.color.rgb *= _DiffusePower; + OUT.texcoord0 = v.texcoord0; + + float2 pixelSize = OUT.vertex.w; + //pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1])); + + // Clamp _ClipRect to 16bit. + float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); + + return OUT; + } + + fixed4 frag (v2f IN) : COLOR + { + fixed4 color = fixed4(IN.color.rgb, IN.color.a * tex2D(_MainTex, IN.texcoord0).a); + + // Alternative implementation to UnityGet2DClipping with support for softness. + #if UNITY_UI_CLIP_RECT + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); + color *= m.x * m.y; + #endif + + #if UNITY_UI_ALPHACLIP + clip(color.a - 0.001); + #endif + + return color; + } + ENDCG + } +} + +SubShader { + Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } + Lighting Off Cull Off ZTest Always ZWrite Off Fog { Mode Off } + Blend SrcAlpha OneMinusSrcAlpha + BindChannels { + Bind "Color", color + Bind "Vertex", vertex + Bind "TexCoord", texcoord0 + } + Pass { + SetTexture [_MainTex] { + constantColor [_Color] combine constant * primary, constant * texture + } + } +} + +CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI" +} diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap-Mobile.shader.meta b/Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap-Mobile.shader.meta new file mode 100644 index 0000000..8d516c0 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap-Mobile.shader.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1e3b057af24249748ff873be7fafee47 +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap.shader b/Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap.shader new file mode 100644 index 0000000..f4e324a --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap.shader @@ -0,0 +1,142 @@ +Shader "TextMeshPro/Bitmap" { + +Properties { + _MainTex ("Font Atlas", 2D) = "white" {} + _FaceTex ("Font Texture", 2D) = "white" {} + _FaceColor ("Text Color", Color) = (1,1,1,1) + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + _MaskSoftnessX ("Mask SoftnessX", float) = 0 + _MaskSoftnessY ("Mask SoftnessY", float) = 0 + + _ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + + _StencilComp("Stencil Comparison", Float) = 8 + _Stencil("Stencil ID", Float) = 0 + _StencilOp("Stencil Operation", Float) = 0 + _StencilWriteMask("Stencil Write Mask", Float) = 255 + _StencilReadMask("Stencil Read Mask", Float) = 255 + + _ColorMask("Color Mask", Float) = 15 +} + +SubShader{ + + Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } + + Stencil + { + Ref[_Stencil] + Comp[_StencilComp] + Pass[_StencilOp] + ReadMask[_StencilReadMask] + WriteMask[_StencilWriteMask] + } + + + Lighting Off + Cull [_CullMode] + ZTest [unity_GUIZTestMode] + ZWrite Off + Fog { Mode Off } + Blend SrcAlpha OneMinusSrcAlpha + ColorMask[_ColorMask] + + Pass { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + + #include "UnityCG.cginc" + + struct appdata_t { + float4 vertex : POSITION; + fixed4 color : COLOR; + float2 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct v2f { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + float2 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + float4 mask : TEXCOORD2; + }; + + uniform sampler2D _MainTex; + uniform sampler2D _FaceTex; + uniform float4 _FaceTex_ST; + uniform fixed4 _FaceColor; + + uniform float _VertexOffsetX; + uniform float _VertexOffsetY; + uniform float4 _ClipRect; + uniform float _MaskSoftnessX; + uniform float _MaskSoftnessY; + + float2 UnpackUV(float uv) + { + float2 output; + output.x = floor(uv / 4096); + output.y = uv - 4096 * output.x; + + return output * 0.001953125; + } + + v2f vert (appdata_t v) + { + float4 vert = v.vertex; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + + vert.xy += (vert.w * 0.5) / _ScreenParams.xy; + + float4 vPosition = UnityPixelSnap(UnityObjectToClipPos(vert)); + + fixed4 faceColor = v.color; + faceColor *= _FaceColor; + + v2f OUT; + OUT.vertex = vPosition; + OUT.color = faceColor; + OUT.texcoord0 = v.texcoord0; + OUT.texcoord1 = TRANSFORM_TEX(UnpackUV(v.texcoord1), _FaceTex); + float2 pixelSize = vPosition.w; + pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1])); + + // Clamp _ClipRect to 16bit. + float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); + + return OUT; + } + + fixed4 frag (v2f IN) : SV_Target + { + fixed4 color = tex2D(_MainTex, IN.texcoord0); + color = fixed4 (tex2D(_FaceTex, IN.texcoord1).rgb * IN.color.rgb, IN.color.a * color.a); + + // Alternative implementation to UnityGet2DClipping with support for softness. + #if UNITY_UI_CLIP_RECT + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); + color *= m.x * m.y; + #endif + + #if UNITY_UI_ALPHACLIP + clip(color.a - 0.001); + #endif + + return color; + } + ENDCG + } +} + + CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI" +} diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap.shader.meta b/Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap.shader.meta new file mode 100644 index 0000000..2d5438f --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_Bitmap.shader.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 128e987d567d4e2c824d754223b3f3b0 +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF Overlay.shader b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF Overlay.shader new file mode 100644 index 0000000..8c461cf --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF Overlay.shader @@ -0,0 +1,304 @@ +Shader "TextMeshPro/Distance Field Overlay" { + +Properties { + _FaceTex ("Face Texture", 2D) = "white" {} + _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 + _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 + _FaceColor ("Face Color", Color) = (1,1,1,1) + _FaceDilate ("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineTex ("Outline Texture", 2D) = "white" {} + _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 + _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 + _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 + _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 + + _Bevel ("Bevel", Range(0,1)) = 0.5 + _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 + _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 + _BevelClamp ("Bevel Clamp", Range(0,1)) = 0 + _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 + + _LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416 + _SpecularColor ("Specular", Color) = (1,1,1,1) + _SpecularPower ("Specular", Range(0,4)) = 2.0 + _Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10 + _Diffuse ("Diffuse", Range(0,1)) = 0.5 + _Ambient ("Ambient", Range(1,0)) = 0.5 + + _BumpMap ("Normal map", 2D) = "bump" {} + _BumpOutline ("Bump Outline", Range(0,1)) = 0 + _BumpFace ("Bump Face", Range(0,1)) = 0 + + _ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1) + _ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1) + _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } + _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) + + + _UnderlayColor ("Border Color", Color) = (0,0,0, 0.5) + _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 + _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 + _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 + _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 + + _GlowColor ("Color", Color) = (0, 1, 0, 0.5) + _GlowOffset ("Offset", Range(-1,1)) = 0 + _GlowInner ("Inner", Range(0,1)) = 0.05 + _GlowOuter ("Outer", Range(0,1)) = 0.05 + _GlowPower ("Falloff", Range(1, 0)) = 0.75 + + _WeightNormal ("Weight Normal", float) = 0 + _WeightBold ("Weight Bold", float) = 0.5 + + _ShaderFlags ("Flags", float) = 0 + _ScaleRatioA ("Scale RatioA", float) = 1 + _ScaleRatioB ("Scale RatioB", float) = 1 + _ScaleRatioC ("Scale RatioC", float) = 1 + + _MainTex ("Font Atlas", 2D) = "white" {} + _TextureWidth ("Texture Width", float) = 512 + _TextureHeight ("Texture Height", float) = 512 + _GradientScale ("Gradient Scale", float) = 5.0 + _ScaleX ("Scale X", float) = 1.0 + _ScaleY ("Scale Y", float) = 1.0 + _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + + _MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767) + _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + _MaskSoftnessX ("Mask SoftnessX", float) = 0 + _MaskSoftnessY ("Mask SoftnessY", float) = 0 + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _ColorMask ("Color Mask", Float) = 15 +} + +SubShader { + + Tags + { + "Queue"="Overlay" + "IgnoreProjector"="True" + "RenderType"="Transparent" + } + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull [_CullMode] + ZWrite Off + Lighting Off + Fog { Mode Off } + ZTest Always + Blend One OneMinusSrcAlpha + ColorMask [_ColorMask] + + Pass { + CGPROGRAM + #pragma target 3.0 + #pragma vertex VertShader + #pragma fragment PixShader + #pragma shader_feature __ BEVEL_ON + #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER + #pragma shader_feature __ GLOW_ON + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + #include "TMPro_Properties.cginc" + #include "TMPro.cginc" + + struct vertex_t { + float4 position : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float2 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + + struct pixel_t { + float4 position : SV_POSITION; + fixed4 color : COLOR; + float2 atlas : TEXCOORD0; // Atlas + float4 param : TEXCOORD1; // alphaClip, scale, bias, weight + float4 mask : TEXCOORD2; // Position in object space(xy), pixel Size(zw) + float3 viewDir : TEXCOORD3; + + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4 texcoord2 : TEXCOORD4; // u,v, scale, bias + fixed4 underlayColor : COLOR1; + #endif + float4 textures : TEXCOORD5; + }; + + // Used by Unity internally to handle Texture Tiling and Offset. + float4 _FaceTex_ST; + float4 _OutlineTex_ST; + + pixel_t VertShader(vertex_t input) + { + float bold = step(input.texcoord1.y, 0); + + float4 vert = input.position; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + float4 vPosition = UnityObjectToClipPos(vert); + + float2 pixelSize = vPosition.w; + pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); + float scale = rsqrt(dot(pixelSize, pixelSize)); + scale *= abs(input.texcoord1.y) * _GradientScale * 1.5; + if (UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); + + float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; + weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; + + float bias =(.5 - weight) + (.5 / scale); + + float alphaClip = (1.0 - _OutlineWidth*_ScaleRatioA - _OutlineSoftness*_ScaleRatioA); + + #if GLOW_ON + alphaClip = min(alphaClip, 1.0 - _GlowOffset * _ScaleRatioB - _GlowOuter * _ScaleRatioB); + #endif + + alphaClip = alphaClip / 2.0 - ( .5 / scale) - weight; + + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4 underlayColor = _UnderlayColor; + underlayColor.rgb *= underlayColor.a; + + float bScale = scale; + bScale /= 1 + ((_UnderlaySoftness*_ScaleRatioC) * bScale); + float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale); + + float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; + float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; + float2 bOffset = float2(x, y); + #endif + + // Generate UV for the Masking Texture + float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); + + // Support for texture tiling and offset + float2 textureUV = UnpackUV(input.texcoord1.x); + float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex); + float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex); + + pixel_t output = { + vPosition, + input.color, + input.texcoord0, + float4(alphaClip, scale, bias, weight), + half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)), + mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz), + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4(input.texcoord0 + bOffset, bScale, bBias), + underlayColor, + #endif + float4(faceUV, outlineUV), + }; + + return output; + } + + + fixed4 PixShader(pixel_t input) : SV_Target + { + float c = tex2D(_MainTex, input.atlas).a; + + #ifndef UNDERLAY_ON + clip(c - input.param.x); + #endif + + float scale = input.param.y; + float bias = input.param.z; + float weight = input.param.w; + float sd = (bias - c) * scale; + + float outline = (_OutlineWidth * _ScaleRatioA) * scale; + float softness = (_OutlineSoftness * _ScaleRatioA) * scale; + + half4 faceColor = _FaceColor; + half4 outlineColor = _OutlineColor; + + faceColor.rgb *= input.color.rgb; + + faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y); + outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y); + + faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); + + #if BEVEL_ON + float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0); + float3 n = GetSurfaceNormal(input.atlas, weight, dxy); + + float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz; + bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); + n = normalize(n- bump); + + float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0)); + + float3 col = GetSpecular(n, light); + faceColor.rgb += col*faceColor.a; + faceColor.rgb *= 1-(dot(n, light)*_Diffuse); + faceColor.rgb *= lerp(_Ambient, 1, n.z*n.z); + + fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n)); + faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; + #endif + + #if UNDERLAY_ON + float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; + faceColor += input.underlayColor * saturate(d - input.texcoord2.w) * (1 - faceColor.a); + #endif + + #if UNDERLAY_INNER + float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; + faceColor += input.underlayColor * (1 - saturate(d - input.texcoord2.w)) * saturate(1 - sd) * (1 - faceColor.a); + #endif + + #if GLOW_ON + float4 glowColor = GetGlowColor(sd, scale); + faceColor.rgb += glowColor.rgb * glowColor.a; + #endif + + // Alternative implementation to UnityGet2DClipping with support for softness. + #if UNITY_UI_CLIP_RECT + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); + faceColor *= m.x * m.y; + #endif + + #if UNITY_UI_ALPHACLIP + clip(faceColor.a - 0.001); + #endif + + return faceColor * input.color.a; + } + + ENDCG + } +} + +Fallback "TextMeshPro/Mobile/Distance Field" +CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF Overlay.shader.meta b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF Overlay.shader.meta new file mode 100644 index 0000000..6c8679f --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF Overlay.shader.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dd89cf5b9246416f84610a006f916af7 +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile Masking.shader b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile Masking.shader new file mode 100644 index 0000000..8dd81a3 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile Masking.shader @@ -0,0 +1,245 @@ +// Simplified SDF shader: +// - No Shading Option (bevel / bump / env map) +// - No Glow Option +// - Softness is applied on both side of the outline + +Shader "TextMeshPro/Mobile/Distance Field - Masking" { + +Properties { + _FaceColor ("Face Color", Color) = (1,1,1,1) + _FaceDilate ("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineWidth ("Outline Thickness", Range(0,1)) = 0 + _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 + + _UnderlayColor ("Border Color", Color) = (0,0,0,.5) + _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 + _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 + _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 + _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 + + _WeightNormal ("Weight Normal", float) = 0 + _WeightBold ("Weight Bold", float) = .5 + + _ShaderFlags ("Flags", float) = 0 + _ScaleRatioA ("Scale RatioA", float) = 1 + _ScaleRatioB ("Scale RatioB", float) = 1 + _ScaleRatioC ("Scale RatioC", float) = 1 + + _MainTex ("Font Atlas", 2D) = "white" {} + _TextureWidth ("Texture Width", float) = 512 + _TextureHeight ("Texture Height", float) = 512 + _GradientScale ("Gradient Scale", float) = 5 + _ScaleX ("Scale X", float) = 1 + _ScaleY ("Scale Y", float) = 1 + _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + + _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + _MaskSoftnessX ("Mask SoftnessX", float) = 0 + _MaskSoftnessY ("Mask SoftnessY", float) = 0 + _MaskTex ("Mask Texture", 2D) = "white" {} + _MaskInverse ("Inverse", float) = 0 + _MaskEdgeColor ("Edge Color", Color) = (1,1,1,1) + _MaskEdgeSoftness ("Edge Softness", Range(0, 1)) = 0.01 + _MaskWipeControl ("Wipe Position", Range(0, 1)) = 0.5 + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _ColorMask ("Color Mask", Float) = 15 +} + +SubShader { + Tags + { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + } + + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull [_CullMode] + ZWrite Off + Lighting Off + Fog { Mode Off } + ZTest [unity_GUIZTestMode] + Blend One OneMinusSrcAlpha + ColorMask [_ColorMask] + + Pass { + CGPROGRAM + #pragma vertex VertShader + #pragma fragment PixShader + #pragma shader_feature __ OUTLINE_ON + #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + #include "TMPro_Properties.cginc" + + struct vertex_t { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float2 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct pixel_t { + float4 vertex : SV_POSITION; + fixed4 faceColor : COLOR; + fixed4 outlineColor : COLOR1; + float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV + half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w) + half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw) + #if (UNDERLAY_ON | UNDERLAY_INNER) + float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved + half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y) + #endif + }; + + float _MaskWipeControl; + float _MaskEdgeSoftness; + fixed4 _MaskEdgeColor; + bool _MaskInverse; + + pixel_t VertShader(vertex_t input) + { + float bold = step(input.texcoord1.y, 0); + + float4 vert = input.vertex; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + float4 vPosition = UnityObjectToClipPos(vert); + + float2 pixelSize = vPosition.w; + pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); + + float scale = rsqrt(dot(pixelSize, pixelSize)); + scale *= abs(input.texcoord1.y) * _GradientScale * 1.5; + if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); + + float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; + weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; + + float layerScale = scale; + + scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); + float bias = (0.5 - weight) * scale - 0.5; + float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale; + + float opacity = input.color.a; + #if (UNDERLAY_ON | UNDERLAY_INNER) + opacity = 1.0; + #endif + + fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; + faceColor.rgb *= faceColor.a; + + fixed4 outlineColor = _OutlineColor; + outlineColor.a *= opacity; + outlineColor.rgb *= outlineColor.a; + outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2)))); + + #if (UNDERLAY_ON | UNDERLAY_INNER) + + layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); + float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); + + float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; + float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; + float2 layerOffset = float2(x, y); + #endif + + // Generate UV for the Masking Texture + float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); + + // Structure for pixel shader + pixel_t output = { + vPosition, + faceColor, + outlineColor, + float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y), + half4(scale, bias - outline, bias + outline, bias), + half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)), + #if (UNDERLAY_ON | UNDERLAY_INNER) + float4(input.texcoord0 + layerOffset, input.color.a, 0), + half2(layerScale, layerBias), + #endif + }; + + return output; + } + + + // PIXEL SHADER + fixed4 PixShader(pixel_t input) : SV_Target + { + half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x; + half4 c = input.faceColor * saturate(d - input.param.w); + + #ifdef OUTLINE_ON + c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z)); + c *= saturate(d - input.param.y); + #endif + + #if UNDERLAY_ON + d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; + c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a); + #endif + + #if UNDERLAY_INNER + half sd = saturate(d - input.param.z); + d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; + c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a); + #endif + + // Alternative implementation to UnityGet2DClipping with support for softness. + #if UNITY_UI_CLIP_RECT + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); + c *= m.x * m.y; + #endif + + float a = abs(_MaskInverse - tex2D(_MaskTex, input.texcoord0.zw).a); + float t = a + (1 - _MaskWipeControl) * _MaskEdgeSoftness - _MaskWipeControl; + a = saturate(t / _MaskEdgeSoftness); + c.rgb = lerp(_MaskEdgeColor.rgb*c.a, c.rgb, a); + c *= a; + + #if (UNDERLAY_ON | UNDERLAY_INNER) + c *= input.texcoord1.z; + #endif + + #if UNITY_UI_ALPHACLIP + clip(c.a - 0.001); + #endif + + return c; + } + ENDCG + } +} + +CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile Masking.shader.meta b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile Masking.shader.meta new file mode 100644 index 0000000..dbfc71a --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile Masking.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bc1ede39bf3643ee8e493720e4259791 +timeCreated: 1463704911 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile Overlay.shader b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile Overlay.shader new file mode 100644 index 0000000..adcdc05 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile Overlay.shader @@ -0,0 +1,229 @@ +// Simplified SDF shader: +// - No Shading Option (bevel / bump / env map) +// - No Glow Option +// - Softness is applied on both side of the outline + +Shader "TextMeshPro/Mobile/Distance Field Overlay" { + +Properties { + _FaceColor ("Face Color", Color) = (1,1,1,1) + _FaceDilate ("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineWidth ("Outline Thickness", Range(0,1)) = 0 + _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 + + _UnderlayColor ("Border Color", Color) = (0,0,0,.5) + _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 + _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 + _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 + _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 + + _WeightNormal ("Weight Normal", float) = 0 + _WeightBold ("Weight Bold", float) = .5 + + _ShaderFlags ("Flags", float) = 0 + _ScaleRatioA ("Scale RatioA", float) = 1 + _ScaleRatioB ("Scale RatioB", float) = 1 + _ScaleRatioC ("Scale RatioC", float) = 1 + + _MainTex ("Font Atlas", 2D) = "white" {} + _TextureWidth ("Texture Width", float) = 512 + _TextureHeight ("Texture Height", float) = 512 + _GradientScale ("Gradient Scale", float) = 5 + _ScaleX ("Scale X", float) = 1 + _ScaleY ("Scale Y", float) = 1 + _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + + _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + _MaskSoftnessX ("Mask SoftnessX", float) = 0 + _MaskSoftnessY ("Mask SoftnessY", float) = 0 + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _ColorMask ("Color Mask", Float) = 15 +} + +SubShader { + Tags + { + "Queue"="Overlay" + "IgnoreProjector"="True" + "RenderType"="Transparent" + } + + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull [_CullMode] + ZWrite Off + Lighting Off + Fog { Mode Off } + ZTest Always + Blend One OneMinusSrcAlpha + ColorMask [_ColorMask] + + Pass { + CGPROGRAM + #pragma vertex VertShader + #pragma fragment PixShader + #pragma shader_feature __ OUTLINE_ON + #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + #include "TMPro_Properties.cginc" + + struct vertex_t { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float2 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct pixel_t { + float4 vertex : SV_POSITION; + fixed4 faceColor : COLOR; + fixed4 outlineColor : COLOR1; + float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV + half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w) + half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw) + #if (UNDERLAY_ON | UNDERLAY_INNER) + float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved + half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y) + #endif + }; + + + pixel_t VertShader(vertex_t input) + { + float bold = step(input.texcoord1.y, 0); + + float4 vert = input.vertex; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + float4 vPosition = UnityObjectToClipPos(vert); + + float2 pixelSize = vPosition.w; + pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); + + float scale = rsqrt(dot(pixelSize, pixelSize)); + scale *= abs(input.texcoord1.y) * _GradientScale * 1.5; + if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); + + float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; + weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; + + float layerScale = scale; + + scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); + float bias = (0.5 - weight) * scale - 0.5; + float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale; + + float opacity = input.color.a; + #if (UNDERLAY_ON | UNDERLAY_INNER) + opacity = 1.0; + #endif + + fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; + faceColor.rgb *= faceColor.a; + + fixed4 outlineColor = _OutlineColor; + outlineColor.a *= opacity; + outlineColor.rgb *= outlineColor.a; + outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2)))); + + #if (UNDERLAY_ON | UNDERLAY_INNER) + + layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); + float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); + + float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; + float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; + float2 layerOffset = float2(x, y); + #endif + + // Generate UV for the Masking Texture + float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); + + // Structure for pixel shader + pixel_t output = { + vPosition, + faceColor, + outlineColor, + float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y), + half4(scale, bias - outline, bias + outline, bias), + half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)), + #if (UNDERLAY_ON | UNDERLAY_INNER) + float4(input.texcoord0 + layerOffset, input.color.a, 0), + half2(layerScale, layerBias), + #endif + }; + + return output; + } + + + // PIXEL SHADER + fixed4 PixShader(pixel_t input) : SV_Target + { + half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x; + half4 c = input.faceColor * saturate(d - input.param.w); + + #ifdef OUTLINE_ON + c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z)); + c *= saturate(d - input.param.y); + #endif + + #if UNDERLAY_ON + d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; + c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a); + #endif + + #if UNDERLAY_INNER + half sd = saturate(d - input.param.z); + d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; + c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a); + #endif + + // Alternative implementation to UnityGet2DClipping with support for softness. + #if UNITY_UI_CLIP_RECT + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); + c *= m.x * m.y; + #endif + + #if (UNDERLAY_ON | UNDERLAY_INNER) + c *= input.texcoord1.z; + #endif + + #if UNITY_UI_ALPHACLIP + clip(c.a - 0.001); + #endif + + return c; + } + ENDCG + } +} + +CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile Overlay.shader.meta b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile Overlay.shader.meta new file mode 100644 index 0000000..29cbfcc --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile Overlay.shader.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a02a7d8c237544f1962732b55a9aebf1 +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile.shader b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile.shader new file mode 100644 index 0000000..5c655d7 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile.shader @@ -0,0 +1,229 @@ +// Simplified SDF shader: +// - No Shading Option (bevel / bump / env map) +// - No Glow Option +// - Softness is applied on both side of the outline + +Shader "TextMeshPro/Mobile/Distance Field" { + +Properties { + _FaceColor ("Face Color", Color) = (1,1,1,1) + _FaceDilate ("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineWidth ("Outline Thickness", Range(0,1)) = 0 + _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 + + _UnderlayColor ("Border Color", Color) = (0,0,0,.5) + _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 + _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 + _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 + _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 + + _WeightNormal ("Weight Normal", float) = 0 + _WeightBold ("Weight Bold", float) = .5 + + _ShaderFlags ("Flags", float) = 0 + _ScaleRatioA ("Scale RatioA", float) = 1 + _ScaleRatioB ("Scale RatioB", float) = 1 + _ScaleRatioC ("Scale RatioC", float) = 1 + + _MainTex ("Font Atlas", 2D) = "white" {} + _TextureWidth ("Texture Width", float) = 512 + _TextureHeight ("Texture Height", float) = 512 + _GradientScale ("Gradient Scale", float) = 5 + _ScaleX ("Scale X", float) = 1 + _ScaleY ("Scale Y", float) = 1 + _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + + _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + _MaskSoftnessX ("Mask SoftnessX", float) = 0 + _MaskSoftnessY ("Mask SoftnessY", float) = 0 + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _ColorMask ("Color Mask", Float) = 15 +} + +SubShader { + Tags + { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + } + + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull [_CullMode] + ZWrite Off + Lighting Off + Fog { Mode Off } + ZTest [unity_GUIZTestMode] + Blend One OneMinusSrcAlpha + ColorMask [_ColorMask] + + Pass { + CGPROGRAM + #pragma vertex VertShader + #pragma fragment PixShader + #pragma shader_feature __ OUTLINE_ON + #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + #include "TMPro_Properties.cginc" + + struct vertex_t { + float4 vertex : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float2 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct pixel_t { + float4 vertex : SV_POSITION; + fixed4 faceColor : COLOR; + fixed4 outlineColor : COLOR1; + float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV + half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w) + half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw) + #if (UNDERLAY_ON | UNDERLAY_INNER) + float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved + half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y) + #endif + }; + + + pixel_t VertShader(vertex_t input) + { + float bold = step(input.texcoord1.y, 0); + + float4 vert = input.vertex; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + float4 vPosition = UnityObjectToClipPos(vert); + + float2 pixelSize = vPosition.w; + pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); + + float scale = rsqrt(dot(pixelSize, pixelSize)); + scale *= abs(input.texcoord1.y) * _GradientScale * 1.5; + if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); + + float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; + weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; + + float layerScale = scale; + + scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); + float bias = (0.5 - weight) * scale - 0.5; + float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale; + + float opacity = input.color.a; + #if (UNDERLAY_ON | UNDERLAY_INNER) + opacity = 1.0; + #endif + + fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; + faceColor.rgb *= faceColor.a; + + fixed4 outlineColor = _OutlineColor; + outlineColor.a *= opacity; + outlineColor.rgb *= outlineColor.a; + outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2)))); + + #if (UNDERLAY_ON | UNDERLAY_INNER) + + layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); + float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); + + float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; + float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; + float2 layerOffset = float2(x, y); + #endif + + // Generate UV for the Masking Texture + float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); + + // Structure for pixel shader + pixel_t output = { + vPosition, + faceColor, + outlineColor, + float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y), + half4(scale, bias - outline, bias + outline, bias), + half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)), + #if (UNDERLAY_ON | UNDERLAY_INNER) + float4(input.texcoord0 + layerOffset, input.color.a, 0), + half2(layerScale, layerBias), + #endif + }; + + return output; + } + + + // PIXEL SHADER + fixed4 PixShader(pixel_t input) : SV_Target + { + half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x; + half4 c = input.faceColor * saturate(d - input.param.w); + + #ifdef OUTLINE_ON + c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z)); + c *= saturate(d - input.param.y); + #endif + + #if UNDERLAY_ON + d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; + c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a); + #endif + + #if UNDERLAY_INNER + half sd = saturate(d - input.param.z); + d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; + c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a); + #endif + + // Alternative implementation to UnityGet2DClipping with support for softness. + #if UNITY_UI_CLIP_RECT + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); + c *= m.x * m.y; + #endif + + #if (UNDERLAY_ON | UNDERLAY_INNER) + c *= input.texcoord1.z; + #endif + + #if UNITY_UI_ALPHACLIP + clip(c.a - 0.001); + #endif + + return c; + } + ENDCG + } +} + +CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile.shader.meta b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile.shader.meta new file mode 100644 index 0000000..3db6338 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Mobile.shader.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fe393ace9b354375a9cb14cdbbc28be4 +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Surface-Mobile.shader b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Surface-Mobile.shader new file mode 100644 index 0000000..ae78bc6 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Surface-Mobile.shader @@ -0,0 +1,136 @@ +// Simplified version of the SDF Surface shader : +// - No support for Bevel, Bump or envmap +// - Diffuse only lighting +// - Fully supports only 1 directional light. Other lights can affect it, but it will be per-vertex/SH. + +Shader "TextMeshPro/Mobile/Distance Field (Surface)" { + +Properties { + _FaceTex ("Fill Texture", 2D) = "white" {} + _FaceColor ("Fill Color", Color) = (1,1,1,1) + _FaceDilate ("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineTex ("Outline Texture", 2D) = "white" {} + _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 + _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 + + _GlowColor ("Color", Color) = (0, 1, 0, 0.5) + _GlowOffset ("Offset", Range(-1,1)) = 0 + _GlowInner ("Inner", Range(0,1)) = 0.05 + _GlowOuter ("Outer", Range(0,1)) = 0.05 + _GlowPower ("Falloff", Range(1, 0)) = 0.75 + + _WeightNormal ("Weight Normal", float) = 0 + _WeightBold ("Weight Bold", float) = 0.5 + + // Should not be directly exposed to the user + _ShaderFlags ("Flags", float) = 0 + _ScaleRatioA ("Scale RatioA", float) = 1 + _ScaleRatioB ("Scale RatioB", float) = 1 + _ScaleRatioC ("Scale RatioC", float) = 1 + + _MainTex ("Font Atlas", 2D) = "white" {} + _TextureWidth ("Texture Width", float) = 512 + _TextureHeight ("Texture Height", float) = 512 + _GradientScale ("Gradient Scale", float) = 5.0 + _ScaleX ("Scale X", float) = 1.0 + _ScaleY ("Scale Y", float) = 1.0 + _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + + //_MaskCoord ("Mask Coords", vector) = (0,0,0,0) + //_MaskSoftness ("Mask Softness", float) = 0 +} + +SubShader { + + Tags { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + } + + LOD 300 + Cull [_CullMode] + + CGPROGRAM + #pragma surface PixShader Lambert alpha:blend vertex:VertShader noforwardadd nolightmap nodirlightmap + #pragma target 3.0 + #pragma shader_feature __ GLOW_ON + + #include "TMPro_Properties.cginc" + #include "TMPro.cginc" + + half _FaceShininess; + half _OutlineShininess; + + struct Input + { + fixed4 color : COLOR; + float2 uv_MainTex; + float2 uv2_FaceTex; + float2 uv2_OutlineTex; + float2 param; // Weight, Scale + float3 viewDirEnv; + }; + + #include "TMPro_Surface.cginc" + + ENDCG + + // Pass to render object as a shadow caster + Pass + { + Name "Caster" + Tags { "LightMode" = "ShadowCaster" } + Offset 1, 1 + + Fog {Mode Off} + ZWrite On ZTest LEqual Cull Off + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_shadowcaster + #include "UnityCG.cginc" + + struct v2f { + V2F_SHADOW_CASTER; + float2 uv : TEXCOORD1; + float2 uv2 : TEXCOORD3; + float alphaClip : TEXCOORD2; + }; + + uniform float4 _MainTex_ST; + uniform float4 _OutlineTex_ST; + float _OutlineWidth; + float _FaceDilate; + float _ScaleRatioA; + + v2f vert( appdata_base v ) + { + v2f o; + TRANSFER_SHADOW_CASTER(o) + o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); + o.uv2 = TRANSFORM_TEX(v.texcoord, _OutlineTex); + o.alphaClip = o.alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _FaceDilate * _ScaleRatioA) / 2; + return o; + } + + uniform sampler2D _MainTex; + + float4 frag(v2f i) : COLOR + { + fixed4 texcol = tex2D(_MainTex, i.uv).a; + clip(texcol.a - i.alphaClip); + SHADOW_CASTER_FRAGMENT(i) + } + ENDCG + } +} + +CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Surface-Mobile.shader.meta b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Surface-Mobile.shader.meta new file mode 100644 index 0000000..d559598 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Surface-Mobile.shader.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 85187c2149c549c5b33f0cdb02836b17 +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Surface.shader b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Surface.shader new file mode 100644 index 0000000..08cee8d --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Surface.shader @@ -0,0 +1,155 @@ +Shader "TextMeshPro/Distance Field (Surface)" { + +Properties { + _FaceTex ("Fill Texture", 2D) = "white" {} + _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 + _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 + _FaceColor ("Fill Color", Color) = (1,1,1,1) + _FaceDilate ("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineTex ("Outline Texture", 2D) = "white" {} + _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 + _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 + _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 + _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 + + _Bevel ("Bevel", Range(0,1)) = 0.5 + _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 + _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 + _BevelClamp ("Bevel Clamp", Range(0,1)) = 0 + _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 + + _BumpMap ("Normalmap", 2D) = "bump" {} + _BumpOutline ("Bump Outline", Range(0,1)) = 0.5 + _BumpFace ("Bump Face", Range(0,1)) = 0.5 + + _ReflectFaceColor ("Face Color", Color) = (0,0,0,1) + _ReflectOutlineColor ("Outline Color", Color) = (0,0,0,1) + _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } + _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) + _SpecColor ("Specular Color", Color) = (0,0,0,1) + + _FaceShininess ("Face Shininess", Range(0,1)) = 0 + _OutlineShininess ("Outline Shininess", Range(0,1)) = 0 + + _GlowColor ("Color", Color) = (0, 1, 0, 0.5) + _GlowOffset ("Offset", Range(-1,1)) = 0 + _GlowInner ("Inner", Range(0,1)) = 0.05 + _GlowOuter ("Outer", Range(0,1)) = 0.05 + _GlowPower ("Falloff", Range(1, 0)) = 0.75 + + _WeightNormal ("Weight Normal", float) = 0 + _WeightBold ("Weight Bold", float) = 0.5 + + // Should not be directly exposed to the user + _ShaderFlags ("Flags", float) = 0 + _ScaleRatioA ("Scale RatioA", float) = 1 + _ScaleRatioB ("Scale RatioB", float) = 1 + _ScaleRatioC ("Scale RatioC", float) = 1 + + _MainTex ("Font Atlas", 2D) = "white" {} + _TextureWidth ("Texture Width", float) = 512 + _TextureHeight ("Texture Height", float) = 512 + _GradientScale ("Gradient Scale", float) = 5.0 + _ScaleX ("Scale X", float) = 1.0 + _ScaleY ("Scale Y", float) = 1.0 + _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + //_MaskCoord ("Mask Coords", vector) = (0,0,0,0) + //_MaskSoftness ("Mask Softness", float) = 0 +} + +SubShader { + + Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } + + LOD 300 + Cull [_CullMode] + + CGPROGRAM + #pragma surface PixShader BlinnPhong alpha:blend vertex:VertShader nolightmap nodirlightmap + #pragma target 3.0 + #pragma shader_feature __ GLOW_ON + #pragma glsl + + #include "TMPro_Properties.cginc" + #include "TMPro.cginc" + + half _FaceShininess; + half _OutlineShininess; + + struct Input + { + fixed4 color : COLOR; + float2 uv_MainTex; + float2 uv2_FaceTex; + float2 uv2_OutlineTex; + float2 param; // Weight, Scale + float3 viewDirEnv; + }; + + + #define BEVEL_ON 1 + #include "TMPro_Surface.cginc" + + ENDCG + + // Pass to render object as a shadow caster + Pass + { + Name "Caster" + Tags { "LightMode" = "ShadowCaster" } + Offset 1, 1 + + Fog {Mode Off} + ZWrite On + ZTest LEqual + Cull Off + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_shadowcaster + #include "UnityCG.cginc" + + struct v2f { + V2F_SHADOW_CASTER; + float2 uv : TEXCOORD1; + float2 uv2 : TEXCOORD3; + float alphaClip : TEXCOORD2; + }; + + uniform float4 _MainTex_ST; + uniform float4 _OutlineTex_ST; + float _OutlineWidth; + float _FaceDilate; + float _ScaleRatioA; + + v2f vert( appdata_base v ) + { + v2f o; + TRANSFER_SHADOW_CASTER(o) + o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); + o.uv2 = TRANSFORM_TEX(v.texcoord, _OutlineTex); + o.alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _FaceDilate * _ScaleRatioA) / 2; + return o; + } + + uniform sampler2D _MainTex; + + float4 frag(v2f i) : COLOR + { + fixed4 texcol = tex2D(_MainTex, i.uv).a; + clip(texcol.a - i.alphaClip); + SHADOW_CASTER_FRAGMENT(i) + } + ENDCG + } +} + +CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} + diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Surface.shader.meta b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Surface.shader.meta new file mode 100644 index 0000000..bc7933f --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF-Surface.shader.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f7ada0af4f174f0694ca6a487b8f543d +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF.shader b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF.shader new file mode 100644 index 0000000..7a2a63b --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF.shader @@ -0,0 +1,305 @@ +Shader "TextMeshPro/Distance Field" { + +Properties { + _FaceTex ("Face Texture", 2D) = "white" {} + _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 + _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 + _FaceColor ("Face Color", Color) = (1,1,1,1) + _FaceDilate ("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineTex ("Outline Texture", 2D) = "white" {} + _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 + _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 + _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 + _OutlineSoftness ("Outline Softness", Range(-1,1)) = 0 + + _Bevel ("Bevel", Range(0,1)) = 0.5 + _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 + _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 + _BevelClamp ("Bevel Clamp", Range(0,1)) = 0 + _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 + + _LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416 + _SpecularColor ("Specular", Color) = (1,1,1,1) + _SpecularPower ("Specular", Range(0,4)) = 2.0 + _Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10 + _Diffuse ("Diffuse", Range(0,1)) = 0.5 + _Ambient ("Ambient", Range(1,0)) = 0.5 + + _BumpMap ("Normal map", 2D) = "bump" {} + _BumpOutline ("Bump Outline", Range(0,1)) = 0 + _BumpFace ("Bump Face", Range(0,1)) = 0 + + _ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1) + _ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1) + _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } + _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) + + + _UnderlayColor ("Border Color", Color) = (0,0,0, 0.5) + _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 + _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 + _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 + _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 + + _GlowColor ("Color", Color) = (0, 1, 0, 0.5) + _GlowOffset ("Offset", Range(-1,1)) = 0 + _GlowInner ("Inner", Range(0,1)) = 0.05 + _GlowOuter ("Outer", Range(0,1)) = 0.05 + _GlowPower ("Falloff", Range(1, 0)) = 0.75 + + _WeightNormal ("Weight Normal", float) = 0 + _WeightBold ("Weight Bold", float) = 0.5 + + _ShaderFlags ("Flags", float) = 0 + _ScaleRatioA ("Scale RatioA", float) = 1 + _ScaleRatioB ("Scale RatioB", float) = 1 + _ScaleRatioC ("Scale RatioC", float) = 1 + + _MainTex ("Font Atlas", 2D) = "white" {} + _TextureWidth ("Texture Width", float) = 512 + _TextureHeight ("Texture Height", float) = 512 + _GradientScale ("Gradient Scale", float) = 5.0 + _ScaleX ("Scale X", float) = 1.0 + _ScaleY ("Scale Y", float) = 1.0 + _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + + _MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767) + _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + _MaskSoftnessX ("Mask SoftnessX", float) = 0 + _MaskSoftnessY ("Mask SoftnessY", float) = 0 + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _ColorMask ("Color Mask", Float) = 15 +} + +SubShader { + + Tags + { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + } + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull [_CullMode] + ZWrite Off + Lighting Off + Fog { Mode Off } + ZTest [unity_GUIZTestMode] + Blend One OneMinusSrcAlpha + ColorMask [_ColorMask] + + Pass { + CGPROGRAM + #pragma target 3.0 + #pragma vertex VertShader + #pragma fragment PixShader + #pragma shader_feature __ BEVEL_ON + #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER + #pragma shader_feature __ GLOW_ON + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + #include "TMPro_Properties.cginc" + #include "TMPro.cginc" + + struct vertex_t { + float4 position : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float2 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + + struct pixel_t { + float4 position : SV_POSITION; + fixed4 color : COLOR; + float2 atlas : TEXCOORD0; // Atlas + float4 param : TEXCOORD1; // alphaClip, scale, bias, weight + float4 mask : TEXCOORD2; // Position in object space(xy), pixel Size(zw) + float3 viewDir : TEXCOORD3; + + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4 texcoord2 : TEXCOORD4; // u,v, scale, bias + fixed4 underlayColor : COLOR1; + #endif + float4 textures : TEXCOORD5; + }; + + // Used by Unity internally to handle Texture Tiling and Offset. + float4 _FaceTex_ST; + float4 _OutlineTex_ST; + + pixel_t VertShader(vertex_t input) + { + float bold = step(input.texcoord1.y, 0); + + float4 vert = input.position; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + + float4 vPosition = UnityObjectToClipPos(vert); + + float2 pixelSize = vPosition.w; + pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); + float scale = rsqrt(dot(pixelSize, pixelSize)); + scale *= abs(input.texcoord1.y) * _GradientScale * 1.5; + if (UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); + + float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; + weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; + + float bias =(.5 - weight) + (.5 / scale); + + float alphaClip = (1.0 - _OutlineWidth*_ScaleRatioA - _OutlineSoftness*_ScaleRatioA); + + #if GLOW_ON + alphaClip = min(alphaClip, 1.0 - _GlowOffset * _ScaleRatioB - _GlowOuter * _ScaleRatioB); + #endif + + alphaClip = alphaClip / 2.0 - ( .5 / scale) - weight; + + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4 underlayColor = _UnderlayColor; + underlayColor.rgb *= underlayColor.a; + + float bScale = scale; + bScale /= 1 + ((_UnderlaySoftness*_ScaleRatioC) * bScale); + float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale); + + float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; + float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; + float2 bOffset = float2(x, y); + #endif + + // Generate UV for the Masking Texture + float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); + + // Support for texture tiling and offset + float2 textureUV = UnpackUV(input.texcoord1.x); + float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex); + float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex); + + pixel_t output = { + vPosition, + input.color, + input.texcoord0, + float4(alphaClip, scale, bias, weight), + half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)), + mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz), + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4(input.texcoord0 + bOffset, bScale, bBias), + underlayColor, + #endif + float4(faceUV, outlineUV), + }; + + return output; + } + + + fixed4 PixShader(pixel_t input) : SV_Target + { + float c = tex2D(_MainTex, input.atlas).a; + + #ifndef UNDERLAY_ON + clip(c - input.param.x); + #endif + + float scale = input.param.y; + float bias = input.param.z; + float weight = input.param.w; + float sd = (bias - c) * scale; + + float outline = (_OutlineWidth * _ScaleRatioA) * scale; + float softness = (_OutlineSoftness * _ScaleRatioA) * scale; + + half4 faceColor = _FaceColor; + half4 outlineColor = _OutlineColor; + + faceColor.rgb *= input.color.rgb; + + faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y); + outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y); + + faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); + + #if BEVEL_ON + float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0); + float3 n = GetSurfaceNormal(input.atlas, weight, dxy); + + float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz; + bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); + n = normalize(n- bump); + + float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0)); + + float3 col = GetSpecular(n, light); + faceColor.rgb += col*faceColor.a; + faceColor.rgb *= 1-(dot(n, light)*_Diffuse); + faceColor.rgb *= lerp(_Ambient, 1, n.z*n.z); + + fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n)); + faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; + #endif + + #if UNDERLAY_ON + float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; + faceColor += input.underlayColor * saturate(d - input.texcoord2.w) * (1 - faceColor.a); + #endif + + #if UNDERLAY_INNER + float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; + faceColor += input.underlayColor * (1 - saturate(d - input.texcoord2.w)) * saturate(1 - sd) * (1 - faceColor.a); + #endif + + #if GLOW_ON + float4 glowColor = GetGlowColor(sd, scale); + faceColor.rgb += glowColor.rgb * glowColor.a; + #endif + + // Alternative implementation to UnityGet2DClipping with support for softness. + #if UNITY_UI_CLIP_RECT + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); + faceColor *= m.x * m.y; + #endif + + #if UNITY_UI_ALPHACLIP + clip(faceColor.a - 0.001); + #endif + + return faceColor * input.color.a; + } + + ENDCG + } +} + +Fallback "TextMeshPro/Mobile/Distance Field" +CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF.shader.meta b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF.shader.meta new file mode 100644 index 0000000..e343136 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_SDF.shader.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 68e6db2ebdc24f95958faec2be5558d6 +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_Sprite.shader b/Assets/TextMesh Pro/Resources/Shaders/TMP_Sprite.shader new file mode 100644 index 0000000..f90467d --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_Sprite.shader @@ -0,0 +1,113 @@ +Shader "TextMeshPro/Sprite" +{ + Properties + { + _MainTex ("Sprite Texture", 2D) = "white" {} + _Color ("Tint", Color) = (1,1,1,1) + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _ColorMask ("Color Mask", Float) = 15 + _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + + [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0 + } + + SubShader + { + Tags + { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + "PreviewType"="Plane" + "CanUseSpriteAtlas"="True" + } + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull Off + Lighting Off + ZWrite Off + ZTest [unity_GUIZTestMode] + Blend SrcAlpha OneMinusSrcAlpha + ColorMask [_ColorMask] + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + + #pragma multi_compile __ UNITY_UI_CLIP_RECT + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + struct appdata_t + { + float4 vertex : POSITION; + float4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + half2 texcoord : TEXCOORD0; + float4 worldPosition : TEXCOORD1; + }; + + fixed4 _Color; + fixed4 _TextureSampleAdd; + float4 _ClipRect; + + v2f vert(appdata_t IN) + { + v2f OUT; + OUT.worldPosition = IN.vertex; + OUT.vertex = UnityObjectToClipPos(OUT.worldPosition); + + OUT.texcoord = IN.texcoord; + + #ifdef UNITY_HALF_TEXEL_OFFSET + OUT.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1); + #endif + + OUT.color = IN.color * _Color; + return OUT; + } + + sampler2D _MainTex; + + fixed4 frag(v2f IN) : SV_Target + { + half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color; + + #if UNITY_UI_CLIP_RECT + color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect); + #endif + + #ifdef UNITY_UI_ALPHACLIP + clip (color.a - 0.001); + #endif + + return color; + } + ENDCG + } + } +} diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMP_Sprite.shader.meta b/Assets/TextMesh Pro/Resources/Shaders/TMP_Sprite.shader.meta new file mode 100644 index 0000000..f3e9cc9 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMP_Sprite.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cf81c85f95fe47e1a27f6ae460cf182c +timeCreated: 1450517184 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMPro.cginc b/Assets/TextMesh Pro/Resources/Shaders/TMPro.cginc new file mode 100644 index 0000000..5898130 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMPro.cginc @@ -0,0 +1,84 @@ +float2 UnpackUV(float uv) +{ + float2 output; + output.x = floor(uv / 4096); + output.y = uv - 4096 * output.x; + + return output * 0.001953125; +} + +fixed4 GetColor(half d, fixed4 faceColor, fixed4 outlineColor, half outline, half softness) +{ + half faceAlpha = 1-saturate((d - outline * 0.5 + softness * 0.5) / (1.0 + softness)); + half outlineAlpha = saturate((d + outline * 0.5)) * sqrt(min(1.0, outline)); + + faceColor.rgb *= faceColor.a; + outlineColor.rgb *= outlineColor.a; + + faceColor = lerp(faceColor, outlineColor, outlineAlpha); + + faceColor *= faceAlpha; + + return faceColor; +} + +float3 GetSurfaceNormal(float4 h, float bias) +{ + bool raisedBevel = step(1, fmod(_ShaderFlags, 2)); + + h += bias+_BevelOffset; + + float bevelWidth = max(.01, _OutlineWidth+_BevelWidth); + + // Track outline + h -= .5; + h /= bevelWidth; + h = saturate(h+.5); + + if(raisedBevel) h = 1 - abs(h*2.0 - 1.0); + h = lerp(h, sin(h*3.141592/2.0), _BevelRoundness); + h = min(h, 1.0-_BevelClamp); + h *= _Bevel * bevelWidth * _GradientScale * -2.0; + + float3 va = normalize(float3(1.0, 0.0, h.y - h.x)); + float3 vb = normalize(float3(0.0, -1.0, h.w - h.z)); + + return cross(va, vb); +} + +float3 GetSurfaceNormal(float2 uv, float bias, float3 delta) +{ + // Read "height field" + float4 h = {tex2D(_MainTex, uv - delta.xz).a, + tex2D(_MainTex, uv + delta.xz).a, + tex2D(_MainTex, uv - delta.zy).a, + tex2D(_MainTex, uv + delta.zy).a}; + + return GetSurfaceNormal(h, bias); +} + +float3 GetSpecular(float3 n, float3 l) +{ + float spec = pow(max(0.0, dot(n, l)), _Reflectivity); + return _SpecularColor.rgb * spec * _SpecularPower; +} + +float4 GetGlowColor(float d, float scale) +{ + float glow = d - (_GlowOffset*_ScaleRatioB) * 0.5 * scale; + float t = lerp(_GlowInner, (_GlowOuter * _ScaleRatioB), step(0.0, glow)) * 0.5 * scale; + glow = saturate(abs(glow/(1.0 + t))); + glow = 1.0-pow(glow, _GlowPower); + glow *= sqrt(min(1.0, t)); // Fade off glow thinner than 1 screen pixel + return float4(_GlowColor.rgb, saturate(_GlowColor.a * glow * 2)); +} + +float4 BlendARGB(float4 overlying, float4 underlying) +{ + overlying.rgb *= overlying.a; + underlying.rgb *= underlying.a; + float3 blended = overlying.rgb + ((1-overlying.a)*underlying.rgb); + float alpha = underlying.a + (1-underlying.a)*overlying.a; + return float4(blended, alpha); +} + diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMPro.cginc.meta b/Assets/TextMesh Pro/Resources/Shaders/TMPro.cginc.meta new file mode 100644 index 0000000..f633f58 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMPro.cginc.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 407bc68d299748449bbf7f48ee690f8d +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMPro_Properties.cginc b/Assets/TextMesh Pro/Resources/Shaders/TMPro_Properties.cginc new file mode 100644 index 0000000..df1b6d9 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMPro_Properties.cginc @@ -0,0 +1,84 @@ +// UI Editable properties +uniform sampler2D _FaceTex; // Alpha : Signed Distance +uniform float _FaceUVSpeedX; +uniform float _FaceUVSpeedY; +uniform fixed4 _FaceColor; // RGBA : Color + Opacity +uniform float _FaceDilate; // v[ 0, 1] +uniform float _OutlineSoftness; // v[ 0, 1] + +uniform sampler2D _OutlineTex; // RGBA : Color + Opacity +uniform float _OutlineUVSpeedX; +uniform float _OutlineUVSpeedY; +uniform fixed4 _OutlineColor; // RGBA : Color + Opacity +uniform float _OutlineWidth; // v[ 0, 1] + +uniform float _Bevel; // v[ 0, 1] +uniform float _BevelOffset; // v[-1, 1] +uniform float _BevelWidth; // v[-1, 1] +uniform float _BevelClamp; // v[ 0, 1] +uniform float _BevelRoundness; // v[ 0, 1] + +uniform sampler2D _BumpMap; // Normal map +uniform float _BumpOutline; // v[ 0, 1] +uniform float _BumpFace; // v[ 0, 1] + +uniform samplerCUBE _Cube; // Cube / sphere map +uniform fixed4 _ReflectFaceColor; // RGB intensity +uniform fixed4 _ReflectOutlineColor; +//uniform float _EnvTiltX; // v[-1, 1] +//uniform float _EnvTiltY; // v[-1, 1] +uniform float3 _EnvMatrixRotation; +uniform float4x4 _EnvMatrix; + +uniform fixed4 _SpecularColor; // RGB intensity +uniform float _LightAngle; // v[ 0,Tau] +uniform float _SpecularPower; // v[ 0, 1] +uniform float _Reflectivity; // v[ 5, 15] +uniform float _Diffuse; // v[ 0, 1] +uniform float _Ambient; // v[ 0, 1] + +uniform fixed4 _UnderlayColor; // RGBA : Color + Opacity +uniform float _UnderlayOffsetX; // v[-1, 1] +uniform float _UnderlayOffsetY; // v[-1, 1] +uniform float _UnderlayDilate; // v[-1, 1] +uniform float _UnderlaySoftness; // v[ 0, 1] + +uniform fixed4 _GlowColor; // RGBA : Color + Intesity +uniform float _GlowOffset; // v[-1, 1] +uniform float _GlowOuter; // v[ 0, 1] +uniform float _GlowInner; // v[ 0, 1] +uniform float _GlowPower; // v[ 1, 1/(1+4*4)] + +// API Editable properties +uniform float _ShaderFlags; +uniform float _WeightNormal; +uniform float _WeightBold; + +uniform float _ScaleRatioA; +uniform float _ScaleRatioB; +uniform float _ScaleRatioC; + +uniform float _VertexOffsetX; +uniform float _VertexOffsetY; + +//uniform float _UseClipRect; +uniform float _MaskID; +uniform sampler2D _MaskTex; +uniform float4 _MaskCoord; +uniform float4 _ClipRect; // bottom left(x,y) : top right(z,w) +//uniform float _MaskWipeControl; +//uniform float _MaskEdgeSoftness; +//uniform fixed4 _MaskEdgeColor; +//uniform bool _MaskInverse; + +uniform float _MaskSoftnessX; +uniform float _MaskSoftnessY; + +// Font Atlas properties +uniform sampler2D _MainTex; +uniform float _TextureWidth; +uniform float _TextureHeight; +uniform float _GradientScale; +uniform float _ScaleX; +uniform float _ScaleY; +uniform float _PerspectiveFilter; diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMPro_Properties.cginc.meta b/Assets/TextMesh Pro/Resources/Shaders/TMPro_Properties.cginc.meta new file mode 100644 index 0000000..24f0f8f --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMPro_Properties.cginc.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3997e2241185407d80309a82f9148466 +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMPro_Surface.cginc b/Assets/TextMesh Pro/Resources/Shaders/TMPro_Surface.cginc new file mode 100644 index 0000000..3659e87 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMPro_Surface.cginc @@ -0,0 +1,115 @@ +void VertShader(inout appdata_full v, out Input data) +{ + v.vertex.x += _VertexOffsetX; + v.vertex.y += _VertexOffsetY; + + UNITY_INITIALIZE_OUTPUT(Input, data); + + float bold = step(v.texcoord1.y, 0); + + // Generate normal for backface + float3 view = ObjSpaceViewDir(v.vertex); + v.normal *= sign(dot(v.normal, view)); + +#if USE_DERIVATIVE + data.param.y = 1; +#else + float4 vert = v.vertex; + float4 vPosition = UnityObjectToClipPos(vert); + float2 pixelSize = vPosition.w; + + pixelSize /= float2(_ScaleX, _ScaleY) * mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy); + float scale = rsqrt(dot(pixelSize, pixelSize)); + scale *= abs(v.texcoord1.y) * _GradientScale * 1.5; + scale = lerp(scale * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(v.normal.xyz), normalize(WorldSpaceViewDir(vert))))); + data.param.y = scale; +#endif + + //float opacity = v.color.a; + + data.param.x = (lerp(_WeightNormal, _WeightBold, bold) / 4.0 + _FaceDilate) * _ScaleRatioA * 0.5; // + + v.texcoord1.xy = UnpackUV(v.texcoord1.x); + data.viewDirEnv = mul((float3x3)_EnvMatrix, WorldSpaceViewDir(v.vertex)); +} + +void PixShader(Input input, inout SurfaceOutput o) +{ + +#if USE_DERIVATIVE | BEVEL_ON + float3 delta = float3(1.0 / _TextureWidth, 1.0 / _TextureHeight, 0.0); + + float4 smp4x = { tex2D(_MainTex, input.uv_MainTex - delta.xz).a, + tex2D(_MainTex, input.uv_MainTex + delta.xz).a, + tex2D(_MainTex, input.uv_MainTex - delta.zy).a, + tex2D(_MainTex, input.uv_MainTex + delta.zy).a }; +#endif + +#if USE_DERIVATIVE + // Screen space scaling reciprocal with anisotropic correction + float2 edgeNormal = Normalize(float2(smp4x.x - smp4x.y, smp4x.z - smp4x.w)); + float2 res = float2(_TextureWidth * input.param.y, _TextureHeight); + float2 tdx = ddx(input.uv_MainTex)*res; + float2 tdy = ddy(input.uv_MainTex)*res; + float lx = length(tdx); + float ly = length(tdy); + float s = sqrt(min(lx, ly) / max(lx, ly)); + s = lerp(1, s, abs(dot(normalize(tdx + tdy), edgeNormal))); + float scale = rsqrt(abs(tdx.x * tdy.y - tdx.y * tdy.x)) * (_GradientScale * 2) * s; +#else + float scale = input.param.y; +#endif + + // Signed distance + float c = tex2D(_MainTex, input.uv_MainTex).a; + float sd = (.5 - c - input.param.x) * scale + .5; + float outline = _OutlineWidth*_ScaleRatioA * scale; + float softness = _OutlineSoftness*_ScaleRatioA * scale; + + // Color & Alpha + float4 faceColor = _FaceColor; + float4 outlineColor = _OutlineColor; + faceColor *= input.color; + outlineColor.a *= input.color.a; + faceColor *= tex2D(_FaceTex, float2(input.uv2_FaceTex.x + _FaceUVSpeedX * _Time.y, input.uv2_FaceTex.y + _FaceUVSpeedY * _Time.y)); + outlineColor *= tex2D(_OutlineTex, float2(input.uv2_OutlineTex.x + _OutlineUVSpeedX * _Time.y, input.uv2_OutlineTex.y + _OutlineUVSpeedY * _Time.y)); + faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); + faceColor.rgb /= max(faceColor.a, 0.0001); + + +#if BEVEL_ON + // Face Normal + float3 n = GetSurfaceNormal(smp4x, input.param.x); + + // Bumpmap + float3 bump = UnpackNormal(tex2D(_BumpMap, input.uv2_FaceTex.xy)).xyz; + bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); + bump = lerp(float3(0, 0, 1), bump, faceColor.a); + n = normalize(n - bump); + + // Cubemap reflection + fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDirEnv, mul((float3x3)unity_ObjectToWorld, n))); + float3 emission = reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; +#else + float3 n = float3(0, 0, -1); + float3 emission = float3(0, 0, 0); +#endif + + + +#if GLOW_ON + float4 glowColor = GetGlowColor(sd, scale); + glowColor.a *= input.color.a; + emission += glowColor.rgb*glowColor.a; + faceColor = BlendARGB(glowColor, faceColor); + faceColor.rgb /= max(faceColor.a, 0.0001); +#endif + + // Set Standard output structure + o.Albedo = faceColor.rgb; + o.Normal = -n; + o.Emission = emission; + o.Specular = lerp(_FaceShininess, _OutlineShininess, saturate(sd + outline * 0.5)); + o.Gloss = 1; + o.Alpha = faceColor.a; +} diff --git a/Assets/TextMesh Pro/Resources/Shaders/TMPro_Surface.cginc.meta b/Assets/TextMesh Pro/Resources/Shaders/TMPro_Surface.cginc.meta new file mode 100644 index 0000000..8e75022 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Shaders/TMPro_Surface.cginc.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d930090c0cd643c7b55f19a38538c162 +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Sprite Assets.meta b/Assets/TextMesh Pro/Resources/Sprite Assets.meta new file mode 100644 index 0000000..5171f1b --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Sprite Assets.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 512a49d95c0c4332bdd98131869c23c9 +folderAsset: yes +timeCreated: 1441876896 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset b/Assets/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset new file mode 100644 index 0000000..5b12b95 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset @@ -0,0 +1,296 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2103686 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: TextMeshPro/Sprite + m_Shader: {fileID: 4800000, guid: cf81c85f95fe47e1a27f6ae460cf182c, type: 3} + m_ShaderKeywords: UNITY_UI_CLIP_RECT + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 2800000, guid: dffef66376be4fa480fb02b19edbe903, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _ColorMask: 15 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UseUIAlphaClip: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _Color: {r: 1, g: 1, b: 1, a: 1} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 84a92b25f83d49b9bc132d206b370281, type: 3} + m_Name: EmojiOne + m_EditorClassIdentifier: + hashCode: -1836805472 + material: {fileID: 2103686} + materialHashCode: 0 + spriteSheet: {fileID: 2800000, guid: dffef66376be4fa480fb02b19edbe903, type: 3} + spriteInfoList: + - id: 0 + x: 0 + y: 384 + width: 128 + height: 128 + xOffset: 0 + yOffset: 115.6 + xAdvance: 128 + scale: 1 + name: Smiling face with smiling eyes + hashCode: -1318250903 + unicode: 128522 + pivot: {x: 0.5, y: 0.5} + sprite: {fileID: 0} + - id: 1 + x: 128 + y: 384 + width: 128 + height: 128 + xOffset: 0 + yOffset: 115.6 + xAdvance: 128 + scale: 1 + name: 1f60b + hashCode: 57188339 + unicode: 128523 + pivot: {x: 0.5, y: 0.5} + sprite: {fileID: 0} + - id: 2 + x: 256 + y: 384 + width: 128 + height: 128 + xOffset: 0 + yOffset: 115.6 + xAdvance: 128 + scale: 1 + name: 1f60d + hashCode: 57188341 + unicode: 128525 + pivot: {x: 0.5, y: 0.5} + sprite: {fileID: 0} + - id: 3 + x: 384 + y: 384 + width: 128 + height: 128 + xOffset: 0 + yOffset: 115.6 + xAdvance: 128 + scale: 1 + name: 1f60e + hashCode: 57188340 + unicode: 128526 + pivot: {x: 0.5, y: 0.5} + sprite: {fileID: 0} + - id: 4 + x: 0 + y: 256 + width: 128 + height: 128 + xOffset: 0 + yOffset: 115.6 + xAdvance: 128 + scale: 1 + name: Grinning face + hashCode: -95541379 + unicode: 128512 + pivot: {x: 0.5, y: 0.5} + sprite: {fileID: 0} + - id: 5 + x: 128 + y: 256 + width: 128 + height: 128 + xOffset: 0 + yOffset: 115.6 + xAdvance: 128 + scale: 1 + name: 1f601 + hashCode: 57188256 + unicode: 128513 + pivot: {x: 0.5, y: 0.5} + sprite: {fileID: 0} + - id: 6 + x: 256 + y: 256 + width: 128 + height: 128 + xOffset: 0 + yOffset: 115.6 + xAdvance: 128 + scale: 1 + name: Face with tears of joy + hashCode: 239522663 + unicode: 128514 + pivot: {x: 0.5, y: 0.5} + sprite: {fileID: 0} + - id: 7 + x: 384 + y: 256 + width: 128 + height: 128 + xOffset: 0 + yOffset: 115.6 + xAdvance: 128 + scale: 1 + name: 1f603 + hashCode: 57188258 + unicode: 128515 + pivot: {x: 0.5, y: 0.5} + sprite: {fileID: 0} + - id: 8 + x: 0 + y: 128 + width: 128 + height: 128 + xOffset: 0 + yOffset: 115.6 + xAdvance: 128 + scale: 1 + name: 1f604 + hashCode: 57188261 + unicode: 128516 + pivot: {x: 0.5, y: 0.5} + sprite: {fileID: 0} + - id: 9 + x: 128 + y: 128 + width: 128 + height: 128 + xOffset: 0 + yOffset: 115.6 + xAdvance: 128 + scale: 1 + name: 1f605 + hashCode: 57188260 + unicode: 128517 + pivot: {x: 0.5, y: 0.5} + sprite: {fileID: 0} + - id: 10 + x: 256 + y: 128 + width: 128 + height: 128 + xOffset: 0 + yOffset: 115.6 + xAdvance: 128 + scale: 1 + name: 1f606 + hashCode: 57188263 + unicode: 128518 + pivot: {x: 0.5, y: 0.5} + sprite: {fileID: 0} + - id: 11 + x: 384 + y: 128 + width: 128 + height: 128 + xOffset: 0 + yOffset: 115.6 + xAdvance: 128 + scale: 1 + name: 1f609 + hashCode: 57188264 + unicode: 128521 + pivot: {x: 0.5, y: 0.5} + sprite: {fileID: 0} + - id: 12 + x: 0 + y: 0 + width: 128 + height: 128 + xOffset: 0 + yOffset: 115.6 + xAdvance: 128 + scale: 1 + name: 1f618 + hashCode: 57188168 + unicode: 128536 + pivot: {x: 0.5, y: 0.5} + sprite: {fileID: 0} + - id: 13 + x: 128 + y: 0 + width: 128 + height: 128 + xOffset: 0 + yOffset: 115.6 + xAdvance: 128 + scale: 1 + name: 1f923 + hashCode: 57200239 + unicode: 129315 + pivot: {x: 0.5, y: 0.5} + sprite: {fileID: 0} + - id: 14 + x: 256 + y: 0 + width: 128 + height: 128 + xOffset: 0 + yOffset: 115.6 + xAdvance: 128 + scale: 1 + name: 263a + hashCode: 1748406 + unicode: 9786 + pivot: {x: 0.5, y: 0.5} + sprite: {fileID: 0} + - id: 15 + x: 384 + y: 0 + width: 128 + height: 128 + xOffset: 0 + yOffset: 115.6 + xAdvance: 128 + scale: 1 + name: 2639 + hashCode: 1748462 + unicode: 9785 + pivot: {x: 0.5, y: 0.5} + sprite: {fileID: 0} + fallbackSpriteAssets: [] +--- !u!21 &1369835458 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: TextMeshPro/Sprite + m_Shader: {fileID: 4800000, guid: cf81c85f95fe47e1a27f6ae460cf182c, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: [] + m_Floats: [] + m_Colors: [] diff --git a/Assets/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset.meta b/Assets/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset.meta new file mode 100644 index 0000000..c7ac83f --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c41005c129ba4d66911b75229fd70b45 +timeCreated: 1480316912 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Style Sheets.meta b/Assets/TextMesh Pro/Resources/Style Sheets.meta new file mode 100644 index 0000000..4958550 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Style Sheets.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4aecb92fff08436c8303b10eab8da368 +folderAsset: yes +timeCreated: 1441876950 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset b/Assets/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset new file mode 100644 index 0000000..ceb609b --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset @@ -0,0 +1,68 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ab2114bdc8544297b417dfefe9f1e410, type: 3} + m_Name: Default Style Sheet + m_EditorClassIdentifier: + m_StyleList: + - m_Name: H1 + m_HashCode: 2425 + m_OpeningDefinition: <#40ff80>* + m_ClosingDefinition: '*' + m_OpeningTagArray: 3c00000073000000690000007a000000650000003d00000032000000650000006d0000003e0000003c000000620000003e0000003c000000230000003400000030000000660000006600000038000000300000003e0000002a000000 + m_ClosingTagArray: 2a0000003c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e000000 + - m_Name: Quote + m_HashCode: 92254330 + m_OpeningDefinition: + m_ClosingDefinition: + m_OpeningTagArray: 3c000000690000003e0000003c00000073000000690000007a000000650000003d0000003700000035000000250000003e0000003c0000006d000000610000007200000067000000690000006e0000003d0000003100000030000000250000003e000000 + m_ClosingTagArray: 3c0000002f000000690000003e0000003c0000002f00000073000000690000007a000000650000003e0000003c0000002f00000077000000690000006400000074000000680000003e0000003c0000002f0000006d000000610000007200000067000000690000006e0000003e000000 + - m_Name: Link + m_HashCode: 2687968 + m_OpeningDefinition: <#40a0ff> + m_ClosingDefinition: + m_OpeningTagArray: 3c000000750000003e0000003c000000230000003400000030000000610000003000000066000000660000003e0000003c0000006c000000690000006e0000006b0000003d0000002200000049000000440000005f0000003000000031000000220000003e000000 + m_ClosingTagArray: 3c0000002f000000750000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e0000003c0000002f0000006c000000690000006e0000006b0000003e000000 + - m_Name: Title + m_HashCode: 98732960 + m_OpeningDefinition: + m_ClosingDefinition: + m_OpeningTagArray: 3c00000073000000690000007a000000650000003d000000310000003200000035000000250000003e0000003c000000620000003e0000003c000000610000006c00000069000000670000006e0000003d00000063000000650000006e0000007400000065000000720000003e000000 + m_ClosingTagArray: 3c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000610000006c00000069000000670000006e0000003e000000 + - m_Name: H2 + m_HashCode: 2426 + m_OpeningDefinition: <#4080FF> + m_ClosingDefinition: + m_OpeningTagArray: 3c00000073000000690000007a000000650000003d000000310000002e00000035000000650000006d0000003e0000003c000000620000003e0000003c000000230000003400000030000000380000003000000046000000460000003e000000 + m_ClosingTagArray: 3c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e000000 + - m_Name: H3 + m_HashCode: 2427 + m_OpeningDefinition: <#FF8040> + m_ClosingDefinition: + m_OpeningTagArray: 3c00000073000000690000007a000000650000003d000000310000002e0000003100000037000000650000006d0000003e0000003c000000620000003e0000003c000000230000004600000046000000380000003000000034000000300000003e000000 + m_ClosingTagArray: 3c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e000000 + - m_Name: C1 + m_HashCode: 2194 + m_OpeningDefinition: + m_ClosingDefinition: + m_OpeningTagArray: 3c000000630000006f0000006c0000006f000000720000003d000000230000006600000066000000660000006600000034000000300000003e000000 + m_ClosingTagArray: 3c0000002f000000630000006f0000006c0000006f000000720000003e000000 + - m_Name: C2 + m_HashCode: 2193 + m_OpeningDefinition: + m_ClosingDefinition: + m_OpeningTagArray: 3c000000630000006f0000006c0000006f000000720000003d000000230000006600000066000000340000003000000046000000460000003e0000003c00000073000000690000007a000000650000003d000000310000003200000035000000250000003e000000 + m_ClosingTagArray: 3c0000002f000000630000006f0000006c0000006f000000720000003e0000003c0000002f00000073000000690000007a000000650000003e000000 + - m_Name: C3 + m_HashCode: 2192 + m_OpeningDefinition: + m_ClosingDefinition: + m_OpeningTagArray: 3c000000630000006f0000006c0000006f000000720000003d000000230000003800000030000000410000003000000046000000460000003e0000003c000000620000003e000000 + m_ClosingTagArray: 3c0000002f000000630000006f0000006c0000006f000000720000003e0000003c0000002f000000620000003e000000 diff --git a/Assets/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset.meta b/Assets/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset.meta new file mode 100644 index 0000000..95fd96e --- /dev/null +++ b/Assets/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f952c082cb03451daed3ee968ac6c63e +timeCreated: 1432805430 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Resources/TMP Settings.asset b/Assets/TextMesh Pro/Resources/TMP Settings.asset new file mode 100644 index 0000000..f34d7c9 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/TMP Settings.asset @@ -0,0 +1,103 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2705215ac5b84b70bacc50632be6e391, type: 3} + m_Name: TMP Settings + m_EditorClassIdentifier: + m_enableWordWrapping: 1 + m_enableKerning: 1 + m_enableExtraPadding: 0 + m_enableTintAllSprites: 0 + m_enableParseEscapeCharacters: 1 + m_missingGlyphCharacter: 0 + m_warningsDisabled: 0 + m_defaultFontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_defaultFontAssetPath: Fonts & Materials/ + m_defaultFontSize: 36 + m_defaultAutoSizeMinRatio: 0.5 + m_defaultAutoSizeMaxRatio: 2 + m_defaultTextMeshProTextContainerSize: {x: 20, y: 5} + m_defaultTextMeshProUITextContainerSize: {x: 200, y: 50} + m_autoSizeTextContainer: 0 + m_fallbackFontAssets: [] + m_matchMaterialPreset: 1 + m_defaultSpriteAsset: {fileID: 11400000, guid: c41005c129ba4d66911b75229fd70b45, + type: 2} + m_defaultSpriteAssetPath: Sprite Assets/ + m_defaultColorGradientPresetsPath: Color Gradient Presets/ + m_enableEmojiSupport: 1 + m_defaultStyleSheet: {fileID: 11400000, guid: f952c082cb03451daed3ee968ac6c63e, + type: 2} + m_leadingCharacters: {fileID: 4900000, guid: d82c1b31c7e74239bff1220585707d2b, type: 3} + m_followingCharacters: {fileID: 4900000, guid: fade42e8bc714b018fac513c043d323b, + type: 3} + m_FontCreatorRecentSettings: + - sourceFontFileName: + sourceFontFileGUID: edcaa01543603ae4cb6b2edf25967e21 + pointSizeSamplingMode: 1 + pointSize: 109 + padding: 12 + packingMode: 0 + atlasWidth: 128 + atlasHeight: 128 + characterSetSelectionMode: 5 + characterSequence: 64 + fontStyle: 0 + fontStyleModifier: 2 + renderMode: 281 + includeFontFeatures: 0 + referenceFontAssetGUID: 903613a9fe4b65946aa20dfcce07abec + - sourceFontFileName: + sourceFontFileGUID: edcaa01543603ae4cb6b2edf25967e21 + pointSizeSamplingMode: 0 + pointSize: 108 + padding: 12 + packingMode: 0 + atlasWidth: 128 + atlasHeight: 128 + characterSetSelectionMode: 5 + characterSequence: 64 + fontStyle: 0 + fontStyleModifier: 2 + renderMode: 2090 + includeFontFeatures: 0 + referenceFontAssetGUID: 70cf10c1d306ada42aa6cd7268db990d + - sourceFontFileName: + sourceFontFileGUID: edcaa01543603ae4cb6b2edf25967e21 + pointSizeSamplingMode: 1 + pointSize: 109 + padding: 12 + packingMode: 0 + atlasWidth: 128 + atlasHeight: 128 + characterSetSelectionMode: 5 + characterSequence: 64 + fontStyle: 0 + fontStyleModifier: 2 + renderMode: 329 + includeFontFeatures: 0 + referenceFontAssetGUID: 396d465a5821ead47b589b228da7e980 + - sourceFontFileName: + sourceFontFileGUID: edcaa01543603ae4cb6b2edf25967e21 + pointSizeSamplingMode: 1 + pointSize: 338 + padding: 36 + packingMode: 0 + atlasWidth: 4096 + atlasHeight: 4096 + characterSetSelectionMode: 1 + characterSequence: 32 - 126, 160 - 255, 8192 - 8303, 8364, 8482, 9633 + fontStyle: 0 + fontStyleModifier: 2 + renderMode: 329 + includeFontFeatures: 0 + referenceFontAssetGUID: 3a4171c252e1112499af739474d9f48e + m_CreationSettingsSelectionIndex: 0 + m_CreationSettingsIndex: 0 diff --git a/Assets/TextMesh Pro/Resources/TMP Settings.asset.meta b/Assets/TextMesh Pro/Resources/TMP Settings.asset.meta new file mode 100644 index 0000000..32db384 --- /dev/null +++ b/Assets/TextMesh Pro/Resources/TMP Settings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3f5b5dff67a942289a9defa416b206f3 +timeCreated: 1436653997 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Sprites.meta b/Assets/TextMesh Pro/Sprites.meta new file mode 100644 index 0000000..8b699e5 --- /dev/null +++ b/Assets/TextMesh Pro/Sprites.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d0603b6d5186471b96c778c3949c7ce2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Sprites/EmojiOne Attribution.txt b/Assets/TextMesh Pro/Sprites/EmojiOne Attribution.txt new file mode 100644 index 0000000..384180a --- /dev/null +++ b/Assets/TextMesh Pro/Sprites/EmojiOne Attribution.txt @@ -0,0 +1,3 @@ +This sample of beautiful emojis are provided by EmojiOne https://www.emojione.com/ + +Please visit their website to view the complete set of their emojis and review their licensing terms. \ No newline at end of file diff --git a/Assets/TextMesh Pro/Sprites/EmojiOne Attribution.txt.meta b/Assets/TextMesh Pro/Sprites/EmojiOne Attribution.txt.meta new file mode 100644 index 0000000..0d30e65 --- /dev/null +++ b/Assets/TextMesh Pro/Sprites/EmojiOne Attribution.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 381dcb09d5029d14897e55f98031fca5 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Sprites/EmojiOne.json b/Assets/TextMesh Pro/Sprites/EmojiOne.json new file mode 100644 index 0000000..6c4e50b --- /dev/null +++ b/Assets/TextMesh Pro/Sprites/EmojiOne.json @@ -0,0 +1,156 @@ +{"frames": [ + +{ + "filename": "1f60a.png", + "frame": {"x":0,"y":0,"w":128,"h":128}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, + "sourceSize": {"w":128,"h":128}, + "pivot": {"x":0.5,"y":0.5} +}, +{ + "filename": "1f60b.png", + "frame": {"x":128,"y":0,"w":128,"h":128}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, + "sourceSize": {"w":128,"h":128}, + "pivot": {"x":0.5,"y":0.5} +}, +{ + "filename": "1f60d.png", + "frame": {"x":256,"y":0,"w":128,"h":128}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, + "sourceSize": {"w":128,"h":128}, + "pivot": {"x":0.5,"y":0.5} +}, +{ + "filename": "1f60e.png", + "frame": {"x":384,"y":0,"w":128,"h":128}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, + "sourceSize": {"w":128,"h":128}, + "pivot": {"x":0.5,"y":0.5} +}, +{ + "filename": "1f600.png", + "frame": {"x":0,"y":128,"w":128,"h":128}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, + "sourceSize": {"w":128,"h":128}, + "pivot": {"x":0.5,"y":0.5} +}, +{ + "filename": "1f601.png", + "frame": {"x":128,"y":128,"w":128,"h":128}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, + "sourceSize": {"w":128,"h":128}, + "pivot": {"x":0.5,"y":0.5} +}, +{ + "filename": "1f602.png", + "frame": {"x":256,"y":128,"w":128,"h":128}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, + "sourceSize": {"w":128,"h":128}, + "pivot": {"x":0.5,"y":0.5} +}, +{ + "filename": "1f603.png", + "frame": {"x":384,"y":128,"w":128,"h":128}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, + "sourceSize": {"w":128,"h":128}, + "pivot": {"x":0.5,"y":0.5} +}, +{ + "filename": "1f604.png", + "frame": {"x":0,"y":256,"w":128,"h":128}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, + "sourceSize": {"w":128,"h":128}, + "pivot": {"x":0.5,"y":0.5} +}, +{ + "filename": "1f605.png", + "frame": {"x":128,"y":256,"w":128,"h":128}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, + "sourceSize": {"w":128,"h":128}, + "pivot": {"x":0.5,"y":0.5} +}, +{ + "filename": "1f606.png", + "frame": {"x":256,"y":256,"w":128,"h":128}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, + "sourceSize": {"w":128,"h":128}, + "pivot": {"x":0.5,"y":0.5} +}, +{ + "filename": "1f609.png", + "frame": {"x":384,"y":256,"w":128,"h":128}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, + "sourceSize": {"w":128,"h":128}, + "pivot": {"x":0.5,"y":0.5} +}, +{ + "filename": "1f618.png", + "frame": {"x":0,"y":384,"w":128,"h":128}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, + "sourceSize": {"w":128,"h":128}, + "pivot": {"x":0.5,"y":0.5} +}, +{ + "filename": "1f923.png", + "frame": {"x":128,"y":384,"w":128,"h":128}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, + "sourceSize": {"w":128,"h":128}, + "pivot": {"x":0.5,"y":0.5} +}, +{ + "filename": "263a.png", + "frame": {"x":256,"y":384,"w":128,"h":128}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, + "sourceSize": {"w":128,"h":128}, + "pivot": {"x":0.5,"y":0.5} +}, +{ + "filename": "2639.png", + "frame": {"x":384,"y":384,"w":128,"h":128}, + "rotated": false, + "trimmed": false, + "spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, + "sourceSize": {"w":128,"h":128}, + "pivot": {"x":0.5,"y":0.5} +}], +"meta": { + "app": "http://www.codeandweb.com/texturepacker", + "version": "1.0", + "image": "EmojiOne.png", + "format": "RGBA8888", + "size": {"w":512,"h":512}, + "scale": "1", + "smartupdate": "$TexturePacker:SmartUpdate:196a26a2e149d875b91ffc8fa3581e76:fc928c7e275404b7e0649307410475cb:424723c3774975ddb2053fd5c4b85f6e$" +} +} diff --git a/Assets/TextMesh Pro/Sprites/EmojiOne.json.meta b/Assets/TextMesh Pro/Sprites/EmojiOne.json.meta new file mode 100644 index 0000000..762cf15 --- /dev/null +++ b/Assets/TextMesh Pro/Sprites/EmojiOne.json.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8f05276190cf498a8153f6cbe761d4e6 +timeCreated: 1480316860 +licenseType: Pro +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro/Sprites/EmojiOne.png b/Assets/TextMesh Pro/Sprites/EmojiOne.png new file mode 100644 index 0000000000000000000000000000000000000000..4adb015b03a79ad884e9621af39524e78a5a8d08 GIT binary patch literal 73304 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 a68{gyEohdhSMK}(0000 Date: Mon, 11 Mar 2019 17:33:51 +0000 Subject: [PATCH 04/24] Code makes use of NaughtyAttributes, so lets add a copy here. --- Assets/Plugins/NaughtyAttributes.meta | 8 + .../NaughtyAttributes/Documentation.meta | 10 + .../Documentation/BlankSpace_Code.PNG | Bin 0 -> 4280 bytes .../Documentation/BlankSpace_Code.PNG.meta | 76 ++++ .../Documentation/BlankSpace_Inspector.PNG | Bin 0 -> 6765 bytes .../BlankSpace_Inspector.PNG.meta | 76 ++++ .../Documentation/BoxGroup_Code.PNG | Bin 0 -> 9145 bytes .../Documentation/BoxGroup_Code.PNG.meta | 76 ++++ .../Documentation/BoxGroup_Inspector.PNG | Bin 0 -> 9371 bytes .../Documentation/BoxGroup_Inspector.PNG.meta | 76 ++++ .../Documentation/Button_Code.PNG | Bin 0 -> 6111 bytes .../Documentation/Button_Code.PNG.meta | 76 ++++ .../Documentation/Button_Inspector.PNG | Bin 0 -> 6926 bytes .../Documentation/Button_Inspector.PNG.meta | 76 ++++ .../Documentation/Dropdown_Code.PNG | Bin 0 -> 21578 bytes .../Documentation/Dropdown_Code.PNG.meta | 76 ++++ .../Documentation/Dropdown_Inspector.gif | Bin 0 -> 128541 bytes .../Documentation/Dropdown_Inspector.gif.meta | 76 ++++ .../Documentation/EnableIf_Code.PNG | Bin 0 -> 12296 bytes .../Documentation/EnableIf_Code.PNG.meta | 84 +++++ .../Documentation/EnableIf_Inspector.gif | Bin 0 -> 16163 bytes .../Documentation/EnableIf_Inspector.gif.meta | 84 +++++ .../Documentation/InfoBox_Code.PNG | Bin 0 -> 13227 bytes .../Documentation/InfoBox_Code.PNG.meta | 76 ++++ .../Documentation/InfoBox_Inspector.PNG | Bin 0 -> 12805 bytes .../Documentation/InfoBox_Inspector.PNG.meta | 76 ++++ .../Documentation/MinMaxSlider_Code.PNG | Bin 0 -> 4279 bytes .../Documentation/MinMaxSlider_Code.PNG.meta | 76 ++++ .../Documentation/MinMaxSlider_Inspector.PNG | Bin 0 -> 6693 bytes .../MinMaxSlider_Inspector.PNG.meta | 76 ++++ .../Documentation/MinValueMaxValue_Code.PNG | Bin 0 -> 5503 bytes .../MinValueMaxValue_Code.PNG.meta | 76 ++++ .../MinValueMaxValue_Inspector.gif | Bin 0 -> 97220 bytes .../MinValueMaxValue_Inspector.gif.meta | 76 ++++ .../Documentation/OnValueChanged_Code.PNG | Bin 0 -> 6789 bytes .../OnValueChanged_Code.PNG.meta | 76 ++++ .../Documentation/ProgressBar_Code.png | Bin 0 -> 15331 bytes .../Documentation/ProgressBar_Code.png.meta | 77 ++++ .../Documentation/ProgressBar_Inspector.gif | Bin 0 -> 14327 bytes .../ProgressBar_Inspector.gif.meta | 77 ++++ .../Documentation/ReadOnly_Code.PNG | Bin 0 -> 4018 bytes .../Documentation/ReadOnly_Code.PNG.meta | 76 ++++ .../Documentation/ReadOnly_Inspector.PNG | Bin 0 -> 6273 bytes .../Documentation/ReadOnly_Inspector.PNG.meta | 76 ++++ .../Documentation/ReorderableList_Code.PNG | Bin 0 -> 5388 bytes .../ReorderableList_Code.PNG.meta | 76 ++++ .../ReorderableList_Inspector.gif | Bin 0 -> 116020 bytes .../ReorderableList_Inspector.gif.meta | 76 ++++ .../Documentation/Required_Code.PNG | Bin 0 -> 6120 bytes .../Documentation/Required_Code.PNG.meta | 76 ++++ .../Documentation/Required_Inspector.PNG | Bin 0 -> 12482 bytes .../Documentation/Required_Inspector.PNG.meta | 76 ++++ .../Documentation/ResizableTextArea_Code.PNG | Bin 0 -> 3978 bytes .../ResizableTextArea_Code.PNG.meta | 76 ++++ .../ResizableTextArea_Inspector.gif | Bin 0 -> 32200 bytes .../ResizableTextArea_Inspector.gif.meta | 76 ++++ .../Documentation/Section_Code.PNG | Bin 0 -> 6709 bytes .../Documentation/Section_Code.PNG.meta | 76 ++++ .../Documentation/Section_Inspector.PNG | Bin 0 -> 9330 bytes .../Documentation/Section_Inspector.PNG.meta | 76 ++++ .../Documentation/ShowAssetPreview_Code.PNG | Bin 0 -> 6058 bytes .../ShowAssetPreview_Code.PNG.meta | 76 ++++ .../ShowAssetPreview_Inspector.PNG | Bin 0 -> 15534 bytes .../ShowAssetPreview_Inspector.PNG.meta | 76 ++++ .../Documentation/ShowIf_Code.PNG | Bin 0 -> 12607 bytes .../Documentation/ShowIf_Code.PNG.meta | 76 ++++ .../Documentation/ShowIf_Inspector.gif | Bin 0 -> 28248 bytes .../Documentation/ShowIf_Inspector.gif.meta | 76 ++++ .../Documentation/ShowNativeProperty_Code.PNG | Bin 0 -> 7249 bytes .../ShowNativeProperty_Code.PNG.meta | 76 ++++ .../ShowNativeProperty_Inspector.PNG | Bin 0 -> 10829 bytes .../ShowNativeProperty_Inspector.PNG.meta | 76 ++++ .../ShowNonSerializedField_Code.PNG | Bin 0 -> 9658 bytes .../ShowNonSerializedField_Code.PNG.meta | 76 ++++ .../ShowNonSerializedField_Inspector.PNG | Bin 0 -> 7504 bytes .../ShowNonSerializedField_Inspector.PNG.meta | 76 ++++ .../Documentation/Slider_Code.PNG | Bin 0 -> 5290 bytes .../Documentation/Slider_Code.PNG.meta | 76 ++++ .../Documentation/Slider_Inspector.PNG | Bin 0 -> 7315 bytes .../Documentation/Slider_Inspector.PNG.meta | 76 ++++ .../Documentation/ValidateInput_Code.PNG | Bin 0 -> 13407 bytes .../Documentation/ValidateInput_Code.PNG.meta | 76 ++++ .../Documentation/ValidateInput_Inspector.PNG | Bin 0 -> 11233 bytes .../ValidateInput_Inspector.PNG.meta | 76 ++++ Assets/Plugins/NaughtyAttributes/LICENSE.txt | 21 ++ .../NaughtyAttributes/LICENSE.txt.meta | 7 + Assets/Plugins/NaughtyAttributes/README.md | 216 +++++++++++ .../Plugins/NaughtyAttributes/README.md.meta | 7 + Assets/Plugins/NaughtyAttributes/Scripts.meta | 10 + .../NaughtyAttributes/Scripts/Core.meta | 10 + .../Scripts/Core/DrawConditionAttributes.meta | 10 + .../DrawConditionAttribute.cs | 9 + .../DrawConditionAttribute.cs.meta | 13 + .../HideIfAttribute.cs | 15 + .../HideIfAttribute.cs.meta | 13 + .../ShowIfAttribute.cs | 15 + .../ShowIfAttribute.cs.meta | 13 + .../Scripts/Core/DrawerAttributes.meta | 10 + .../Core/DrawerAttributes/ButtonAttribute.cs | 15 + .../DrawerAttributes/ButtonAttribute.cs.meta | 13 + .../DrawerAttributes/DisableIfAttribute.cs | 15 + .../DisableIfAttribute.cs.meta | 11 + .../Core/DrawerAttributes/DrawerAttribute.cs | 8 + .../DrawerAttributes/DrawerAttribute.cs.meta | 13 + .../DrawerAttributes/DropdownAttribute.cs | 57 +++ .../DropdownAttribute.cs.meta | 13 + .../DrawerAttributes/EnableIfAttribute.cs | 15 + .../EnableIfAttribute.cs.meta | 11 + .../DrawerAttributes/MinMaxSliderAttribute.cs | 17 + .../MinMaxSliderAttribute.cs.meta | 13 + .../DrawerAttributes/ProgressBarAttribute.cs | 32 ++ .../ProgressBarAttribute.cs.meta | 13 + .../DrawerAttributes/ReadOnlyAttribute.cs | 9 + .../ReadOnlyAttribute.cs.meta | 13 + .../ReorderableListAttribute.cs | 9 + .../ReorderableListAttribute.cs.meta | 13 + .../ResizableTextAreaAttribute.cs | 9 + .../ResizableTextAreaAttribute.cs.meta | 13 + .../ShowAssetPreviewAttribute.cs | 17 + .../ShowAssetPreviewAttribute.cs.meta | 13 + .../ShowNativePropertyAttribute.cs | 11 + .../ShowNativePropertyAttribute.cs.meta | 13 + .../ShowNonSerializedFieldAttribute.cs | 9 + .../ShowNonSerializedFieldAttribute.cs.meta | 13 + .../Core/DrawerAttributes/SliderAttribute.cs | 23 ++ .../DrawerAttributes/SliderAttribute.cs.meta | 13 + .../Scripts/Core/GroupAttributes.meta | 10 + .../Core/GroupAttributes/BoxGroupAttribute.cs | 13 + .../GroupAttributes/BoxGroupAttribute.cs.meta | 13 + .../Core/GroupAttributes/GroupAttribute.cs | 14 + .../GroupAttributes/GroupAttribute.cs.meta | 13 + .../Scripts/Core/MetaAttributes.meta | 10 + .../Core/MetaAttributes/InfoBoxAttribute.cs | 31 ++ .../MetaAttributes/InfoBoxAttribute.cs.meta | 13 + .../Core/MetaAttributes/MetaAttribute.cs | 9 + .../Core/MetaAttributes/MetaAttribute.cs.meta | 13 + .../MetaAttributes/OnValueChangedAttribute.cs | 15 + .../OnValueChangedAttribute.cs.meta | 13 + .../Scripts/Core/NaughtyAttribute.cs | 9 + .../Scripts/Core/NaughtyAttribute.cs.meta | 13 + .../Scripts/Core/NaughtyAttributes.asmdef | 3 + .../Core/NaughtyAttributes.asmdef.meta | 7 + .../Scripts/Core/ValidatorAttributes.meta | 10 + .../ValidatorAttributes/MaxValueAttribute.cs | 20 ++ .../MaxValueAttribute.cs.meta | 13 + .../ValidatorAttributes/MinValueAttribute.cs | 20 ++ .../MinValueAttribute.cs.meta | 13 + .../ValidatorAttributes/RequiredAttribute.cs | 15 + .../RequiredAttribute.cs.meta | 13 + .../ValidateInputAttribute.cs | 17 + .../ValidateInputAttribute.cs.meta | 13 + .../ValidatorAttributes/ValidatorAttribute.cs | 8 + .../ValidatorAttribute.cs.meta | 13 + .../NaughtyAttributes/Scripts/Editor.meta | 10 + .../Scripts/Editor/Attributes.meta | 10 + .../Editor/Attributes/BaseAttribute.cs | 23 ++ .../Editor/Attributes/BaseAttribute.cs.meta | 13 + .../Editor/Attributes/FieldDrawerAttribute.cs | 11 + .../Attributes/FieldDrawerAttribute.cs.meta | 13 + .../Scripts/Editor/Attributes/IAttribute.cs | 9 + .../Editor/Attributes/IAttribute.cs.meta | 13 + .../Attributes/MethodDrawerAttribute.cs | 11 + .../Attributes/MethodDrawerAttribute.cs.meta | 13 + .../NativePropertyDrawerAttribute.cs | 11 + .../NativePropertyDrawerAttribute.cs.meta | 13 + .../PropertyDrawConditionAttribute.cs | 11 + .../PropertyDrawConditionAttribute.cs.meta | 13 + .../Attributes/PropertyDrawerAttribute.cs | 11 + .../PropertyDrawerAttribute.cs.meta | 13 + .../Attributes/PropertyGrouperAttribute.cs | 11 + .../PropertyGrouperAttribute.cs.meta | 13 + .../Attributes/PropertyMetaAttribute.cs | 11 + .../Attributes/PropertyMetaAttribute.cs.meta | 13 + .../Attributes/PropertyValidatorAttribute.cs | 11 + .../PropertyValidatorAttribute.cs.meta | 13 + .../Scripts/Editor/CodeGeneration.meta | 10 + .../Editor/CodeGeneration/CodeGenerator.cs | 101 ++++++ .../CodeGeneration/CodeGenerator.cs.meta | 13 + .../CodeGeneration/FieldDrawerDatabase.cs | 33 ++ .../FieldDrawerDatabase.cs.meta | 13 + .../CodeGeneration/MethodDrawerDatabase.cs | 33 ++ .../MethodDrawerDatabase.cs.meta | 13 + .../NativePropertyDrawerDatabase.cs | 33 ++ .../NativePropertyDrawerDatabase.cs.meta | 13 + .../PropertyDrawConditionDatabase.cs | 34 ++ .../PropertyDrawConditionDatabase.cs.meta | 13 + .../CodeGeneration/PropertyDrawerDatabase.cs | 50 +++ .../PropertyDrawerDatabase.cs.meta | 13 + .../CodeGeneration/PropertyGrouperDatabase.cs | 33 ++ .../PropertyGrouperDatabase.cs.meta | 13 + .../CodeGeneration/PropertyMetaDatabase.cs | 34 ++ .../PropertyMetaDatabase.cs.meta | 13 + .../PropertyValidatorDatabase.cs | 36 ++ .../PropertyValidatorDatabase.cs.meta | 13 + .../Editor/CodeGeneration/Templates.meta | 10 + .../Templates/FieldDrawerDatabaseTemplate.txt | 31 ++ .../FieldDrawerDatabaseTemplate.txt.meta | 9 + .../MethodDrawerDatabaseTemplate.txt | 31 ++ .../MethodDrawerDatabaseTemplate.txt.meta | 9 + .../NativePropertyDrawerDbTemplate.txt | 31 ++ .../NativePropertyDrawerDbTemplate.txt.meta | 9 + .../PropertyDrawConditionDatabaseTemplate.txt | 31 ++ ...ertyDrawConditionDatabaseTemplate.txt.meta | 9 + .../PropertyDrawerDatabaseTemplate.txt | 39 ++ .../PropertyDrawerDatabaseTemplate.txt.meta | 9 + .../PropertyGrouperDatabaseTemplate.txt | 31 ++ .../PropertyGrouperDatabaseTemplate.txt.meta | 9 + .../PropertyMetaDatabaseTemplate.txt | 31 ++ .../PropertyMetaDatabaseTemplate.txt.meta | 9 + .../PropertyValidatorDatabaseTemplate.txt | 31 ++ ...PropertyValidatorDatabaseTemplate.txt.meta | 9 + .../Scripts/Editor/Editors.meta | 10 + .../Scripts/Editor/Editors/InspectorEditor.cs | 320 +++++++++++++++++ .../Editor/Editors/InspectorEditor.cs.meta | 13 + .../Scripts/Editor/FieldDrawers.meta | 10 + .../Editor/FieldDrawers/FieldDrawer.cs | 9 + .../Editor/FieldDrawers/FieldDrawer.cs.meta | 13 + .../ShowNonSerializedFieldFieldDrawer.cs | 20 ++ .../ShowNonSerializedFieldFieldDrawer.cs.meta | 13 + .../Scripts/Editor/MethodDrawers.meta | 10 + .../MethodDrawers/ButtonMethodDrawer.cs | 29 ++ .../MethodDrawers/ButtonMethodDrawer.cs.meta | 13 + .../Editor/MethodDrawers/MethodDrawer.cs | 9 + .../Editor/MethodDrawers/MethodDrawer.cs.meta | 13 + .../Scripts/Editor/NativePropertyDrawers.meta | 10 + .../NativePropertyDrawer.cs | 9 + .../NativePropertyDrawer.cs.meta | 13 + .../ShowNativePropertyNativePropertyDrawer.cs | 20 ++ ...NativePropertyNativePropertyDrawer.cs.meta | 13 + .../Editor/NaughtyAttributes.Editor.asmdef | 12 + .../NaughtyAttributes.Editor.asmdef.meta | 7 + .../Editor/PropertyDrawConditions.meta | 10 + .../HideIfPropertyDrawCondition.cs | 35 ++ .../HideIfPropertyDrawCondition.cs.meta | 13 + .../PropertyDrawCondition.cs | 9 + .../PropertyDrawCondition.cs.meta | 13 + .../ShowIfPropertyDrawCondition.cs | 35 ++ .../ShowIfPropertyDrawCondition.cs.meta | 13 + .../Scripts/Editor/PropertyDrawers.meta | 10 + .../DisableIfPropertyDrawer.cs | 48 +++ .../DisableIfPropertyDrawer.cs.meta | 11 + .../PropertyDrawers/DropdownPropertyDrawer.cs | 130 +++++++ .../DropdownPropertyDrawer.cs.meta | 13 + .../PropertyDrawers/EnableIfPropertyDrawer.cs | 48 +++ .../EnableIfPropertyDrawer.cs.meta | 11 + .../MinMaxSliderPropertyDrawer.cs | 76 ++++ .../MinMaxSliderPropertyDrawer.cs.meta | 13 + .../ProgressBarPropertyDrawer.cs | 96 +++++ .../ProgressBarPropertyDrawer.cs.meta | 13 + .../Editor/PropertyDrawers/PropertyDrawer.cs | 14 + .../PropertyDrawers/PropertyDrawer.cs.meta | 13 + .../PropertyDrawers/ReadOnlyPropertyDrawer.cs | 16 + .../ReadOnlyPropertyDrawer.cs.meta | 13 + .../ReorderableListPropertyDrawer.cs | 115 ++++++ .../ReorderableListPropertyDrawer.cs.meta | 13 + .../ResizableTextAreaPropertyDrawer.cs | 35 ++ .../ResizableTextAreaPropertyDrawer.cs.meta | 13 + .../ShowAssetPreviewPropertyDrawer.cs | 40 +++ .../ShowAssetPreviewPropertyDrawer.cs.meta | 13 + .../PropertyDrawers/SliderPropertyDrawer.cs | 31 ++ .../SliderPropertyDrawer.cs.meta | 13 + .../Scripts/Editor/PropertyGroupers.meta | 10 + .../BoxGroupPropertyGrouper.cs | 24 ++ .../BoxGroupPropertyGrouper.cs.meta | 13 + .../PropertyGroupers/PropertyGrouper.cs | 11 + .../PropertyGroupers/PropertyGrouper.cs.meta | 13 + .../Scripts/Editor/PropertyMetas.meta | 10 + .../PropertyMetas/InfoBoxPropertyMeta.cs | 68 ++++ .../PropertyMetas/InfoBoxPropertyMeta.cs.meta | 13 + .../OnValueChangedPropertyMeta.cs | 31 ++ .../OnValueChangedPropertyMeta.cs.meta | 13 + .../Editor/PropertyMetas/PropertyMeta.cs | 9 + .../Editor/PropertyMetas/PropertyMeta.cs.meta | 13 + .../Scripts/Editor/PropertyValidators.meta | 10 + .../MaxValuePropertyValidator.cs | 33 ++ .../MaxValuePropertyValidator.cs.meta | 13 + .../MinValuePropertyValidator.cs | 33 ++ .../MinValuePropertyValidator.cs.meta | 13 + .../PropertyValidators/PropertyValidator.cs | 9 + .../PropertyValidator.cs.meta | 13 + .../RequiredPropertyValidator.cs | 32 ++ .../RequiredPropertyValidator.cs.meta | 13 + .../ValidateInputPropertyValidator.cs | 55 +++ .../ValidateInputPropertyValidator.cs.meta | 13 + .../Scripts/Editor/Utility.meta | 10 + .../Editor/Utility/EditorDrawUtility.cs | 145 ++++++++ .../Editor/Utility/EditorDrawUtility.cs.meta | 13 + .../Scripts/Editor/Utility/IOUtility.cs | 49 +++ .../Scripts/Editor/Utility/IOUtility.cs.meta | 13 + .../Scripts/Editor/Utility/PropertyUtility.cs | 27 ++ .../Editor/Utility/PropertyUtility.cs.meta | 13 + .../Editor/Utility/ReflectionUtility.cs | 84 +++++ .../Editor/Utility/ReflectionUtility.cs.meta | 13 + .../NaughtyAttributes/Scripts/Test.meta | 8 + .../Test/NaughtyAttributes.Test.asmdef | 10 + .../Test/NaughtyAttributes.Test.asmdef.meta | 7 + .../Scripts/Test/NaughtyComponent.cs | 157 ++++++++ .../Scripts/Test/NaughtyComponent.cs.meta | 13 + .../Scripts/Test/NaughtyScriptableObject.cs | 157 ++++++++ .../Test/NaughtyScriptableObject.cs.meta | 13 + .../Plugins/NaughtyAttributes/TestAssets.meta | 10 + .../NaughtyAttributes/TestAssets/Cube.prefab | 97 +++++ .../TestAssets/Cube.prefab.meta | 10 + .../TestAssets/NaughtyScriptableObject.asset | 40 +++ .../NaughtyScriptableObject.asset.meta | 10 + .../TestAssets/icon-github.png | Bin 0 -> 29968 bytes .../TestAssets/icon-github.png.meta | 103 ++++++ Assets/Plugins/NaughtyAttributes/_Scenes.meta | 10 + .../NaughtyAttributes/_Scenes/DemoScene.unity | 334 ++++++++++++++++++ .../_Scenes/DemoScene.unity.meta | 9 + 310 files changed, 8733 insertions(+) create mode 100644 Assets/Plugins/NaughtyAttributes.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/BlankSpace_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/BlankSpace_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/BlankSpace_Inspector.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/BlankSpace_Inspector.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/BoxGroup_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/BoxGroup_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/BoxGroup_Inspector.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/BoxGroup_Inspector.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Button_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Button_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Button_Inspector.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Button_Inspector.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Dropdown_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Dropdown_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Dropdown_Inspector.gif create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Dropdown_Inspector.gif.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/EnableIf_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/EnableIf_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/EnableIf_Inspector.gif create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/EnableIf_Inspector.gif.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/InfoBox_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/InfoBox_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/InfoBox_Inspector.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/InfoBox_Inspector.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/MinMaxSlider_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/MinMaxSlider_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/MinMaxSlider_Inspector.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/MinMaxSlider_Inspector.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/MinValueMaxValue_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/MinValueMaxValue_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/MinValueMaxValue_Inspector.gif create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/MinValueMaxValue_Inspector.gif.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/OnValueChanged_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/OnValueChanged_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ProgressBar_Code.png create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ProgressBar_Code.png.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ProgressBar_Inspector.gif create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ProgressBar_Inspector.gif.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ReadOnly_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ReadOnly_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ReadOnly_Inspector.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ReadOnly_Inspector.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ReorderableList_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ReorderableList_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ReorderableList_Inspector.gif create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ReorderableList_Inspector.gif.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Required_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Required_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Required_Inspector.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Required_Inspector.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ResizableTextArea_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ResizableTextArea_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ResizableTextArea_Inspector.gif create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ResizableTextArea_Inspector.gif.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Section_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Section_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Section_Inspector.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Section_Inspector.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ShowAssetPreview_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ShowAssetPreview_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ShowAssetPreview_Inspector.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ShowAssetPreview_Inspector.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ShowIf_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ShowIf_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ShowIf_Inspector.gif create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ShowIf_Inspector.gif.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ShowNativeProperty_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ShowNativeProperty_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ShowNativeProperty_Inspector.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ShowNativeProperty_Inspector.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ShowNonSerializedField_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ShowNonSerializedField_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ShowNonSerializedField_Inspector.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ShowNonSerializedField_Inspector.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Slider_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Slider_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Slider_Inspector.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/Slider_Inspector.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ValidateInput_Code.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ValidateInput_Code.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ValidateInput_Inspector.PNG create mode 100644 Assets/Plugins/NaughtyAttributes/Documentation/ValidateInput_Inspector.PNG.meta create mode 100644 Assets/Plugins/NaughtyAttributes/LICENSE.txt create mode 100644 Assets/Plugins/NaughtyAttributes/LICENSE.txt.meta create mode 100644 Assets/Plugins/NaughtyAttributes/README.md create mode 100644 Assets/Plugins/NaughtyAttributes/README.md.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawConditionAttributes.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawConditionAttributes/DrawConditionAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawConditionAttributes/DrawConditionAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawConditionAttributes/HideIfAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawConditionAttributes/HideIfAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawConditionAttributes/ShowIfAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawConditionAttributes/ShowIfAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ButtonAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ButtonAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/DisableIfAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/DisableIfAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/DrawerAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/DrawerAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/DropdownAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/DropdownAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnableIfAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnableIfAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/MinMaxSliderAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/MinMaxSliderAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ProgressBarAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ProgressBarAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ReadOnlyAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ReadOnlyAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ReorderableListAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ReorderableListAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ResizableTextAreaAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ResizableTextAreaAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowAssetPreviewAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowAssetPreviewAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowNativePropertyAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowNativePropertyAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowNonSerializedFieldAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowNonSerializedFieldAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/SliderAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/SliderAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes/BoxGroupAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes/BoxGroupAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes/GroupAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes/GroupAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/InfoBoxAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/InfoBoxAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/MetaAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/MetaAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/OnValueChangedAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/OnValueChangedAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/NaughtyAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/NaughtyAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/NaughtyAttributes.asmdef create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/NaughtyAttributes.asmdef.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MaxValueAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MaxValueAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MinValueAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MinValueAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/RequiredAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/RequiredAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidateInputAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidateInputAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidatorAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidatorAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/BaseAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/BaseAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/FieldDrawerAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/FieldDrawerAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/IAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/IAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/MethodDrawerAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/MethodDrawerAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/NativePropertyDrawerAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/NativePropertyDrawerAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyDrawConditionAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyDrawConditionAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyDrawerAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyDrawerAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyGrouperAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyGrouperAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyMetaAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyMetaAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyValidatorAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyValidatorAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/CodeGenerator.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/CodeGenerator.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/FieldDrawerDatabase.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/FieldDrawerDatabase.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/MethodDrawerDatabase.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/MethodDrawerDatabase.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/NativePropertyDrawerDatabase.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/NativePropertyDrawerDatabase.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawConditionDatabase.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawConditionDatabase.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawerDatabase.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawerDatabase.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyGrouperDatabase.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyGrouperDatabase.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyMetaDatabase.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyMetaDatabase.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyValidatorDatabase.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyValidatorDatabase.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/FieldDrawerDatabaseTemplate.txt create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/FieldDrawerDatabaseTemplate.txt.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/MethodDrawerDatabaseTemplate.txt create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/MethodDrawerDatabaseTemplate.txt.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/NativePropertyDrawerDbTemplate.txt create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/NativePropertyDrawerDbTemplate.txt.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyDrawConditionDatabaseTemplate.txt create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyDrawConditionDatabaseTemplate.txt.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyDrawerDatabaseTemplate.txt create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyDrawerDatabaseTemplate.txt.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyGrouperDatabaseTemplate.txt create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyGrouperDatabaseTemplate.txt.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyMetaDatabaseTemplate.txt create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyMetaDatabaseTemplate.txt.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyValidatorDatabaseTemplate.txt create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyValidatorDatabaseTemplate.txt.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Editors.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Editors/InspectorEditor.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Editors/InspectorEditor.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/FieldDrawer.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/FieldDrawer.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/ShowNonSerializedFieldFieldDrawer.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/ShowNonSerializedFieldFieldDrawer.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers/ButtonMethodDrawer.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers/ButtonMethodDrawer.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers/MethodDrawer.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers/MethodDrawer.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/NativePropertyDrawer.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/NativePropertyDrawer.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/ShowNativePropertyNativePropertyDrawer.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/ShowNativePropertyNativePropertyDrawer.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/NaughtyAttributes.Editor.asmdef create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/NaughtyAttributes.Editor.asmdef.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/HideIfPropertyDrawCondition.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/HideIfPropertyDrawCondition.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/PropertyDrawCondition.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/PropertyDrawCondition.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/ShowIfPropertyDrawCondition.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/ShowIfPropertyDrawCondition.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DisableIfPropertyDrawer.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DisableIfPropertyDrawer.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DropdownPropertyDrawer.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DropdownPropertyDrawer.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnableIfPropertyDrawer.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnableIfPropertyDrawer.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/MinMaxSliderPropertyDrawer.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/MinMaxSliderPropertyDrawer.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ProgressBarPropertyDrawer.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ProgressBarPropertyDrawer.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/PropertyDrawer.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/PropertyDrawer.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReadOnlyPropertyDrawer.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReadOnlyPropertyDrawer.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReorderableListPropertyDrawer.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReorderableListPropertyDrawer.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ResizableTextAreaPropertyDrawer.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ResizableTextAreaPropertyDrawer.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ShowAssetPreviewPropertyDrawer.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ShowAssetPreviewPropertyDrawer.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/SliderPropertyDrawer.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/SliderPropertyDrawer.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers/BoxGroupPropertyGrouper.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers/BoxGroupPropertyGrouper.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers/PropertyGrouper.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers/PropertyGrouper.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/InfoBoxPropertyMeta.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/InfoBoxPropertyMeta.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/OnValueChangedPropertyMeta.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/OnValueChangedPropertyMeta.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/PropertyMeta.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/PropertyMeta.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/MaxValuePropertyValidator.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/MaxValuePropertyValidator.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/MinValuePropertyValidator.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/MinValuePropertyValidator.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/PropertyValidator.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/PropertyValidator.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/RequiredPropertyValidator.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/RequiredPropertyValidator.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/ValidateInputPropertyValidator.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/ValidateInputPropertyValidator.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/EditorDrawUtility.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/EditorDrawUtility.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/IOUtility.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/IOUtility.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/PropertyUtility.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/PropertyUtility.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/ReflectionUtility.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/ReflectionUtility.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Test.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyAttributes.Test.asmdef create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyAttributes.Test.asmdef.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyComponent.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyComponent.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyScriptableObject.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyScriptableObject.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/TestAssets.meta create mode 100644 Assets/Plugins/NaughtyAttributes/TestAssets/Cube.prefab create mode 100644 Assets/Plugins/NaughtyAttributes/TestAssets/Cube.prefab.meta create mode 100644 Assets/Plugins/NaughtyAttributes/TestAssets/NaughtyScriptableObject.asset create mode 100644 Assets/Plugins/NaughtyAttributes/TestAssets/NaughtyScriptableObject.asset.meta create mode 100644 Assets/Plugins/NaughtyAttributes/TestAssets/icon-github.png create mode 100644 Assets/Plugins/NaughtyAttributes/TestAssets/icon-github.png.meta create mode 100644 Assets/Plugins/NaughtyAttributes/_Scenes.meta create mode 100644 Assets/Plugins/NaughtyAttributes/_Scenes/DemoScene.unity create mode 100644 Assets/Plugins/NaughtyAttributes/_Scenes/DemoScene.unity.meta diff --git a/Assets/Plugins/NaughtyAttributes.meta b/Assets/Plugins/NaughtyAttributes.meta new file mode 100644 index 0000000..fae4246 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0b7f06eca19d1b745a832197fe686d6d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation.meta b/Assets/Plugins/NaughtyAttributes/Documentation.meta new file mode 100644 index 0000000..df80bdc --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8dde3911cdcacad4cbe3192d388a5218 +folderAsset: yes +timeCreated: 1508669465 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/BlankSpace_Code.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/BlankSpace_Code.PNG new file mode 100644 index 0000000000000000000000000000000000000000..dc6b1b23bdc3f1134492c0cb55068ad98f87a044 GIT binary patch literal 4280 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/BlankSpace_Code.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/BlankSpace_Code.PNG.meta new file mode 100644 index 0000000..9e74b46 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/BlankSpace_Code.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 022c178ec9e442345958ad25512a17f4 +timeCreated: 1508669477 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/BlankSpace_Inspector.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/BlankSpace_Inspector.PNG new file mode 100644 index 0000000000000000000000000000000000000000..bf7450f9848d5b978afd58a3f922938e48a7d351 GIT binary patch literal 6765 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/BoxGroup_Code.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/BoxGroup_Code.PNG.meta new file mode 100644 index 0000000..7f1d43a --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/BoxGroup_Code.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: b962d99ba1e86044ea453878b9fd1ad6 +timeCreated: 1508669478 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/BoxGroup_Inspector.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/BoxGroup_Inspector.PNG new file mode 100644 index 0000000000000000000000000000000000000000..624d4f74b0866b248845663de5b841eb7230b5e4 GIT binary patch literal 9371 zcmZu%XH-*Lw?zd}>4KLgp(?#gPpDBukRnZ_NfAVPm4v2%Ku|;!=>!F&_ugCR9q9xD z5iyt$DWTVQxcB?sxMRHcBW+}#bN1PLt-0o$>mc-XHEFJ~T_YnSqtUt#eMClfVFdV| zedRLnz6t(z{&B(kk)}FX$?(nJzz=dqwTEhCWaY6`$2Jte@2ej7&AiFTXi?{{3q9_6 z_GDyy5?W9-BY!L60?fx`C7seE;x5;k_UzRJ!7G~AB128MXuDat)KOCmD@I&248=Uz zstjx*T&W4yFKXF|2ncXRiCna~s(qg?oUiCApU8zL9L}E6)dR84&tLh0F->A_*? z*{u*UQetb+GD+!7(DXqFe`;-zKz@F{*Uw&tX za+0#`zL1=vA`!&fw}ukLse6SJ8^=Ee8oh9_)_sXD&-l&`CNqqaFeiuN{X-+c;<#w- zX9Mpow+Pl}PiQ$5e>Q-C8xCQsSry4(I#tUV)Q&S7sJ*`yTKjWSM(LJsK+erU!MKja zQ-k2Wp4R@e;c2)y2hfbBa7P93Kkb!3(2oA#CyE(wgYlu)^hC;@wqJ~Go6vWo zYs@^Z%~*^>x3=;&W59f2AK&+FR?z#hcQkJ{ju;1cAM}S_qNfdYZ$0s=_wqgs_EMrx zIi94n?T;6H!BN_@6}`6DYF*>DPyiQlbJb7-ZcJOeIeShgNuoXLCa1c7i+$g9Up4aw z526qCZENZmn}{mv94q@FHH0X2vn-Q^l`zKXTQBCs?KR+E=TCn)Yn`qZ6)l=^h3w|tiFboKl-m5VP4rL(hCPODRbnp*L2w$qw$TFCloa#_;ePkv z-8X?o9+vpCHH|*8g9+A-^cslu_qWQQ_hZF-hpAePFGTO|Dhgeqy~Cm87k@8?t#2fF zH&)W^s4e_e(9&zlcqAmCUp(YMJGRClARu@h)4X-E9%8-o^l+CbyhE6N=^BgCKH4RI zb4AzSKfN<^d}LiCdV~n-2%+zuR`OZ>(mz#dy)}O$7>wR zl$n`nM5jGXa7{gm;vRC$2r`+gcE**DI2`r%-oHvk^~pWt2)%^~SXbEDtAKc)XvTs* zYkj(%KTTFjc-eYnIa}pqs5(GU{A4wJ=V=?6ajhTmNvxL(-3kJMD8b2&64;geiso*g zmNfVg@e{v^L&?&bpui0^r_nF3HR~6Ki96%Ix0`R?^OuOll!@_X>Sa5nBDYM;a+WL{ zw*GimREdaKFZw+2yD6Sv-g?$hG@WcHdxq#d4a~A=2{c0n)&%-HI5<4e(Rs)C(Y
  • ?>a1Lzz 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/BoxGroup_Inspector.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/BoxGroup_Inspector.PNG.meta new file mode 100644 index 0000000..bee4dee --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/BoxGroup_Inspector.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 9b966e4d3fd75654cbfe73a12abb0b40 +timeCreated: 1508669478 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/Button_Code.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/Button_Code.PNG new file mode 100644 index 0000000000000000000000000000000000000000..8b4d1b034eec7f77aa5d2480eae61648db7cd20e GIT binary patch literal 6111 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 Sx~&1=@64&QCku_;V*U>RI87@6 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/Button_Code.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/Button_Code.PNG.meta new file mode 100644 index 0000000..80a655c --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/Button_Code.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 76b0b7c29f8441540a1cf986b45f6a7c +timeCreated: 1508669478 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/Button_Inspector.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/Button_Inspector.PNG new file mode 100644 index 0000000000000000000000000000000000000000..08ee97979d055baaf8d9d8584324774af9f9c9dd GIT binary patch literal 6926 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�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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/Dropdown_Code.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/Dropdown_Code.PNG.meta new file mode 100644 index 0000000..39c74fc --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/Dropdown_Code.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: a8c6bf35d7527a44e93ce41d925b07f0 +timeCreated: 1508767592 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/Dropdown_Inspector.gif b/Assets/Plugins/NaughtyAttributes/Documentation/Dropdown_Inspector.gif new file mode 100644 index 0000000000000000000000000000000000000000..ffa52526ef071bb9c444edcfe2ce57d7f8e46576 GIT binary patch literal 128541 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

    -@W1f{{#LbM|6a8g8iUE0C5n!` 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 E00!&NQ2+n{ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/Dropdown_Inspector.gif.meta b/Assets/Plugins/NaughtyAttributes/Documentation/Dropdown_Inspector.gif.meta new file mode 100644 index 0000000..9986230 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/Dropdown_Inspector.gif.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: c1db80a2110426d4f90e8c42467ca2c6 +timeCreated: 1508767592 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/EnableIf_Code.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/EnableIf_Code.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b253129683178301f54a2b194dfdaa822b674241 GIT binary patch literal 12296 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 AfB*mh literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/EnableIf_Code.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/EnableIf_Code.PNG.meta new file mode 100644 index 0000000..37e31d6 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/EnableIf_Code.PNG.meta @@ -0,0 +1,84 @@ +fileFormatVersion: 2 +guid: 020173797840d4f49905844cc0a64fcd +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/EnableIf_Inspector.gif b/Assets/Plugins/NaughtyAttributes/Documentation/EnableIf_Inspector.gif new file mode 100644 index 0000000000000000000000000000000000000000..3855dec5b63dc2c75463ec99b15dffdfc246ae3f GIT binary patch literal 16163 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 NUba_EFS$ZG{~s7qiAw+g literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/EnableIf_Inspector.gif.meta b/Assets/Plugins/NaughtyAttributes/Documentation/EnableIf_Inspector.gif.meta new file mode 100644 index 0000000..1ad5e46 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/EnableIf_Inspector.gif.meta @@ -0,0 +1,84 @@ +fileFormatVersion: 2 +guid: 55dace8f2296cf94ab88a1838ed4d7fe +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/InfoBox_Code.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/InfoBox_Code.PNG new file mode 100644 index 0000000000000000000000000000000000000000..83103bdefc7d72d55fe26db0679b555654bcfcdf GIT binary patch literal 13227 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 ZbngJ?)1S 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⪻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 IYCZ}1e+W~|n*aa+ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/InfoBox_Inspector.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/InfoBox_Inspector.PNG.meta new file mode 100644 index 0000000..44fd1b8 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/InfoBox_Inspector.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: edcea8333d68ae945ad1c760ae2d1562 +timeCreated: 1508669478 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/MinMaxSlider_Code.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/MinMaxSlider_Code.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f514c2e517236864bdafe0e18ed267441a2fc497 GIT binary patch literal 4279 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/MinMaxSlider_Inspector.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/MinMaxSlider_Inspector.PNG.meta new file mode 100644 index 0000000..100a052 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/MinMaxSlider_Inspector.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: ca85e66652051634e815f4f8368f98d9 +timeCreated: 1508669478 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/MinValueMaxValue_Code.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/MinValueMaxValue_Code.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0f3fd4756e74f1ac46271d39bce59c28ecd51a5e GIT binary patch literal 5503 zcmaKwdpwi>`^RrllfybWbeLB8bdYl@Ly;5_iprUhoN}7;X+|ciRCIDkEGd$V3Ugj8 zDauIBhZ#BTz{F-Y+kVsM`~CjD-^cg&`2Dea_r3dZUH7&3eO=e{dcAL7v^JBK+9?G9 zfUNnsGqwOAh7p|?N^TGxwX;neMPFiJwq~aRTnA)UbRpqmY-J1p@6x1KJ=Tk^HzLkC zh5-PWxb_ii4SszM0OaM&&lq2hc4Le*_(NKutqWxMiyt_dAc-x;Fv%M2&tjfGcF3Em z$fzW#J~(PGxomt^=C-u)o?O|z_f#wWY-??wBwRxo=oow;$MomMKb~igwn)<=BO{mD z6y5-)ZczvZgXI8VD+K_~Z3Y90694x}fDP=~>jFHs=j$VvoCqQP5qAzxs$8aectdn^ z+3d+B=SIz6UH&W%HjO&av*_Dz5WzWj7oVjZ!J!oBqq6;T9>ifQTNTY#7PQJTcYSC? zGjeuSZLdqHVFU&KMANJFqAC)&laTiTa8n=H>Ow2@Yz=DSF|jG`H%gV*M007>dJOB>=6lJLrUwN&1buG0cn?85JgF!GJ^5rib#b~3xnDy9;*eEW z8Zxg#bog$@ikjH0Je434pBJ3bZPl$#$Suk-b+FVg#4@lN!Q}!ST2*O+AOCAixPg5i z9#3UY+2(o=Eq+_2v3z>XD-BtZU1d3ltXdRzX%oD)>9QLkboWh$@)Ug7h!684e@tpTPNVxvHApHh zq70hf{2VoxBZ2H$)=>G&4Pjq%Nf1fYwCembZ)AdV(|xR}OwdlslKKa<8Bs0nd1VI~ zvbjdQqj*{~C{6+t9)D_fG6M8YRgQh~Wjl09(~7(t+#9tjAhI&yLRWqzo7LA>fzYD8 zEL< zdT3w~4=6_ExlgMyp3OFSMA{KPWJU#%5AK{w2H|t_HbGC84&Ru`THc9I^-|#Hc%?6X zQ6tR4%LqS~;z|j=&JsgDT&}b2htiVe1&@OJW%MH)%B4QiErH)cUL#7}Chh~6PD3Qf zhZ8srmZJ&O6;O9NALBe$^$^lJdi6c=bBf7{w?_^`Lc5_?PYJ6gQ-jU@x}GG;CL*1& zY`d>FE;7zEY3W*5nwXH4?q?yr}=ZOilJHR z;a1vZ5(e;?>7$fAo1VFwF+!MEYEyG^Q`}5Xx|P4Jnaq3-f;U#{ws(HhtXmDu%~%Vp zi*5e>oghP5-1ta)_fD{QFDXk9nrrPw$mXj$3a{=o&qS?gWk#3R_ijp!Lh)(`R_GnG zQHDAv2XL)ew_&>R4{fDxpMv|7W}*I5V@%MaT~mf_P6TKOGfOLMQ4!=rMriT*OH$pM zjY41k0dJ>-vlDrG;VEdx&&4#KXrT*_!}6adqmZ`@drmCXqy1VYDkO|&`77*S9Ns$0 z#UFR!iV3dFXVr-H_$zP5cRbU}S!LS7muQ(CK}AVJUfh!K2#i zZfb(}XplaN7v4ayz)sBLnmx8VL(oH~`=Qy)5Q8|J?_Hmw9gt5^`!1bGl-~sbQ+krl z!05-~6}Dka;tO?rjAb<|=eJT4`KMv-$0-aMf814S5&vwGu`;9_?kxiXK05t3D%9k_ zEJeS=x|v1Uk-*2}&VNBV%1Yd;4M|mEKoxl%1@T5BIH-pegOdfyr6obYsU!pd{G}iX z;%jkDUGt^}0ie$PGXjCVSZg;uAaa4r61Gv6Y)2520AO&>=fBvbwi&#N+yKyP&o`#-y3|sR<3-b7jHcA9F83ULt25M+W)TQ2l+WmG>vhR*ThCHqqsf+H5 zbBc61IiJ4>Z9~~;FKbUI5(LEp0iNBrOr^aZNts_K))mLQ`!0_WhG0J7QZyUlQMQ^7 zt5&L@C(`_G$FQ$vMAVFX_I7=LrGGCa zr+Hl3!ZjJiKfb+H9ycIuHqX%M*jYtt8n|$!OL&&g{2M^e$=SK50vu2!gK`Ymh!goAw2!g>VC)r4js-v8B6d z9={KNd~4R1(27rcERD(j^T3#?u{&vc?p9mg-#n>dXxiGODc%H`83#y>3N03zXtmu7 zoY61i+en(a@$sELsYx0da~Yp>$t7efn|JFEsB0+M`zo^r3|mrG>q$iJ)s(R@i?)Cqr6E_j#amA;=HRSKn$Y=v8b-VZI{$0%kS%a zuC1=;tYp4nRy%LGIc}>@RC4cRha91i?!sle@ddSb+WkOiu`*<85S1*>J^)#Ad}@&T zIDxbi{C@0LAtfmOT$ns|xZ<7|B^}v(mfYHygP5s|k1aK-%lpA9Vle+VrrzhB@ARpI$~s z5L87GtP^b1ES8McI1nPXJ&f7zab-(1BrQh{%8T_~SXlo(_cm8x6PJq9`HX_z{8@V^ zi?^?*eE#%f{Dm}@;#<7syX6V`6ni0*axvS7=a?)m34$Z3XnSaI)xsj=MuXP7O{$P?I7 zNptOK7T1x`b^R8}XnQbd{wpt67PJi!tV=}|GH{kFNmt04A!1o62T2(j2^dxKI@&-BT-0bwI@L)uE7ESfoMEDOf3MW;o zLdSD4l;OaAJasqT_a)8{p1ljdFwgl#Y_gu`x}eVES5gq1?@=lOg^&>}Aa=mf6*iMJ zEmf<23wMhxy*BmCw&j)j=5DL8wUm zgr0TJu~!V!+2hT-k+!c7i1)}F=P`oetcp2_c}wKXTK2HjS1g-dnO5l*U-i-#17OOoXiW4nuV*Si@uw| zA0vly5L)xu5G^-r0#X6zRu|@sUSlZ zq?@2^nWpGkD$#ubcWtn2XTavwmu?&n))OKj;Z3`awi^~PQyn<@w{st`2E@|%*j^9m zIvG$|0j&L$)=dYwF}i=qd2F1G-CS(tKyP3kf=p*Z!U=G z=uE%y!?z)+WXoEt1W~Myj#D{p3g5k}w%S)1apF26FO6Uy7-Ti97Ly2*PN8G;G{q7%c(C`L^&EY!0oB3NN^nA zkc@8JDruPi5}k+u*j=M1!qRW-5z*&+snT*86wk>1^p>*ORqrqT<|eYm9ZU=U-iBlo zvxT)+VhWo<+>%~OMwG{si(40}&0+n0Cd4Mt{W@DFzksda>a)Z*Y-~r^z^Y$h<(6aJLTeS@C-@1TjP=?a<6jeG`+aKnG4zft!I4_D%2tveK9E57 zDnmGjRLd9tAfiw!>cpn3LS)bLwZEkdVLwzKJO8!_H)JQ;uL!_Lq@aZ%x~S+fC8K)K z^AS<*iFR9**XnJpb{s}Tr+J=YEcL z98U(UOD%@qCsAhyZtoZkUWv5lXiq-nSg(hAZkRHGMNcA_dG+&$8qZ_UxsB4vZ#yP) zK1*~C-K)j=IXlg3!t&sn3gCFcFA!a{ayhDy47Nq?D%)I1X=?C#vN#2>ta#xA##PhC z2Zlra?!*^zX#1$rx&C-zA^&E^_zgPkjm+Q!WPj`cZ@)-EM;omKc$dzk3+Y;LA1qv{+Bqe+; zqH}$_e7JL`%MF?$n8CmKBRj^qZpY|W*!~FeW%6VRnVe&fa#$5C`PT#-IP`*fB>uCD zURF||bc1Sz#-4x${MloiN{5kys6s7$$PeZWTEo@lK67cK@+- zs;CiQx1@xvrM#~LtWt^UJJ`o_aG%f^x_B%S|xHD4w58jPDaeEKDN;eOF_#R@uJF+P26`1 zvY-X0H083L6)QwzH@$uWI)-W}8bf}*A?~fe=Q+gpkIER{0xrehFuiHw>Tv#MgYPxi z&lY$imYIDT0%mbSHfQ;zMQ>_o&fh&h<>X3!X>`y~1v2~r=rTeUZpN6LL_s9H2VIRK z+?LNzZK7xVgG0l|i|_a#yj`eRKV6r6wMysXd(QC2J}|2gGdjZBF@vspqE`tw_baPg zD}P@rZJS&?aqp#1xpRo}ZmFP+JKm?)HM^!t5waWUQN`%PQWy))?Lye0r<1<%8DjLr zCr0U?=iaSH7D<VjD&cv`&p4T z%936aNN;CEWO3K{S8;quFdA-7?T(Wl!M!c z?bZSG3LDCv$od61 H?n(ax15o!a literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/MinValueMaxValue_Code.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/MinValueMaxValue_Code.PNG.meta new file mode 100644 index 0000000..65031fa --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/MinValueMaxValue_Code.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 50afb956ae7768b4b89d7b5ef321367f +timeCreated: 1508669477 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/MinValueMaxValue_Inspector.gif b/Assets/Plugins/NaughtyAttributes/Documentation/MinValueMaxValue_Inspector.gif new file mode 100644 index 0000000000000000000000000000000000000000..185c9ccd0001cca1f534bf76c03a5baf069eb1cf GIT binary patch literal 97220 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ReorderableList_Inspector.gif.meta b/Assets/Plugins/NaughtyAttributes/Documentation/ReorderableList_Inspector.gif.meta new file mode 100644 index 0000000..37579df --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/ReorderableList_Inspector.gif.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: a82acdae22e140148b602d98ff67b7b6 +timeCreated: 1508669478 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/Required_Code.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/Required_Code.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ac086f49c67a1f6ac038283965cba018b0ef482d GIT binary patch literal 6120 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 A2mk;8 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/Required_Code.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/Required_Code.PNG.meta new file mode 100644 index 0000000..ab0153c --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/Required_Code.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: eec3cb64c7158614781457f102d28654 +timeCreated: 1508669478 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/Required_Inspector.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/Required_Inspector.PNG new file mode 100644 index 0000000000000000000000000000000000000000..97e28b83551022c6968392bfc238455d2b66f332 GIT binary patch literal 12482 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%0A67U~Jw=ZlK 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/Required_Inspector.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/Required_Inspector.PNG.meta new file mode 100644 index 0000000..2f3243e --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/Required_Inspector.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: c496c0d39ae55ec4db47a54c72510db1 +timeCreated: 1508669478 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ResizableTextArea_Code.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/ResizableTextArea_Code.PNG new file mode 100644 index 0000000000000000000000000000000000000000..115558ea09829bca79725986a13134bff22ba6d3 GIT binary patch literal 3978 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ResizableTextArea_Code.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/ResizableTextArea_Code.PNG.meta new file mode 100644 index 0000000..14c38fe --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/ResizableTextArea_Code.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 7a7b2846b5f13794db2650ade442c8bb +timeCreated: 1508833884 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ResizableTextArea_Inspector.gif b/Assets/Plugins/NaughtyAttributes/Documentation/ResizableTextArea_Inspector.gif new file mode 100644 index 0000000000000000000000000000000000000000..414efa73cd0bfac0eb9310465d81f1619a6d7b42 GIT binary patch literal 32200 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ResizableTextArea_Inspector.gif.meta b/Assets/Plugins/NaughtyAttributes/Documentation/ResizableTextArea_Inspector.gif.meta new file mode 100644 index 0000000..2913c61 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/ResizableTextArea_Inspector.gif.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 4d411d3022fdb9a4894b786023ff55c3 +timeCreated: 1508833884 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/Section_Code.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/Section_Code.PNG new file mode 100644 index 0000000000000000000000000000000000000000..93d1a9ea0f9b70fa82256858456edd0b6f076247 GIT binary patch literal 6709 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 OVWfXvuTa-1`ab~VPN?kw literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/Section_Code.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/Section_Code.PNG.meta new file mode 100644 index 0000000..6af2cda --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/Section_Code.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: baeaf9f9d9ca90b4d8418fd8179195dd +timeCreated: 1508669478 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/Section_Inspector.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/Section_Inspector.PNG new file mode 100644 index 0000000000000000000000000000000000000000..4fab082e84b85ac5168706d1eb3e4b789bb6f60f GIT binary patch literal 9330 zcmbW7XH-+)*6t}PEi?fsQY0uKD!r3{3P=+|6_F;=q$4%d(3=GT=@1o^UKE7T5h79r zfk5cJh875+m%BOV{KviH9cSEe$Nc~#WUsx~UVF}G{?;=StE;0%OU*$|LPA2Tp{}A& zLPFXHyw0J#0{j-ReRLi8L+Yuo_K>8kmva?(bIJaJ_5%`<@9{JzR+oYIRPO2~o+Ko6 z=!+lHcDDi>5|Wz~8Y&MA;T9W{eqM$~O(O2xgc}5qv^L+LZ!g`c-d-Ymq!Km$JjY|P zOFuz0CS(Le>P#6y$yjB2<$Jg|s63hcWDzR6x05$|y+Y@c7uC`#IdLbbQU1 zFj*F~S(a^JpwE(s!B#02_l^d9Y{|g|I&FD+=#;Wr2I>u$nhH=+QK_h?EKrCWL@r0t zur8eLPYZy-V5RrzAQ%{&b0gv|M8WXn=B1^E;pWxL6n=vv6pnVB1A=-FDk4;HK2+ z2OAcPq}Pap*C*Q|=kL$Yr_U1+r)!qtFXkR%i3`ii-M!fgM$ea)mNfg2P?pEJAn%vf zBCG>=75YKY-=vQx8gynSn!Uk?f8t4xhT=&xsslb!>!OI5OI40T`V+X7y=P52wjv zpGF^pqY~)ts#I?MO}|sj`QCjk@*ntCqoFA?MZ?Y7Wo|jI72WimE|3IbcC}oQVI1X_ zT2LUkI#isBDK$0DkZ}{%N0(g`LXyI5i{AgR7MOWJt{y(t))m734d&36|Yx35!H%zN`A! zcK6PP<+;{qiV;}EMdU;BIL$(5gdq!({(utpCIa{Ev5wA@T?j6W8g>`oN+SZllo#a@ zFv7BkI5@g~xC5K+=(Cg)A|GDt=p111zTVon-Ck}K;CZOqLP|-|f|~L#eq1ZZqvJ~P zFsb?IK7@!daOCn_>PbLH(|4Dd*BipxN?mSJE7h>-8v-g3q=s#f^_L4dcGEKBnTyXNI6mrcGXNgl+>D~HLts&>W9jc9rv;kVaiQa+xp+gDh()8#io#wDOBIKth9Eisw*cO`FZ8X0+7r5#u% z@4LB5>aQOUB-XG6#vhuIcHjn_6JF26iMi58JBjHc2{;YD=fsQTN)qj`&(6 zYN2=9TrO7}FBl!p!IVDi$_GH4CpQEuAb9lL035Rlt2nFA1xz&@o2eG5?`Lt6v zlLLl1X#(Jzqm^p%-ncJ$JpL=Z#7AiqH)$y}cXjom$t#508%C#)@v*Ubgg)qg76!V^2WGqcID_Z&h;aRNq{xf$ol0iJ}(Wh1a z9`e0cgL&HA1k-9~y+POGlc|8MLT-*c3J}{2hN2RR+P~EJ;DgJ^w+BtpwOrDnByLgBGikI+1eRMH$+8mw6VV<3L-RWvg* za|gb?n{FJ;u+68$$A_lU^s>9(mrLgYB-*UDiccU`lXM_wn#j&t?U4aD&uE!ri zkadglyOiI&Cp&Ufgx!t2%cu6vE6j$78{&3(ydswS7KO(=2<7H_&e8H|O^iORdY@5A zsK>7!8Vs@G*vc*|@7N=0lsC^?wJ^KUJx*}_rugIgw8ZXRvAf|@4cw}th?dmMMGEgvHd{{4Onr$O>lzWCQ*;)o5yf z$+Z$Fn1JO>sclxc3+sg$p})D##%|qhvW6+0{$NUx##lx4-PO|4BJd!e%K2ZVRA|Vc zpk%^rqq01wJCinJ>oE+QLn6&7igyOSj!u+%^c6t|+jWlB2aEP2yUl+pWe@9gY+QI4i_q-1Oafo|2)@;Vl@%m3B# zD#ltx1z{+jyIEaZZ`gF7CO%dkxp!pfD!?>X+dN3iG`EdkPBU zx%c4XW#+EE^%ucG%S!t>3kn0nHtOjU95fUbSkY(7SBJS$MvKL5`ZG?ya#c5Xofz+R z3tlx^w=Cr6}ms&yb}qjnEjU3c$WMIF&{&)znjd647uax{dYw? zh(Q|$O9gba*rAeJxhAds`cbdK)`vnY;$aA{W(m4%UuL?(R!hq5WBD&t-nxwn+inQX z`QVuE2U2Ih^9J%`XC!amk=6$Zk*f)&2G2o#OmNjA%(Y z{#U$@*`B|r;8ePf9vYGuGnz-U$-w6GfmR2B4*}B*NdT5c7?#J55_gpM@Qxwl-*@9fw zx3lWIkKKi}v1>GNyfP_+t1B!1l0x};b8c?#ko3QTiGG<02Kn4;WUbDDzM!!Eu_@&K z9x}tOH>)t^dwF$R?c)fh>emRutNGu4C(WPpV?Lqn$t=x8meHIIBnw<822XlNcC_C!+eOkUCe2%*&W^1n~-YZ-{}N@5kcQ>dS7s^ z=5pHbV#qv+e>S`=@aOC*eJdV)N5(K@DcDQE7e%upRo=xKvxle94i_lC}a!Df-KdCes57YD%S0=fOEYF5b6 zHBC`J$U~<@>B?3PS3C=iG_)yUHRir-LVd^ixY>7<160TXddbK1_2=qc?%i_1$5J34IuVx`16HZ(f=Um{)JX zf8lUCJtC^8l(k34y@2b#jl6C136FFvbaJ1!NnS2Z6C}f&4Ox=MNQ+=d^0KM_Khf4vQ8RkcoV1;@Nu~VIYL>YrIr< zkM!pyr_&Z!Q-sL2tn|c9vUsLn;Y<@_!^|h!51xt6#@2TN+5uanwh-GI)}a9wX4|rc z;zm>(o+7VC&rxP)JCBzbj~?3TrlwWd^|p$Y^1g zZf*XJGTpJ_E>GKM`2;+JUFo37%a=dL)o;&Wx56&dWMxv{AQ3Z*BFA6~4YI`>IrFw3 zEAPGp7ISTa{mLT$BvQQ+EwQ|yQR}r>w0^JV#yBiH^|b9)qVH@5E;88TG>Vy-r8uB3 z!%~qm=9L9=vkLKjS&;i9F4yhozUBI@rnL{_8$EvO(?v$bn0->j&$nCgqjV_r39%ee z+DbpoV($8o{mhPIU;4MCg;+T@JoC;CSz^O=GsA=rAHM97mmdh@r zTig)Grd6&SBU2y=A$LwU9Rh$mYz7XB;C@})QrPPS!dT|e{NpXbsgBaEq<8; zc|f-|gAtAQsO({`z^jxq@pyo+b5^5ELE5D8SWRthBi=ZXlqUK+Ve~Tg?WCG0DKx|2 z!BG4np0j=WWJ#uMBgWZv)?~L|)o=dg_pDmDwlKm&S-j5-Anam&T@UTv;DgUj@HrNG zt#o4JA|GnGJr_oC&Y+6meSpAGBqKfRnN2h)yLCie$dntEhKXCRE+jwNeHAVs#M-6aBhoP4&-V8;RRf*!!bK~*g~ zD8mLob-ED(bk0ZEALeQ{cdjGlJOs~68oW!?73)r7Ih6?CojdNnFCFDkx7)rf7tkBf z$K+ndu-`7(&0x0TFl%(#Vup*PHC}7>AuZ?e=pWGS^ z&Uw0rJkzBXHcOERZe{xT0A!S5djNV-bM148l~yI4i&#UfJV-3VTXsJ>fqi$tomgyQ zuQN_qIh{LxK5Si2$zk@zK4rc>^i(-yF6jPK>jNf=%agyk_1pIKFP1ZadvGPv`Z}B9 z@0FyoJ6qDbh1}~3{v!ux^;MP2lT&dMmhrf`eUTaHI>+#Hmm+=o%)V;Y#`g$M)f(^mf@GeEQ>M z0yQ*(tVyD-cPdXV{?pL-pe?1nGX*-e?y-XVObE3jW$10j7TJoC4Li88z2@hoi z^~1^1vWgL_M}{n-5c96s6EQSXqj;9^2+9rN(05aLD!?ti!FWuWbk~sK`N~&6h4yQ7 zD+#!%=YG-bj7=-aRx2Z=O%6n|9-$r)Ay{((a+s!o_}NyxCF{n zJpj2#^)N~RD7P|J^f2>lJUk*UV?Pp}ls?n&@TgGBrdkxx$$C%4#IHVH?ef(M9W{V* zvmC8<$*k-pr=aWj^dQ{Od~2%ltIx(*Z$;?ca+DO}EO2$Ksu-vZYRS#SVbg(fOQkB1 z7Y@^D5)~7pUik&4&rRci~?YRM1|R?ihD#F3k(rU75wS|N2!>v5XAR zdB>&j#E$DM1-qdw=!PxJ&X5jIiHYfW;xHS#3SeBSgLNOde}0|WV59QOu^)v(%I+^L zP*h%i<|zpYpZ7FUeOLZINcP>FFnM8Zee2%6KZSf?@PLpMggia^+P!B5;-Kb?#b-(U z+J>i{NdiL+jdY0a@r^3Lujnq&%l#5`yjR3+<%r@1gX=bCM=yZA*?a9tKB!Ug!>yY) z3ql?Pkbic1tUv^o!jO2!xXjRdPyY0t8wzDLa*fFL+q+l*oYQfw0*?u`p-5^z{PjzP zMZac+0;>7pbNj(BCRhQD4-Q){5_Ghi0Njs4_xePw0pOH;6~?hc;NPBEHu@8@{DCd;-c@Y-*j@OX@HW)V!{eFAB*lJ?3 z-nYIQxMAul$4LTkKpoe=;_AT*_*F*6%dxW>z-ewq2@E|=5`gi8so4n!tpI7!$Q&ub z@t^ASt}yEP&B}(&$NB|YT`(7YfR)wfz?1EE6_v%PdG)W+`QzDvF+$;Vech=dOpM8< zPtgX`JG~3T!n$WE^gaqKlRQPi>-f8Zg70~iqdK^JCwTk&`$12@)aoPX!P15XG80SD zaU1v}ZUqQW@PU>0KyyKXI=^Yesc+&0dCL>f7qn3c8uA+yJ}V5tJl6rYAxCKt`l&MxKV{InJm z(?Asfue_0bkKchd#NJdpkBZlxpB;a-??e9k*lj7Ej-vv*?`Woc3J*`uAxTAF zw%42c7C2|v%!Xvv^MX&+d26{&HE5_X zOL8h*{0nad)6(Jt7l~eIhTi3WWa$e>cQ7@CQBO6ko%JH5WYt0ie%3?Tkuie0vhVO& z0;-_EkypuC<4LozF=Q;?jmO7)xpO)`p$9j%ssYcOWftHbzp!13+LRxqAi;DVJr zZ4Pb(aY%MtjAVtkTmqvjkG`RqWWw4t&U13W>5>kKZ+MiZ=4l?PEby1i#%8)~jidUi z=-zS4f%hkUKjM-BB{PzComjzeDFvGWy7ASvJ7u6Tz}KYSr&Or@=n9DK##;_4{qp1e zE#H&}F|(a)@ENHTEgc;n9R8cj#6kUqNam`=1NSywr{^l3`njl`4h9JWDXm|`Ksv#D0my%baxIN=vhU5hy}G)}O$1CMLv#%sIS1IIhU&OFU_;tjVp54ArA0SW zntY(YF8w%?t(65Dm6pb4&mO^Aot~V0tJt{w$%Fj0M{hZ9#Y6Yfp7HFVE&q-Zn}+}V zEm2&@|3ZJ;mTQ-^I23gTQ>#2hGtqI%-gtfOUZNULkl|+Cny^WoSD`_)=VwZ8S_*M< zY=fU?XJ_ZDC8?~;R#DNsZAZneLD2Vx21xuNpqlD-c6kzR!?oYnf=b7y>k4r0G<}JQ zSEc^oZ|2;OghI60|B`?!7Y}r z1Fv?Qwg~DKeLHIkn#ak5!EUV_NI-RyrJRNf!moz8?yZmFAYaSclWS_!$(29L`o?~K zW**Hu3G{r5rUar~+TXC}c16>132kq03sH(W7e{-x82_}Y2i$T!bfc{0st7)?v>SO* zI-JLTbmk(9_!S`Yb8{Gnkh!@R#5kImp8q7kGSHX#V%Z$5-y9qyt33&x)E26Yt6VSJGP1!g7j!)4{+wJI~?z zDpv5TdV&`TxPt$cG&6~0fT=9dzvBVH;sg)A)k7J9WP1898le6k5)NeI`~Rx#{|_G& z{lJ$P6{pNSQBzSd%mx}~-m+us{+{V^l*FTpZWhZ9-m5rVH`=@a3mm~*Fn$f0o}Mo5 zh!J#{YN!>r>tXBc>e_jl=Q3V>v36fgQLa0<;_@PoMq#F|?Qa9Yr$-t9N+#=M%lnnY z13<(4kQ*soZ_&pmE7t6>sHp+;N(L!)&C3^;my2~(f-O_eWE37U3Fru>J)$?n+S}L^glr6aeJ$xaQPZ=t2l2Y7_1^!x*5@KGF6J5l zM?(DcFGThSJJNT`FJH*C0sft1t|}F^Y<0Z1A>>Tid3I1>wFD=s@tlC~ma#AG zT#S~2Ld~V!rp)XPQ|_4-9Rf8#-j*ZEMK9XQto~h0OhJyTDI7-=#gG^xDkZ}9tlBx9 zx?`-$se7g+y!-BjXVuC`)XtF9vt=tAVr3%&oeg~hgX|0P`h2zG0_Ea>J@-Yw@*f%f zFLYP2s{MNQ5z`*A#M;JyKayzy7>i|)-?u~#^{!WyDBL_XsD@e zI^Oeov~&5Y|D&yYc&|GmB8WA@lRo@SVEY%%6Z|xLS42oCQ6q`J^I&@(+H^xj#nn{{ zp0SwL+ufZ682Fk1vlyD_>nHk0u(@t30*RELts&w@{Us2v@Wr41ByqqLB=}D@BbwDr zAr+wG{%RLfZ$AGI>Epy|+9Ga1t(s+!T(4Kx*PT}}g-QRaxd1QR^IBhxh`1ydc<{|2 zidPcyWPPPSSKRtHD8AZ%?CsP$yOgz6KzKVp+%{MMCRWtW$iy^{aX36Y#3k65KCANR z>habk+D6+0@{9Rz1wH!zEa!9|Nh(x)+f$i zL*BY|%P|9hsL-Os*;p${Q2G?&{B)qw9+p308FIM-YB?LrTR&Q9-#yhBa7#u8doc{C zu{!iK(;R~b6IN`-SVl%agIj0`MMaCt<3M{B+Dc1bH}%6INzK&Y#`tx4uYzYvy>3<` zdrilio;WAQ2xrZSSA7gyUT9lhR~7O zSn(|I&o+l}3i>C6CDw?T4(+Gtq=KUFz@DQ3azOxq&@fY9Xp%g{ZL;o`jN8;rFg3?N zGL`@JE3lVfyV#)=g#DvQ`ftB}JktS&Ep10$*mS*mGgNq2Sd;*mn)w|cWLbleoX5xP z*7BYW9Gr7sb$zIMYV*;8mS4)}B2@r0r(FPE6#|O2=`1aeqS@p?8Bi5*)d8`wv1KlI zGRtqMWNW96yM(jEdFvjI&YI}z-cXJL>7l~kynAQ&?W*2=psD~-nON(&Ty(v3K9*$- zTb}wL{7P+gsdLlA9#bxW5dhNrzc50kj0K8I&O-${bg6LwXu);?gqZy);fwd$uw#wS zQcpV0YS8YqBY|&7R2Z3G<2otNl2`|*;45*b;k(}V(fIOUuaR$7Xv6zpvwrKC*w|Mo z4{lgxnwXeW_!Avj%<5c$F6qvQb$lVwN+~chmEGM=!E+27{1V8P3O|CK!%$JOfn8a+ z&_^yLoK0GBIqmlyo+xdVP)a9wE7172>CaK!S;>v>GWVVQ%6weIsO&z`QI60hV#EOL?%kUasnIt ze8mkQgbLp+3*z~6;bo_K=HP!b#p!h`4m9dNNF5;s0d)S3({PC%U}1pBE-zDfL(6`( zsdBK{waF=ihH&zrRbjIlU816xvjR}ij1+-y7Q_M+4$z%GG>gVZG@UTAnI-3m5xvtJ zc|Fp*#x3+1ELNZ;goSlzn^{>|i;d0h+XO#| ziJ1Uqk*}S}5BS(gN5r*aD+7@23qS&L1>(dbv{Qx64W9zj_&#TL8wd21@6uemtGh@! z0BkOcX%Kivi}yCsNV(>J5Q7&$3^!7$DO`_-<#Fg|hjp39S+f1swLqfh>!j)}UNF9% zo*r&a+DtdfkMJMX)i4|y0rbj{`yzRPxW8Y>l#%#aQ_m6uY_xFAL9=|_6XM4OK=bXAWP1<5SGI?BOJ54xXFnHdXUeboR|)el)_R@l7tujzw8wQ1Z`H+E*7E6~^u0D-`r zhaXE%!0THekf5H)75zWLoYxE5?m|pNkekq;+gCYc9|$0~&iw2W63_Nfo&T_Oq?0{K zDkx8mub-FQdkm1UZ8qcXkx9+a9v@6Epd&?IZ zpN6iFzqxgy5a7-*~03rP?BTrt2_27iaLc(7j1kd_uk}oLeW%fLrjxc2(T1J z_LRjHd(=epUb)K#^?xM1Rs_4$zVGWi6Qh*&-1eklvY1QM*m73jh}jDITzxc@Q{1Au z%{ZW^h`5OPs@DQl;_Q_J2CF#lk3jCnp4LE?CSmBFP8qO$0&jHrRuMih+Q(dbDAL0` z_dZ1Z2+b1zW1=3w*NFR$K^`=tHD65+C;k>`NPU|S)1qck5++1`MP_H;KHX3W1p7FL z_=vO|Tva*Ch=pCE$Pv!_%!S1;8p6{1k5WxnorSs~A8$hoGty%j z8|cqMcmRL@jZGYF`Z?_Syml46k>OaVM)P4@*aHH<*D2m+^nKut*)IKg$RBjw68Z{p zysVeFS9uR{yq6+K=h%pFFp6M!EY)#s;VVkpYtFJt~8OP zh}y-1__>YH50!Ve^&f`mw)u-6T(Mm5lo8h@Ne1(}&}M^|TRqteodx18jU3y1bbj=z zry+(CcUuJwB4>~I(cH(SB8n#k`x-S-UHWoVouBJzgweiD0*O}e9WjN7VDK(9Wl#bX zMz9^b9>kfg=x z^)M=(vMH>xVb#S*FEET!@45P@`Q%X7;jhSS^Zqtxo~+lNR`vGd618EEy@bN+^?GXa z^S%T@-^b<0N~eHMR0C2K0h{Wa&{^9>wql++a(6+Spw+744w-wB98+!OK|@~Y=zzFN zxDOgLv*+@bYDLSUDwd!JcIbJ}=mFDHJ?mw#_j`UzRTk@o>V(BPoi>Ej)36y%IzUAo z^KIX8KC7qaN3#-EVcfyiS4xlU%bZ2{IRVDi>Xn{gdvZmM0o|H1EOX9OMPQ4gsOM8x z(k-X~kD_SAld8vVlT;cIA}#IUZ7ys8 z*qlce3n`&K;KFaMOuuPvJSP9sW|d?lxRAD?*F9?U;?0*iE`p(t?j+~(PXlM7!Dv!A zd}r&cxVbl&(EV8K3qRDQv!;w$Rc^7^ekMP>!_Dk*X%zFoJ0R%dZ{VRS=}O!?_s z!ob5t9&|Olx($}!8PFzs7MgFkERg#STr$$T*(Ta50ffnECl};Co0ldsO!zGSJEcT1 zCFGn+zdc?l$gbQim~Mstp~ss-zl*VzSA13mMbe@skNSoxM(@)W>9a&$Z_?I#!mX+D z!VCU%8DY7eh4*T*1o`)h8w*R$<$;P(&l}prw+ULR+`CCxKqai1>Jf_?=0J7#=%$Mcf=uHJ&(-#wwzBideZc=^qdLiZbA~k=o}wEqPrtc! z=8#p~SO(72TXxM&=u{ z0;3O_BXU;-2@6L(ABGVFuR<+y(K6x96?5NyOrA7;bOG^L+DFvA;|`JI*7V$?b#`2n zU2dGh#emMsF7de=*(26TC7Kc^srnXCv5AzbS3Zd-+pshzk%U{& z@yeSsjaWBzl$H_3AW%yVFCcdRn%cLXEaA2;2Yr6t*hh7lu&#IPT=>AjF)On>;B{l~ zXAeXy8k)H9AS5duBr4D+Da6!3hG{9{I00P|bx?;JNXw6{<2! zdbIZW;sawwggSBWMOZRCD5{liO8oyzO~Fp!)^K z^WgjO!znPEc@U_E7pn?rwW@?-At2D+sXb;Y!OEm#EDx3i1X59A&gOG=FGNe1735l& zgM(;=@q%0tIYUf4SC@`|S$nA?#Sv7iw!_)sByqEAEB(=?eVu1wC6>{Ki$7MsfzD&p zk#nX9-&B8udNq0%)vT53E*mg%Der9k>^oRQRkwH|D!>`hs%G)E9yl?f9578i#aV=v zBtiP{gNgmSqB7rlyfu-B(3|ANFWHNX?1e>bkE8ro5c%B%3Sy!@h{D0d>LoR#C-`PY z-cX<&waEi~Gr!;*s!btb2UY0~-qoFSQR0kM;nV=aJj~auO{|{8X~m~k$T%IOE1L>U zAFNK8Nu2UH^T9lfSSF)qziIL)ysWv|W)z%WEnBZ&ub7dQ9Vg$}kE*O~Adf_fRp}KR z-$$FsN%@!R0)rUwNrp}~>*buzN#J&OKbL7E>I*l54=#JQip~uq}Tp*-gH_+<99`i>yZe+DX%%k=JI7 zP2<-YD$#ktL1M`li+!uFR(gSlXtKsE{X*B#rUDx_{FK;lqYZ=#nmE(VGGH}2ob0j& z`bEE;S!R=cd5sOj<(MaX)P*?n>=S4$;p?VL{eockTj|g3I)=*T^HtObW5@97NPAid zc)aPHy~}7{==PsdvTz>gm~ma{)}VwDx{4KU-S{2z)gY3eYH zeEuQyBEkIshn#!$gkfMy`?@P_aQdKDfHIKtzGePyKM3v$=KrP07Fe*wC)X#&4W9{X zAPF7Ol#eyA=9%6pryNxojzBr4S)K|q=k`Fnh&JW6=o%Wv!`vDL|A8|Jlt^Ggk!D0SwePv3NPDG|7a$PKykX9J;t6BIPS>?qQ=ucbv_uRS=1Pxt?Wv)qR;ERiE13e3M z8A+kx^Eq(Hvo2Yb5%S=zo8*Qq_qIGfkH|-qqURC!ZTh1fAqDqhM!Gkv`sc#3G+)5F zlzR)_Yp;$Nu3x|Q(odX&H4-a{(?8ZCxGFI`k1fu3vCM;I%xy$;1b&jR$i!u49ncb7 zk2()Vrf;(8CN#=hz}g*jR3_*9k={icrGvG26U7d_WYv0XF8Kfy|W^1WT{0iIw$JC(mf6sDK-M5D8? zXL3xEVP*lRfk30dM)@N^>_Tl65V%Sa@B&-Kbg%(oyBmKv<|PPhOSC7#q@_q?oSV9o zP`Q)QN|&=T^43pXG|ZJPP)OlBWX=;JzNw2$nPmawF0j7!1iSIVmGjgekM00~F$tvM z2ChA0GNF^EypSgCJU@UtGtD~o5VoJ~b>xlR^V=lI?+dJJEJ@Q(HjE$X9F$v1eeXM5 zn#ULCa!g5AojE+;s5AzJJQ`W2h7W0EBl{fBjgo zJLT3=LGAXIzxq_ZypJoF!YCw>cfA(YLi>uMeV0ir8R-ew;$02j3m?zwMqI?Zc8}+LoWwjZ9>AQ(TW-G7`N<5n zHyD$fW)2-8l9ee~5Bfp1*Ut3g3c-2jd{LuJ)l|jC>anXj*`0N;nw(Biz&-2t#0QWr z9nsyN^rXTt>Z))CzI4-2a#dRU{8ZSe(bocXzk7+)s$oDL!7}SB&a{I11m# zd#1d_6@DiM(w2QcFs>O02Z`?H#5vQ)=;GPx#@|lN+?W2Y`1Pd}>9|THB|dZd(&3mW z9pufm{F+-B)3z;6;q*tGAp(98w#Cho^X>#3T3A(Ci$9Xu3wPSM5>|D zE{8#YvW=6_?e%vi4jMz%7FgWDzz)Kc|WZKz-Lc-T0VpM*gk#@K}^CR+0 zEKDJfb?S*fztoI#<-MTf%os^G-kk@shQ`O9(?Zo$P8mEu)*v`TFxm~AYLs~_Gv{Zr zy0(m~l`>ge&5D*_M?0f2&<(WoQVWbH3yQh0%gE-hEj{0UP#&nJ5@5LR<^>*^w8?XG z17q-kxMG=8t%ndKa)ywL9b7&F9ruom;<-MKQb{kBK^NV3DT01v!ytLCx&RBS2K;lO+AP56FrS2`n!|x^+`4BqXlDvnChNZ4W4on43|;y6oLs%+fQG_4{9Xn zD%Eh2aZ9paB?Ur4*rZW%@on#6f};?(0$rH|Kl!R-H0x`*WDGQalo;o+A3kH?^zMZTarsd~|xub>Ut zi@mMYcw`~EDN1=DL#;UfUX)}nwC$^l(||E`^$uBn@c>#W)1JR$Gt6l~kze0>KDc6M z0cKDVzQ)`*UL%$bzcLNcc8&?>0|I+&)JhcC_k*-djbG+*%P!6B^N?V$_PJtQad7epw6=3%aSwl87E`Xu+$S0eIZ8AR?o zsz~c8C#aD5BV{S~Jfqa9g2DJp{f?+7oM(<3i0vsl9(=4z$CT!Oo>*M&)~oLry{@Fz zy%xW+Ni^>46&|tBZd>B$*u7f2b7cB7?!-e)Seu$oz~^YN&!gh5t_9QDG(y_#LQWud zSs@rNQ9W+gWdlV0ksyz^?1$QpKwd=qVi)HrOB1&4L)<;i4je|GZkkB}Tkca?GPsV+ zoD7-Fr`EIJmv}zzCTlMVRpji!`l7X{^mW`BvBy27RLA5tKFX!OUM@pZQ^ zUf|MIHrtf$JUA+OetvqfM){H}xZAUcDWTTf^L)rqsY{uC3VW!N@}$WG zcs>9rsr%Zvvux}CAOseB+-J=04f z*Rf~vYC*}~WYOW8>sL$-`tA*O)`5Vd=&}z&u9DoU%rGBg`xW>KzJ~%wgXQlBVBaao zf%x{;su?IY+Oshyj{Yu&Y0ZguxS0s%VP5j1kNmB0@T#2sIh>#|2WH`_mUec)1s2en zz~MFie+#8wn#xO+Gj)L3or{J)7=q#i)iAJ4m24nTBxV9HF*FPUeV{X+E0|f`zwhv)B$SjIAl;yJN-H&B0@99f zgusXa8}+-<&+~krKjFtqUcR>by07b;>-75^!Zp;NQByKgfD;iH<;PDy5K4Ywu?LS;wYIPj?Edz`Rmp;3z~VX`UH1KpIybJ; zGd`YXe0=R1z1-vYCmM3b8q*0+x=g0$ud7+?sm6N#O7HJK9P~b|+fRFh^IX$E@F*(s zr=C$8rv5(eE*(~cL>2Kh7OzgBwMTXJ2T)R}f`WqgZ{I!#kjMNbxiAcuEM&9%vn>et zJOmn44dw!YUems$LZ_v%rU=_|`F?<&7L$U>rGGVbzqnAL=Eg)PjTY?&v1 zWT~UAt)Qu?DaoF=dcP(V7vp~%ezINLiZSyiQ5@suPE}|z87IWK2L6`A0Ckh2w6PN2 z?BBm%PF6c4)v*HfhZ=ihnmzE-{zG4abA|7DQB$XE}|nh&@5a9;w*s;mc?r5^5Y%&4qSR%5mvLKg(fEYs0r_(g_10oh_1 zVn8q2SEbtQIG0bhwUlaTbWL>S91l2Oq;9pS*h7oy!gznO5CNU1ov&`;2+Fi5UIc<&)Dn+>AIMXodh`iNNl7)X+FwOGh$&>H7DvZeAl|9Ro4&}M2 z&MnD#Y7TWqAFH>2NzF8Si_Lgo)I5#};}}3##u(3yX{F8PefAkIT>5UG*-0$Qk7UOz z_~MP7sTq;Pq(TsLo-HYdriwbc6p?+IpER3$=B@4v-R#L33iVC0BcP~u$Ni6-O|XNX zAgji{5#i~cSCquE{gj7+Gi5nj%p|!6Xw|C21PpNzf z9cIh#iH*z2kvv6X@;a;S%|`?KNZ*B{S6H&E92fLU46vdz;go)f3l-t%UsCry7Qennrq4Eer{?V>T}4Sdj6FCGtjSeLS~XLSgr}tB z6L1>1l_LqGK2X~4hE$HsYHyirF$#1}6B};1nB!E*kOevtOU<<`b8;dR-?V*;)8QPm zMCt36!;MF)v;4D;Ok;YuGzs_J1?~lN5fgh~ZHq4W~7@gV|bKq z3=^O-*U;cXku)|Ey)&mZohVd=?H@1hay^Tmc=mCG$iDKDk{rKd(#qz! z)^avUkIeRV`SM@-R!{Avv$-;SwD^sh5S4b4t?W?XhY{`QQe3WIZc1|4enm)~JL=ZW zGv$|-MzJH8Z#Vo(aZtsS5_0yT2~35=y0EaGdXbX6b6@00qou9+tYGZ}W9zXz?f9IK zrQhueRb`|*zQhihYCW8}UWJg?Uh`WBKfVh`2ss3`3?;c@a*kS5&gG^=rXb4N~%7tU=JqDyiafDNf-cxAq zrqecly26}n#&gb>ga-st+EVi9O*(uA7iR0a<2fNrN)5<@x? zF+!$2)6>Qngr8rF^n=nJ5@C(Nz)UN%(=Sx!W@ZXSLhD4nVm^KPWV_UxKzi89H9J_| zJ6adqC{s`4PZUtc?PS>d(VU>9yi->3;z?bdoprv4Iy+2E`9^DA$kP%+f?BHR3dXs9 ziJ?{y#MMX$;Ih+PaYbUA4V33x(yYrROQJZkIs8c+k}khkl>3XbnELiLzwhdLEDzmY zWmuhc>)c;Uq(8{cPsrEs=QK->Q5o6my z*AvIPt2?4v<$Y7}0tTZVcE)E{L{I37K|B00{JlA;;%ZUaq0drxxUC50DeoII?(vuA zsCn}b9du1`OZ&2Pfv2BhxB7OS47ed)8B4w|@ju(jDyrrMH?TtLM$Jfg2lg8kF7ZMb z+o=fqt;o7G|2`)DPZ^Wy{9}zS{C)(f>I_|F$9c--!bNJ2<7G$$uT*9Rnd2({#WeC@ z-PwQb)pM<^-nB0?QDbf*Wexa}C9zpVwsaZn=a`#W&&0{`;R?!oW4Q5ZeL|bbH!a4G z?MqEpoH&)2c={1+qvw8Te;`Vh!KPRdMNO6EJ*PJ8xSzV1NamC|NxrS`+rsmS;BhQk zPEC7FPgB#ps1MRy25)fvdkrnNZ}PL3E3Lr=Vuef#OR?lW@?nG`6?z@3N>@oJk-(b=A1xg*{k znC10=aHQBvU+g!tN#dO!>r=IBJv!YT5H&*H)}|EEpv|9XfYn8OTIx%Bi=n6K5K3yv z)MjkWq@dd_u+$Q8ltu>7q@AYip_)~3Ek~%mjMH}bHOB4 zv{XLYGA*W2qdv{(qR+=4ut8^bv#4*SbRsfliXVGR38f2|eCRm;rTKB3UP;PeTN`1c zdEYb!>=V*@1230uG(64r4NNDUl-D~-4mo-f;994|h(C}lJDKBe!Uvu(|4}Oz8v}z6 zeq||*IrUS*l9H2_zH4>)``>Ll-&`X>#)=(@#`nVLTKW8cZ8q&hubg&+pU_Co-m5!| z_r9c)43~oZ=L*Xk@Wi8rl#3u3LVAm@`C#_(`liu$%df_(0tnG&Hi@KJ=9J&td7{T% zrrF$_oL!a(H(Cx3XQr?_9JM!Ti&r9J$fj2pTOk{8glKRFez7Ns0Gjb8T_>1)NA>JJNpT6M;>@K5=V z2ZgR4d7UEIyiACFm&zM;D83Xb>(OJren70^ePobTDrWYl?YCABkiu{;?Ha<12;&W9$R z|IU1|OFh;2%}lTqgy_Rwd;Q=e?M8QLxylsFH1n?@-ddmU_1}Nxhy-&{jj@FSBz@QY z(ln?g0s1~s?@N(TW~d@z*vD;eaK3qrH$oClmEV&=mFvy1kwd|i5gPZ4zz|m0z5rz8 zr%i!m!$!ttFd7g@*4@SkaUKK`CvT^NmG<|mf{1vD`gB^!5 z927YV3YNDaS)=pmq0W8qqXSnq=mPK3_syCcEwXR<&x`vUJOpxweq9a_Omy~?jUE-{ z%X$N(jrE%EyzKjIehRN^Yi_8Sg>6llnXFoWwCXqBb*>ltjSv*>KgXj+0h+6NgI}D> z+Df+yrR7lX2&KksexF~Fu6rf-Ro*ue`z_0$v|5tiloTx8cqCzRGOt29>MLK~#+i*w zP%#$TZ%R+L_=Xj?w99q3HZI{s)P=?>jePs|3Du*1-(oBmQXk_NE)d%;Yt4+EHL+!nf{Fzz9z+jTn7N-%`DW#&UGyTP!)@nPHd9I=dB%cSuZBum-}YuKE`XWaCd z!ylO(oqig>hiXyel0J!)ZaxZO&!pFdPnEgi7RUtV(t|mqozkpJEX5kz<2L2HYJC@XrhMFD7PrE%*Dp^5cy-q88ZR7)QYY(Qc;HS%teK@ z9!GP?%)+(L(a3J_Es*KFc#-3fk`fa}Ob(s?81?q8`wUZPK1(496d?jBE-GF*>R~MW zJ;cN_=@}u)A*FJNHXbp`%J6xWOv5HoH0M25x3d-S0sVGcOmj5XK}y`6X>LBI7G3Qy z-jHXs#?<3=92*x$I1cdtGH@7E$v#Kp{`*HI@?fjwV;;+v@X3Ji+|-9KfX?D2`~bbU zIFM`b7b&W$ejg7y-EJx9JrFrSW%}@&nlk!bY6~Q%+J#&AoSIvjw8%V!;`m2=9%xum zH;3-}TOF|vq(9Pk7TFObz6zxt=)pwk_`2M4?ugqrr%$7d+3{EqzB|<(XO!Ob-rW-{ z^I!^LrrjMg4y$>Y%>J>-vhc9N4Zk%oK?LQlGIzWSBO1w|d(f_Ff>sd*v|p4d(RcIF z!y_ioRu1Y_Jg{+nRSO4RU|If=tj|dWdy7f}5F)?KgLLOfKtf$&?|)@#E{q|&T}|1| zfWM-y8~)(eb5q+bhyB3B0U zYE0HD+j>(ZMk*2$e|Tz;)gXSYv1 za$e{bT$7s?A1vjpb{Z30c$nc(>YO|su`vG2+^+&Ow+KtvBDp*-biFLY9ZCkM79ieF zq_ON4!u`tA9V|p<*boQ!>fOC^aqg2^h} zXwf{A$jn5&-_r8={66yD(f*GOAJJ&abqP$m?p_&1;itD>_>{fdjIm4WZtDVrrS*Hu z&86OqkBy~tk3I~eqNvodW_2ov+#;7daxrznGUWq>V`-a{k#kUKmg~a9R@~8&Y}DZ) zvoZR>>dV(D_&J*$QAiMSFs@POpoxs*ab3t)ldA5u)Fm=!}Di^~#ye^&h3fJ)ylkR0RFo#odx^j$M&!^QjW3+zi53i_KV zq_1M(I0n(pQ!S~rx?T1FAukqGWKgV8N}9w`ZOhLWH6b>7dWn8a5Sg50qp&8`jc(l~ zAB}m?62turMlH{}{dP;4-$di_f{-M*HgQxn^7hTq1MK)|nfD+v^YscsVjA_4br~kq-hM(5f zRC?wB)f&(&)veionDARdc506!SDPa}TgV2D!QOpF7>k2byi}ep?PF|mVJz0!pr)ax zffqi|C^5e{#Ci)7vI3$O2<58nJ@9DDQ%kK*{Pq;q>PJ>O4!a*|#KZc0T6xDKx|G}H ztxomD<8|vr{E{A%C!5MrKp;N&*Vkd}<)8fYC=UN4fpi&vb`WduzIQO!YYs#{mW2ZJ z+Wj^Jz@$hR?+*-$Q-f$a4`tfvzC3Hf^cx{j(xm0P zlXYHH-~kh*iIf?AzfG^*PWs6|xKRh(iydS;fjIRvMwk+IW9B_T&V~3U7wq|^8zmnX zW2J-}ZCR|A7)FZVEQN@Udo!y9t198vH@|GH+~4jm18=_qpuGCfpwbrjmZwxI=9Kn} z6Zj59%t=alCe$=fl>a2z39;dg1g{FEpibT!jO$<0!iNb!+}}oUS3aj2=m%%_ry0Xc zw3NGY*WktDW!ap4JNE_3Bd_oD5gNwQE9xsl*#TbC`LW5`9uc$QC-UWJe=p;r{2vUc znC4UZt^uiMjl8tlKsnU=KwK%kqvh%vi4uGH#*G2nZ}ry9>n%OWtrp9(R0qnW5=g>)eP-IqTptBs zSfeAt`c%>xMq)o+mVWXZh8o=OSRcuyIzu=}W`0HQT>V;zhbEpgx#%9T0DY_LrkhSP z4a4Pr1m4x5EHV@K0g*DnYQCd!MYWw>$)afC!45JCnj9nN<^*=X1M_302i*-IaB?m7 z8(8gs;+(s2uSCOf!shPA$G8`ylm@?{CtwH9gm8ll*-gAHUYJ` z(22ESxJkSBKHJADr6E&$Gv#Vap#GaEu4=roZo_*@z0$0O>gsq+1LbcMPlWmX$*dMj z$MWfIvB|Ya@F?;UTH2R1bg;ERIQ+Ja@ip~c7x6^`cqZZJyvq{TQPT-&Essdd+dLBI z^IPo&K#p~uxZTxJ6wn7k&P92PD8gj4b0TDrN=2>JzW)k4kqZ_fidX8 z{0V2ho~*gyb~Yz8hIRj0&fwPFR)rhczM27y7U9SjwtXl6}B#_gA z(RXOh{?S!EeaPYqi~7H@pYGI5ttJoo~F*t0p#+BU2p`Msx;H zMPsXOA{r&N#$X(g(p~!0uk%Btxk9mP1$jhtDD7S0R%RAYwHDbGDk;We6CHL+Vk?`atq#HyzRORzWq&o3bG^(V^6PV_G7{%Kn2w>S>HU zYi91>@bp1UJRZ9(dkBZ2j4_Yb1ZGRm8seycoW8j)B-ApK;p#%Zn2Kak8!NSB1eHjAtv{g}E3 zU!!ErELQg>cG$3eFKBNTcjz z=jMB2Wac6`)h=Y;O-{0$D_>?z_s=w{(pxIlOd>cL>kgX#*k~?aA@Rv*BvtUMf_p;S z-JSOAnu}}H#v8_XYVEyAy&oiiQKg%`m&KN z{88jf=EP62AGIh64fZ&pi`2FKvwnw;4a8rmD{T}UIZQ&<%NPkoiQR)c94CE@SCw{D z7W91D)Te43SH@dULW#Ct94}&k%3cXOOP}1I;!Op7{YRg{2y6u!BE_Gg2R2JUnK)7Bp#)m>4{~C zFBxBAEYI)i(_ghR4qJnHw#zO!jd7|Z4so0wJgZ~{F^A$W;DZDpp1L|(C#%&u2FA)F z6tpWc&jchh)qsvc2fXx=`7Kwmwd!$Gl^DqOrG&)92skLyyz~y_+tc(Zj3VYcWZ&i9kQjM9$-a3{pKmGpD)MLY z#=Ky{ptH~G#QOjfocFO3GQQzG3=7TBW>shE$ZNQro=0SNR$B5+ubI6azwP)<&{Z1P z7kZu@C9tL4dCU9f#D=h+b%b~fTi&2j_S`F^n$P+*I-55;z$(S_%qYhUZ;Vt^)tK4$ z#V;Y_U&DoF#^rXt?nrf#fCYNzsL&LW4H-c`tEJL9HC}HGTDcvk8=@pz=;v#sX+3;& zOK5=`y73Ob$YGp#EX}%FV|qyg1hQ3(3&VAo%(_t(JW?W$EizQ! zxDA$STBrn5pj1pib`f*$GPH>I9{_B{rThM|EUKPeZAgQ_dOHYS&TebHZ~H%g}NH z!y0#Z;afXouY6Hq;kCZ?FMTL!&vOGKrYb!8D8B_?OoOLiW2*tcMq1wqMN*KdGxQY8IIRozpUzmiuF5Adt-`5lAUcaud0odod%IXufNUf#}7wZqv-1bW&L) zFV^g#F&xZ@DkhnSMlitpWu}y;2PJ3d}@BTC-v9m3w~;L zCXw@bXn_Gt)}gnB6bR(PepWDk=&q<&Z~!Y4O6urs)A+BpKNSUvj%gEzwDK%Hz=Xtu z9I-@fg==2s$~9*0vCk3FsrD)SS3l0@y;-vu6?*x>t|h>#{ak60hM#tamNLe7eJXD%g#}_*X zv21ZsECRS6v`|4$u=cHd{m_;7S1JS(q(KvkwS!8VG!H?_Yg!b=#y z-$V!KuB=SV&K%5$LxG~Z3usFJWUUF#C+w$du@wtw$EogI==fpxxeNYTaB$~^=O#Mo zJVE#itPK$LY02S*%;e|urJ}t6@A96IcnmKCMe^$_Uohd2VQG$a&UnBy@wtpYw z5xH))4H3bcs8PEVS}+s@>Y;)m?)9q*094c2L>O66;EH%NE{lqZ(FFA?$-z-*s znbkVa+|U`Oq63VI`}XDF(zs4>GsVUG|KW#8wAaVGWnil2EuqAklm8*GOsSBn3;u~` z9G2frJRoLkohcQKQM-_odm;C86k?055|!gyYntapmetYM+y#FRIr&7~P*VBS{0It+ z29zd&vEL#+nHn}%^gAVEXS{iq{rW6hQ$~)_ukxkn6XqKf4^A!8%>HVG5klJ0%Ogpr zCoU?rkL-HpnWMB?GU|lmJH<~wOKm-T2?A9JKn|ZIXOwK)f4x;{>N_8svQeAi8u#mM zxnagQ>G6j|0o%ucf6TnA1`l!h`I_6-$@w(UV6!&e3~-A+QQL3F-Yg{~cyl{E39vKt z^RA+^S}OaVXvo>3r{Hwlv6Hv7b*fne2yxKD2=R%_RKV;=$Tr?vWdH%4N}8qJ=Xs|r z=Jc`gWH;7sBDN9bqgmW&XdGI8Py}1}L_EDW3g|YjQUtQEqx0cB4zOYEsH@Q`ZhCdA z!9CHQytT-~4qJ@d8m8GfxbBJ>UUH{_CCNzF1Uv?WptJWT*q|RW60b|cq@g!OUVSPa z9BDdV8SS>lff53Lmac`&9^f29Y1o`#ztY)EZ>$0SQ)q%6H8#eT;b~l(rCQ>RqtkD& zsFo}qi+=-mqZFXQWS6r}rk`D$38c4v4CE79P^6*53TGRRZ zf#A;iJmhW7Y`g8>Iy^k4&%*7PZZOb2+b3?(B?bsAOq=$xh=@=uS2B91B#v&uH=PRr zFFZK(57tmucYO@GHv6c*bQbVX%db?#%GqY$-o);~W)VxxE<2y9PRR!0=RvP^EG!{LC-ok)2AnW(4~nmNx6J@Caz zmy(md2+ho_lKRH+#&zG1Cq8y8MMb6CG%R3sv5VJEpUtBror2t5SO}FXM5O z7$SJ;h#G)1pFx$~Qd`&EozM0L8N`KgdH*!r2lBJq3Y`sl%_;XG#PfOj$gui>zBQgv zK>8ZzucLkk*qFhoinz>tGscoe{hwv#U4ph)YI^r&ci$|}*5Lpw`Tle4H}(xup3(Cy z`cj2%^=(9|^rMbAv%8S7qn}Po?{TvXIN-nvN?XJybIT=s!y%M^xI!Rqdi4-KsC`h_ zJ0uWCNF7xnSaz$s6a&%er_z^>xZFIj$01vR+p{pn<)|S={h1mQQ@XWL9Bp~iTFPmZ z-!+uKN>OQt&k-x2H9j}u@h^OK0{EQwlN7)p$(CUjFiM>K%gI46T$iI`kkR&(fKxW%iz#Ve$+aX ze9%*MJc5%Sm=KXkF+sq|od0|1cLyB^lvywLKZ)7h|9}O+0w80PFQ&f+6%lX#fhfF1PIBvIgZe zn#}ecVEBX2293(q&PQtu48wS4HA@%FQQcPE4X=K#Yp2kF)XJX(b8-B0lVVmID)pqR ztII;lxyo@$k5;3wA1K*TH#>Hwi8~%Yf8L&KDvnLmM`eCb>5KQ-rAWz6E~n-%FB$Et z8}#a%-Bl3)st7AuYi;pf9@&Oe8e7ptsG~ zlUBKFLb*;$3kou?-F-TAHwH4V*JH%`Wp*}(;m@(|W&`J7b+1^!;@cwhX{XTMRy>_m z#$jr7*be$QA$H$SncK_Z4A&nY)Hg6tter*ja&mED092u%rbf@qX|BcB1il)Czi^2i zK#+sBbCXQnL`VmJ(eyB`1(3+AdbhLYXd!Sv9y9Rq6-(-rNza% zRpvsgX`n+!YVw@*;u`oM&>@n(791QrG$1xt!k=GI@KyKXp!JnAJk1Vya*w%kL0egh zWCQcva;_ro_z&fwPt-$f{Bx4M`Lq;gUwPgFTR((v-CFYGr+s1hwZfs~+So>mBTs&0(f<`@h7WYX{vlWiJU-CPUJ@c-okGyZvdX}^oMS;zpAJR)M zmjPA3J3QfDmLAg)*JuwkAZq2H3*A^cF7@S7RS~~FaP9IEYw6VR$2UF%Xb1=GgZBrrxbkRsBjGuSaLxTI%e zYg;hO_A-qzt?woZSe;+eUM*a=d@JNe#>bPj!I9@+Su?d6T$;KjfOS8-oe2AXD+~-Rv=Yd~{5fK1VGwlJ4z7Jk$WMT2K7?3PF3BL<;O)d{j8+62Nv4w~x zI_K8cJJ{_O@lZnN9t#QTkA$ij?Fw3&0PreMG5fu1*OqwIl<4+W53`+6yu4hwV8Qn9 zBMmHZAx35d80Mh>(X<~*0dOa66Q;zpnHj`-<*dLSQoVJC{rUt087K(<9*iXd=)>zE z#VH_8#NC3l*^Gz+q3oYaP<(O~HIOV{Zm09P=Ln=m>VfzR8A|_OEJO3&v3xrG{K28yl2^(?mvwgB+$}{QK|Dvm*IbKtvEQ$B? zFaCVjIO~<2PnC2wt9`Mi+10Us-&IBI(H_4GjbVlg;lR25f#50&N0HK5mICPZT6|Ze9$1BE`2T$O@)O5fM#-7n?KcN{8eJPFSES+%e&B^?I)vA2fO3+)5 zFDfJD<#o}A@<%cvjDO`($^$th(B>)$VRkEw%c>tx^~H=#&e+&tPWq~Jsk%bn$l1S8 zD1f=D)V#nk#WhijR5j)FzEB>KPkAWS#c4iiyd`z%f*lJ`1H>|Lpy+IJR!jS);fK3J zhK+};3F|w251KhI7QW}!NoI|Ysw|stI`Oy6ZTK8t>({EZSClU7YF)HPE}sltxHtGw z?%Ml#Zyf)>yD_5PcUTa{yXw|(pw$}Id0L+TYUe`{`*{tKNw;MOn3-!^ zu)-_C*n&>oN(GfCV@&!xz&Q5k<`zQ#>Ynf+p7pwj@n&9HYt>^J8-u2Wsxit&StD9M zH6vQPfR%9eya-kwHKi+B#h{R)PbS(;J9ks6ZRwwMtLOM-na_LAUj0jvH4`d(Az#a0 zuaZ5Hvr+mZJb{r=_QMVQu-3Ni{xvck3rgL4VP@LbgLDL{0d|91cqZV{);94&%ingm zt&Oi!M~9EM3mN;IvfTNj_ahJ5-4B+xgry|nKIw0c(QMn;Nrf$)px3BX%--C#ADvc6 zAYLnR*f-9UNahr_AAv-KLq9H83US-_pN$>M-n{@6!53-rT;t;IyDy0z=il||;;wxl z#&Mv0r8V!Li-o#WRAU1oW*UQ&zQT5cg3J=;Wn&|0xnX(3nFYhIXx&GSSg?}Il z6v3L)!O8KlmCBnD;HiBk$D(0aB1Oyh^N~hL5v(q4w?YeYn8+Qx29n~n8#3+($c{fv&GJk!V`x*?8Lj+bS@7E34>z3 zRmQ#wH|t9V^-DYy#uabmkmUXnKdLrA&5kTm1?0%?0<#~WFaBU@h`(N;k=GM!cQfp* zE|s3zN*SiAl62j1_SB0_yTWfJ%jk#HbYOr{GRvOd)A}{qk@)()X6byxR;C-Ghz|#b zUJ8@IWPDlIt3hN($*`g zXZBs5fRQ|uFkWj2NiOcPx2$t2BWkr~kGO$_^K*X<;}0e*K%!4O@mt^hU;B$GKL6_- z&Rs^o$?C8j{v@JPp-x#RYg;F>8l~&AHL|zBXXP#9I#IPLq+MIVZP0vaTn%QMsOM91 zs_srY@?jS6i)Qece&X;tRp>+kSK4}Goz ziXtL(ckS82J=G+#5hIJQBGq}0QIpqz6JPVlgxMH$x@@^`C;s*Bvh8tEH$~KGp7_6! z8;?)9_jsKKAVK!e9ah4u|1d2gap`zC9$Tn*E&?zb+q6VB)KiNg@<7(e*#atbh{du9 zIp7~&OTnPP@-O6pnp`A8W@+ku4S)`9b!W;>rz~yUu^zg*Y!H z`R2<2J;oeX)Iv3W(FWdan^o`?aLTN)s6Rxay?|pb8vVqN)|BC^MgoU{rZ*Yp4ALJ$ z4AMZKT&j^R5QCIfxm4X%y>=$OFnrZ@`Le=(GnlGnUQVz1#8ohBGp*Lyg`}TnK=~@j zGyD5b$zE?Cbo$J=gux&DBf;vMMV{kno}w5O7M1<(gsc<&)#zXSr-Cv(dKJj3Gmw7O z=hcVmTTq&g?vcO|?RVRBy3)&-XGcCwoc|^RleFD*XS7a0Be)Pd;5>%Ai?=;!OwR?Sy9(ju8N*Nvy-i>s8@9IBXKz)UL?v+udUsP(fYj?thbsbJS?L zYk=tGsOnlBUn6Ls;a8(ue&Qpa0EYMDb|!X0#sj2=dVl9)IGrmZdMNPyw*W(q+qYO= z1Eg0xlkJF$3eR`|Jmds_Z+CBEKwSsl@}}`PAduI`D-e#Wnk4jz-wz)bQf=fdh1dg!4G?0|qfA#|!B|iRB z^j(iSAG*diRX1`Afc2>$+`=ptm-|V!S%vK$56_rpI7f>v_+X%n=4K%4Qc7fS$}0S( zV)vpwO%isW$L+aj=k=7pwqd|2fgW9eK<X{Gf$_=OPoD$AX)g7@BU zfNmM+Hys{-g$;jOEnURy$_*}n2%KpadA3X^zG@zyc1B#q8P3$D_Tk>eh`742e6e7B z{G~r0rh*pORtFJ1B0sE1qh?l5v05Q;#xF4J7xb7GJpn_gt8U3sY4d__9#b2fG2{y{ zq{WC*snUoK#IS6%@r2~HLv>bIMxaL!pZ^%lmDujEd@i>SG~wZNGF1M5O$EqlvVk1@ zqm@IahHHc>7{cX%l|YU(@oKHwp0oXjBB%V!N57&}M$m+_KHU-A?gExI;QIxG^UHmx z#%~KObfVii{#q|^*Wdcb+uhYI+doThwEf}njFl8o$iRW})DSI2L`H~Ajw1ltDFFnx zVL_fkcRV`lq z^XLmOeDwE3xyxwUj*BCaiypn>^1({jkx8(zp7LcOMh7{uISP42A<`$uVRy&ZsB#{{CoJoEr`^6vhRwNxrrb7Aefh3jF+g{*!f%LUj6mscHLO+ z_X;}i<%{a)ou=vv?P{1FNhI8P7Rfm0(D-j62!`~irOA2aHdYPA$&VPhz2VWa6=8Hk z@Zq(YyP`9mWRbOZ?N2)W%Pkf9TJ}7*kaIJGo7R1j3XSGHa)XDtFUlC?D+cTAS_-Mu z51j&s{!O1VLvTaO*!UE~O!Cwlfv?^N#VZ9cDDG6@;{%6Yng?0*a7`fhZ#n;~24DyU zZFmmTx3~9wy)J{fe<<=s)H-C{BhLi>R^{CZE6VLY(sDO=@ioQ21=?j8f`?4{NgGUGe6oTJrE2}70kFu&BWJ|ucr3*ewVR! zyXFV7%+fs3*R>fifxmU*-`4_T2CwY1?uBH`oM*||Ni3rzR~ zUz7e!4b8>}T!YI=@+-7{wcU!St|}=orV`;kNC`ZaOR>KUbx>5E&$9;)-fQuGC-zrS zVUH2a)T}y;Idpl0d4`25yHwHV8FPMJ)y;8vc`3|B!Q3wXp^(XD(YobAcGuBgTN{~g z$3z4Pn=8kT@eI7wl!Gy%P(iU7brv^RGJs+!^v$MR=3fP76Y_STEdUJCndKRAZi zA=L%IM%7QKgwKd_mb0gZaz9M?agZ#0>t)5>=@q}?xPMVg-G6zoLNF6(*<=MOEeYN$>MF|Fiy;yuXQibf2YZL+~vPOL@Gy`gx+LSY-MU@y-P+e@`y zDns)rRXP1&%ptVVFJHBN`+F2CJ?iN(iQq}TvY5;*Y$GQM22cNUF@45O&pChMtzJY{ zAqDQcFf+4IC@FN8Zd~fezpt^Jy%uIKCmH`Vnh6?b-Jd&QH=%}%7Iv_b7)Z ztSlDP=&+FwXj%N4HWiFzZriWnD%#xW);geJo%@K z?mxjWn=qUKq7x8?wRT*~xI55aeCnCgjelwPe`JcTV)Dxwf`e>b9{=-%mgC7~?YR3Q zcjwM_qp>yrzjbQCWbggYcbGHN(-l*2%OvT9*tA!9ksSA7u>bO416r1wEN^8<#KPW1 z=Tu(CaJw12e0xRxKj6=mhcx}~-uaQVpXY2R%Ki~F0FX=n#a-kOf#|;yxr+KJ^p^o6 zAS(ay*nb-a|2N|CZzsVRoBaO0+~vyvCw` literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ShowAssetPreview_Inspector.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/ShowAssetPreview_Inspector.PNG.meta new file mode 100644 index 0000000..00b5dda --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/ShowAssetPreview_Inspector.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 9fef8c6f9ed6f5b48b3f90e657bd71d5 +timeCreated: 1509093800 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ShowIf_Code.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/ShowIf_Code.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b7d713597772026c30c19c8110b61b5b32ce5634 GIT binary patch literal 12607 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 Mh4sl|GgQL=0@w>wssI20 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ShowIf_Code.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/ShowIf_Code.PNG.meta new file mode 100644 index 0000000..a88ee55 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/ShowIf_Code.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 8e647f629215ab5479f1f2e9e4e10f89 +timeCreated: 1508669478 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ShowIf_Inspector.gif b/Assets/Plugins/NaughtyAttributes/Documentation/ShowIf_Inspector.gif new file mode 100644 index 0000000000000000000000000000000000000000..0f032caede78a2ed5c060e18bc6ac02f15b74c37 GIT binary patch literal 28248 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ShowIf_Inspector.gif.meta b/Assets/Plugins/NaughtyAttributes/Documentation/ShowIf_Inspector.gif.meta new file mode 100644 index 0000000..f9e8a8b --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/ShowIf_Inspector.gif.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 64454bc61e4706d4792d7f2d289ba722 +timeCreated: 1508669477 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ShowNativeProperty_Code.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/ShowNativeProperty_Code.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e721b91ddc9e089f9fb330001e823179c9f6d4a5 GIT binary patch literal 7249 zcmaKRcT`hp*Y5#EFd#)jQJRROLC~NmICMjiaTtj(8k7m3xdm#HE008Xy z!`#FQ0Qm6WhhJzHct_$zD-8VN^R+sM0LUHk-@%KWZfE~G3jpsDgtwdo!0X-K=2v_H zK(v1Q!`Fn(z77C#6MvYT{X58k#W2JUnx`}^g!~pSttEX1F8`Ka;nnE_&4MqTEF9(K z(}*?5k%nt0yk8@0PQO%oDXSqb^!2Nx#hCf`O1^WkTV~TXm)?$8H*6XgrA{Aa%Y|yF zNXMzaC?_cK-Vg9rr@B=HfCw`%MLh%`Ff0KMA^`~iK~elbjS3V1hWPMxWjdU7<20H@ z$ra1vv^;He`1|Tyw;2DyfJN5QKCNo~+gyjL^-=AW)~vqnqR#2DG8?Q`*7O)1J3WiZ z#Y7MKP#o+CnSJ$MRaGaJ6t=>xTV0*e=(#m7Ms`+{B&a}?re%OgaE}Vv1wWigJ;CFb}5WR1O^;G?Vl7a-Vo5EcR`;hB? z86BbTLh?IOd|sZy-$oN18~wbA-s=If5OOxndXg(0tG*aRDu|nGl3O|C9_Y5|gHyKl z6J%8XUUsoyOJ@&_cjw+RJgTl(jD)?GR#=7GDp^%m0#@5^4#8rO-fn@M)_G;DPQ`^j zW|3*_O5%(kTdP5R`bgh9)8dviI17QJessT4D%+1P6ldItJp zxt#@r=f>AmR?%T$oBo?&y3X+h5>>px`5JXBRYHj;t}7;RCEN3H03K@t8)FNXXfD`Q zTrnU$YP`4FIg3_GnDu~E3Q74^;veOf$i$E~maW;>5+FI@7h7b~Ztqx^vFDiH__9V7 zo88Qb9HvNkF;Bv0-IHCIj{TfeZN&7$iT7+7s&=IIEwcH%Y&^YNgq|)KpTuUf5VdX2OX#)zJ!!vxTz_QA4V^f%}Szu{c zJ+SE1lo-ZguQVj>N`tNJf#3;-xYgzWwTsJ2-}COxPcI+pA;-BvAsbu-c}h1qz&gsX zQuxKg6Qwvz=mqbs<2xmrbPKD@tBnS$c>Ye>73U6s0n?YkZ<gvD~v>eRx07F(%dF*w(3w`6pdRYKVvRw|6DdgqzMtoU@B7{dJPG0MmRoOhUhTU;| zN=Y8qHV4PKSa~EgYnv|>hx4V`x4KYj{7ow*DyOF5=OrPFdn7B31S`MqA1Ap|iA~vk z!i_2WY0pA?-oyoK-}Az?EVTZfkD&!@bN z=Y@J$t{_cQUG8M2)J-Qgz=PSoYoucMc^*lV{*)EWVa26{`9dkqn}gY!8{GphZdJT_JI$5V;|G7*B~sM z#a)^g>(1(r9tteX4@$EDKF4=b*M@LnvXIk^O-y$mz9UBXvN!v+YD#VLt$ZAbAyi

    Y$cg$P!6( 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ShowNativeProperty_Code.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/ShowNativeProperty_Code.PNG.meta new file mode 100644 index 0000000..26bcbd7 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/ShowNativeProperty_Code.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 910bb6ff194fd964b952f93e9c3768cd +timeCreated: 1510927252 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ShowNativeProperty_Inspector.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/ShowNativeProperty_Inspector.PNG new file mode 100644 index 0000000000000000000000000000000000000000..8969c640db9503d4098ac0109d7f91f5b05a9f1c GIT binary patch literal 10829 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

    V6gEfg0AOb( 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 a&fzf6$hUUF(`@d!07eGp`X#qqp8glMEi%~v literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ShowNonSerializedField_Code.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/ShowNonSerializedField_Code.PNG.meta new file mode 100644 index 0000000..232434b --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/ShowNonSerializedField_Code.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: c38bd18425e6caf4c96de9e9dc75d44a +timeCreated: 1508840999 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ShowNonSerializedField_Inspector.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/ShowNonSerializedField_Inspector.PNG new file mode 100644 index 0000000000000000000000000000000000000000..a1f3795871d675cba43f6d36fde2f654b9d52e6a GIT binary patch literal 7504 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 Fe*kP#0R;d6 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ShowNonSerializedField_Inspector.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/ShowNonSerializedField_Inspector.PNG.meta new file mode 100644 index 0000000..54c469a --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/ShowNonSerializedField_Inspector.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: fa565d87ea4765f43ab14b962d78d1d3 +timeCreated: 1508840999 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/Slider_Code.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/Slider_Code.PNG new file mode 100644 index 0000000000000000000000000000000000000000..336bdf3ed078c7970707ac670280ee1240138fe4 GIT binary patch literal 5290 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 Td?&!aUj(ijnCTZ?K|J{{^y_+{ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/Slider_Code.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/Slider_Code.PNG.meta new file mode 100644 index 0000000..909445c --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/Slider_Code.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: c2e8583b447997d4894f6882accea083 +timeCreated: 1508669478 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/Slider_Inspector.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/Slider_Inspector.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e745e411600d2ad3c597b971c104a37e82429054 GIT binary patch literal 7315 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 Hc=Z1O6}K1| literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ValidateInput_Code.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/ValidateInput_Code.PNG.meta new file mode 100644 index 0000000..1524e0a --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/ValidateInput_Code.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: ea806f31fb59c894e84a667948d116fc +timeCreated: 1508669478 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ValidateInput_Inspector.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/ValidateInput_Inspector.PNG new file mode 100644 index 0000000000000000000000000000000000000000..084d2039afe992e1604a9a1e8fb75b32429f0ddc GIT binary patch literal 11233 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 + { + } + + public class DropdownList : IDropdownList + { + private List> values; + + public DropdownList() + { + this.values = new List>(); + } + + public void Add(string displayName, T value) + { + this.values.Add(new KeyValuePair(displayName, value)); + } + + public IEnumerator> GetEnumerator() + { + return this.values.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return this.GetEnumerator(); + } + + public static explicit operator DropdownList(DropdownList target) + { + DropdownList result = new DropdownList(); + foreach (var kvp in target) + { + result.Add(kvp.Key, kvp.Value); + } + + return result; + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/DropdownAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/DropdownAttribute.cs.meta new file mode 100644 index 0000000..a402b5a --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/DropdownAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: cd3b8c98b0803554e9152991fe806c62 +timeCreated: 1508752474 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnableIfAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnableIfAttribute.cs new file mode 100644 index 0000000..5da4653 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnableIfAttribute.cs @@ -0,0 +1,15 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class EnableIfAttribute : DrawerAttribute + { + public string ConditionName { get; private set; } + + public EnableIfAttribute(string conditionName) + { + this.ConditionName = conditionName; + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnableIfAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnableIfAttribute.cs.meta new file mode 100644 index 0000000..b2e4973 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnableIfAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3ef98b2c0ffe1b4c91fbec23d77898e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/MinMaxSliderAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/MinMaxSliderAttribute.cs new file mode 100644 index 0000000..aa429de --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/MinMaxSliderAttribute.cs @@ -0,0 +1,17 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class MinMaxSliderAttribute : DrawerAttribute + { + public float MinValue { get; private set; } + public float MaxValue { get; private set; } + + public MinMaxSliderAttribute(float minValue, float maxValue) + { + this.MinValue = minValue; + this.MaxValue = maxValue; + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/MinMaxSliderAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/MinMaxSliderAttribute.cs.meta new file mode 100644 index 0000000..8dd63f3 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/MinMaxSliderAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 61d133a2d203a77419f35652a7f3fae0 +timeCreated: 1508427131 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ProgressBarAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ProgressBarAttribute.cs new file mode 100644 index 0000000..0649477 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ProgressBarAttribute.cs @@ -0,0 +1,32 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class ProgressBarAttribute : DrawerAttribute + { + public string Name { get; private set; } + public float MaxValue { get; private set; } + public ProgressBarColor Color { get; private set; } + + public ProgressBarAttribute(string name = "", float maxValue = 100, ProgressBarColor color = ProgressBarColor.Blue) + { + Name = name; + MaxValue = maxValue; + Color = color; + } + } + + public enum ProgressBarColor + { + Red, + Pink, + Orange, + Yellow, + Green, + Blue, + Indigo, + Violet, + White + } +} \ No newline at end of file diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ProgressBarAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ProgressBarAttribute.cs.meta new file mode 100644 index 0000000..65bfa95 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ProgressBarAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 8d8eb74e78cba7b43b3025525c5084b9 +timeCreated: 1518435237 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ReadOnlyAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ReadOnlyAttribute.cs new file mode 100644 index 0000000..d29794a --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ReadOnlyAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class ReadOnlyAttribute : DrawerAttribute + { + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ReadOnlyAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ReadOnlyAttribute.cs.meta new file mode 100644 index 0000000..54b0ced --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ReadOnlyAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 4fa676ebc6d589c44817272871db148b +timeCreated: 1508862052 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ReorderableListAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ReorderableListAttribute.cs new file mode 100644 index 0000000..ff1a701 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ReorderableListAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class ReorderableListAttribute : DrawerAttribute + { + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ReorderableListAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ReorderableListAttribute.cs.meta new file mode 100644 index 0000000..59e4c99 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ReorderableListAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ff85489452472c241987e5ba4c5e512a +timeCreated: 1508402303 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ResizableTextAreaAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ResizableTextAreaAttribute.cs new file mode 100644 index 0000000..e84e664 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ResizableTextAreaAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class ResizableTextAreaAttribute : DrawerAttribute + { + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ResizableTextAreaAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ResizableTextAreaAttribute.cs.meta new file mode 100644 index 0000000..43e40fd --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ResizableTextAreaAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 1793ea6e464ee6448930ecf133ed6a1d +timeCreated: 1508583166 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowAssetPreviewAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowAssetPreviewAttribute.cs new file mode 100644 index 0000000..6b35444 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowAssetPreviewAttribute.cs @@ -0,0 +1,17 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class ShowAssetPreviewAttribute : DrawerAttribute + { + public int Width { get; private set; } + public int Height { get; private set; } + + public ShowAssetPreviewAttribute(int width = 64, int height = 64) + { + this.Width = width; + this.Height = height; + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowAssetPreviewAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowAssetPreviewAttribute.cs.meta new file mode 100644 index 0000000..bcdeb2c --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowAssetPreviewAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 313b856a920a987418d6437a8e20a59f +timeCreated: 1509089502 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowNativePropertyAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowNativePropertyAttribute.cs new file mode 100644 index 0000000..bb8a7c7 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowNativePropertyAttribute.cs @@ -0,0 +1,11 @@ +using System; +using UnityEngine; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] + public class ShowNativePropertyAttribute : DrawerAttribute + { + + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowNativePropertyAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowNativePropertyAttribute.cs.meta new file mode 100644 index 0000000..29f619d --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowNativePropertyAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: acc7d7e8ec9e47a4aaf4167698ae076f +timeCreated: 1510926376 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowNonSerializedFieldAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowNonSerializedFieldAttribute.cs new file mode 100644 index 0000000..8f311ef --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowNonSerializedFieldAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class ShowNonSerializedFieldAttribute : DrawerAttribute + { + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowNonSerializedFieldAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowNonSerializedFieldAttribute.cs.meta new file mode 100644 index 0000000..d21b234 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowNonSerializedFieldAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a176aad85de73b34ba3ecd4f7baa367b +timeCreated: 1508835721 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/SliderAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/SliderAttribute.cs new file mode 100644 index 0000000..ece2b58 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/SliderAttribute.cs @@ -0,0 +1,23 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class SliderAttribute : DrawerAttribute + { + public float MinValue { get; private set; } + public float MaxValue { get; private set; } + + public SliderAttribute(float minValue, float maxValue) + { + this.MinValue = minValue; + this.MaxValue = maxValue; + } + + public SliderAttribute(int minValue, int maxValue) + { + this.MaxValue = minValue; + this.MaxValue = maxValue; + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/SliderAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/SliderAttribute.cs.meta new file mode 100644 index 0000000..b121855 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/SliderAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: f75eef8142877c345ba9b95046dd3bf6 +timeCreated: 1508422518 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes.meta new file mode 100644 index 0000000..4455f01 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 86ca4f90dd05bc448959ecd8f44097a7 +folderAsset: yes +timeCreated: 1508330803 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes/BoxGroupAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes/BoxGroupAttribute.cs new file mode 100644 index 0000000..a6f3b49 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes/BoxGroupAttribute.cs @@ -0,0 +1,13 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class BoxGroupAttribute : GroupAttribute + { + public BoxGroupAttribute(string name = "") + : base(name) + { + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes/BoxGroupAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes/BoxGroupAttribute.cs.meta new file mode 100644 index 0000000..fcdb278 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes/BoxGroupAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 88c5a8d79f9e72a43a4cfa67fd08fdd6 +timeCreated: 1508326108 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes/GroupAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes/GroupAttribute.cs new file mode 100644 index 0000000..a317fe2 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes/GroupAttribute.cs @@ -0,0 +1,14 @@ +using System; + +namespace NaughtyAttributes +{ + public abstract class GroupAttribute : NaughtyAttribute + { + public string Name { get; private set; } + + public GroupAttribute(string name) + { + this.Name = name; + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes/GroupAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes/GroupAttribute.cs.meta new file mode 100644 index 0000000..db3cc39 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/GroupAttributes/GroupAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: beb48511ef6091e4ba054ad1b618933c +timeCreated: 1508326108 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes.meta new file mode 100644 index 0000000..f2ed90e --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 51ee806b39c5fb343ae7d268404d8c67 +folderAsset: yes +timeCreated: 1508497398 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/InfoBoxAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/InfoBoxAttribute.cs new file mode 100644 index 0000000..d09c616 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/InfoBoxAttribute.cs @@ -0,0 +1,31 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = true, Inherited = true)] + public class InfoBoxAttribute : MetaAttribute + { + public string Text { get; private set; } + public InfoBoxType Type { get; private set; } + public string VisibleIf { get; private set; } + + public InfoBoxAttribute(string text, InfoBoxType type = InfoBoxType.Normal, string visibleIf = null) + { + this.Text = text; + this.Type = type; + this.VisibleIf = visibleIf; + } + + public InfoBoxAttribute(string text, string visibleIf) + : this(text, InfoBoxType.Normal, visibleIf) + { + } + } + + public enum InfoBoxType + { + Normal, + Warning, + Error + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/InfoBoxAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/InfoBoxAttribute.cs.meta new file mode 100644 index 0000000..19cb564 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/InfoBoxAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 42c6184c84ab19d4382b06f9017f136d +timeCreated: 1508607449 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/MetaAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/MetaAttribute.cs new file mode 100644 index 0000000..ef2a451 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/MetaAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes +{ + public abstract class MetaAttribute : NaughtyAttribute + { + public int Order { get; set; } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/MetaAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/MetaAttribute.cs.meta new file mode 100644 index 0000000..5f5e5d7 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/MetaAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: fcd6d339bcd667044a48d41a78a7830c +timeCreated: 1508497398 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/OnValueChangedAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/OnValueChangedAttribute.cs new file mode 100644 index 0000000..ab826b8 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/OnValueChangedAttribute.cs @@ -0,0 +1,15 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = true, Inherited = true)] + public class OnValueChangedAttribute : MetaAttribute + { + public string CallbackName { get; private set; } + + public OnValueChangedAttribute(string callbackName) + { + this.CallbackName = callbackName; + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/OnValueChangedAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/OnValueChangedAttribute.cs.meta new file mode 100644 index 0000000..1452234 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/MetaAttributes/OnValueChangedAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a144cdc17b6e4cf4f86692ae1dc7e4d7 +timeCreated: 1508610277 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/NaughtyAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/NaughtyAttribute.cs new file mode 100644 index 0000000..6251af9 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/NaughtyAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes +{ + // The base class for all naughty attributes + public class NaughtyAttribute : Attribute + { + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/NaughtyAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/NaughtyAttribute.cs.meta new file mode 100644 index 0000000..fdf1ddf --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/NaughtyAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 1accb89cb44c4a342a1857e5e3d13abb +timeCreated: 1508052914 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/NaughtyAttributes.asmdef b/Assets/Plugins/NaughtyAttributes/Scripts/Core/NaughtyAttributes.asmdef new file mode 100644 index 0000000..bfa8896 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/NaughtyAttributes.asmdef @@ -0,0 +1,3 @@ +{ + "name": "NaughtyAttributes" +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/NaughtyAttributes.asmdef.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/NaughtyAttributes.asmdef.meta new file mode 100644 index 0000000..fd8af9b --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/NaughtyAttributes.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ee89136d9a8326b458f7dad075c814e6 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes.meta new file mode 100644 index 0000000..9bee434 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8a655727c2e629a438ad94f60080b9ea +folderAsset: yes +timeCreated: 1508151410 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MaxValueAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MaxValueAttribute.cs new file mode 100644 index 0000000..4c54127 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MaxValueAttribute.cs @@ -0,0 +1,20 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class MaxValueAttribute : ValidatorAttribute + { + public float MaxValue { get; private set; } + + public MaxValueAttribute(float maxValue) + { + this.MaxValue = maxValue; + } + + public MaxValueAttribute(int maxValue) + { + this.MaxValue = maxValue; + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MaxValueAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MaxValueAttribute.cs.meta new file mode 100644 index 0000000..4ba3b5a --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MaxValueAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e018059e7fe12fd42a3a1bba0dbbf9c5 +timeCreated: 1508047804 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MinValueAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MinValueAttribute.cs new file mode 100644 index 0000000..627e747 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MinValueAttribute.cs @@ -0,0 +1,20 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class MinValueAttribute : ValidatorAttribute + { + public float MinValue { get; private set; } + + public MinValueAttribute(float minValue) + { + this.MinValue = minValue; + } + + public MinValueAttribute(int minValue) + { + this.MinValue = minValue; + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MinValueAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MinValueAttribute.cs.meta new file mode 100644 index 0000000..19450e8 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MinValueAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 337be62eb8c929f4ab8b3d495a712a56 +timeCreated: 1508048805 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/RequiredAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/RequiredAttribute.cs new file mode 100644 index 0000000..903f658 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/RequiredAttribute.cs @@ -0,0 +1,15 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class RequiredAttribute : ValidatorAttribute + { + public string Message { get; private set; } + + public RequiredAttribute(string message = null) + { + this.Message = message; + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/RequiredAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/RequiredAttribute.cs.meta new file mode 100644 index 0000000..068d000 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/RequiredAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0b70ebd0fbd89c648981f08469806779 +timeCreated: 1508655546 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidateInputAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidateInputAttribute.cs new file mode 100644 index 0000000..d024816 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidateInputAttribute.cs @@ -0,0 +1,17 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class ValidateInputAttribute : ValidatorAttribute + { + public string CallbackName { get; private set; } + public string Message { get; private set; } + + public ValidateInputAttribute(string callbackName, string message = null) + { + this.CallbackName = callbackName; + this.Message = message; + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidateInputAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidateInputAttribute.cs.meta new file mode 100644 index 0000000..ed365d1 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidateInputAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: f13ea28cf56e89f4cb335e28c9ab5d9a +timeCreated: 1508657795 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidatorAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidatorAttribute.cs new file mode 100644 index 0000000..38222eb --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidatorAttribute.cs @@ -0,0 +1,8 @@ +using System; + +namespace NaughtyAttributes +{ + public abstract class ValidatorAttribute : NaughtyAttribute + { + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidatorAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidatorAttribute.cs.meta new file mode 100644 index 0000000..668f7e1 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidatorAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5fac74a9575c45342be1e6dda45610ad +timeCreated: 1508151410 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor.meta new file mode 100644 index 0000000..8110aa8 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b76068e69df25a94ab378b0b6829c4f0 +folderAsset: yes +timeCreated: 1507995613 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes.meta new file mode 100644 index 0000000..3f8ebe7 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bfd420e5bf6a25049b8fcea8b2f48c94 +folderAsset: yes +timeCreated: 1508153828 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/BaseAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/BaseAttribute.cs new file mode 100644 index 0000000..b3fef44 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/BaseAttribute.cs @@ -0,0 +1,23 @@ +using System; + +namespace NaughtyAttributes.Editor +{ + [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] + public abstract class BaseAttribute : Attribute, IAttribute + { + private Type targetAttributeType; + + public BaseAttribute(Type targetAttributeType) + { + this.targetAttributeType = targetAttributeType; + } + + public Type TargetAttributeType + { + get + { + return this.targetAttributeType; + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/BaseAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/BaseAttribute.cs.meta new file mode 100644 index 0000000..d12b1ae --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/BaseAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: dd861c512b7cd804fa5f01b4d0e9f5bc +timeCreated: 1508424822 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/FieldDrawerAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/FieldDrawerAttribute.cs new file mode 100644 index 0000000..e2de8b0 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/FieldDrawerAttribute.cs @@ -0,0 +1,11 @@ +using System; + +namespace NaughtyAttributes.Editor +{ + public class FieldDrawerAttribute : BaseAttribute + { + public FieldDrawerAttribute(Type targetAttributeType) : base(targetAttributeType) + { + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/FieldDrawerAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/FieldDrawerAttribute.cs.meta new file mode 100644 index 0000000..456e222 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/FieldDrawerAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ad0dbf00ca9ec1e4290145dc40bda96f +timeCreated: 1508835980 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/IAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/IAttribute.cs new file mode 100644 index 0000000..5d24b68 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/IAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes.Editor +{ + public interface IAttribute + { + Type TargetAttributeType { get; } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/IAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/IAttribute.cs.meta new file mode 100644 index 0000000..4b3a9d9 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/IAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: eec883c51d802eb49be41f384e227dad +timeCreated: 1508424822 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/MethodDrawerAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/MethodDrawerAttribute.cs new file mode 100644 index 0000000..ad78d4b --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/MethodDrawerAttribute.cs @@ -0,0 +1,11 @@ +using System; + +namespace NaughtyAttributes.Editor +{ + public class MethodDrawerAttribute : BaseAttribute + { + public MethodDrawerAttribute(Type targetAttributeType) : base(targetAttributeType) + { + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/MethodDrawerAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/MethodDrawerAttribute.cs.meta new file mode 100644 index 0000000..7b6acd3 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/MethodDrawerAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b89ac4d9b78686548baa09fb0b103850 +timeCreated: 1508592495 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/NativePropertyDrawerAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/NativePropertyDrawerAttribute.cs new file mode 100644 index 0000000..d60e141 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/NativePropertyDrawerAttribute.cs @@ -0,0 +1,11 @@ +using System; + +namespace NaughtyAttributes.Editor +{ + public class NativePropertyDrawerAttribute : BaseAttribute + { + public NativePropertyDrawerAttribute(Type targetAttributeType) : base(targetAttributeType) + { + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/NativePropertyDrawerAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/NativePropertyDrawerAttribute.cs.meta new file mode 100644 index 0000000..9a726e7 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/NativePropertyDrawerAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7c30e23a060c0614b876d7f14e0ee649 +timeCreated: 1510924166 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyDrawConditionAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyDrawConditionAttribute.cs new file mode 100644 index 0000000..c8fa6e9 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyDrawConditionAttribute.cs @@ -0,0 +1,11 @@ +using System; + +namespace NaughtyAttributes.Editor +{ + public class PropertyDrawConditionAttribute : BaseAttribute + { + public PropertyDrawConditionAttribute(Type targetAttributeType) : base(targetAttributeType) + { + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyDrawConditionAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyDrawConditionAttribute.cs.meta new file mode 100644 index 0000000..663b290 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyDrawConditionAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d7962631135870e4fa748e6f81cd64d4 +timeCreated: 1508414568 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyDrawerAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyDrawerAttribute.cs new file mode 100644 index 0000000..cce3c96 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyDrawerAttribute.cs @@ -0,0 +1,11 @@ +using System; + +namespace NaughtyAttributes.Editor +{ + public class PropertyDrawerAttribute : BaseAttribute + { + public PropertyDrawerAttribute(Type targetAttributeType) : base(targetAttributeType) + { + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyDrawerAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyDrawerAttribute.cs.meta new file mode 100644 index 0000000..3b4803b --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyDrawerAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 77bb6824c4e9e054db05347dd8465f24 +timeCreated: 1508153828 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyGrouperAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyGrouperAttribute.cs new file mode 100644 index 0000000..5574cc5 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyGrouperAttribute.cs @@ -0,0 +1,11 @@ +using System; + +namespace NaughtyAttributes.Editor +{ + public class PropertyGrouperAttribute : BaseAttribute + { + public PropertyGrouperAttribute(Type targetAttributeType) : base(targetAttributeType) + { + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyGrouperAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyGrouperAttribute.cs.meta new file mode 100644 index 0000000..757cf05 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyGrouperAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 9d1b7efb592ab4a4796c70edaad2be75 +timeCreated: 1508332897 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyMetaAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyMetaAttribute.cs new file mode 100644 index 0000000..0d2e09c --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyMetaAttribute.cs @@ -0,0 +1,11 @@ +using System; + +namespace NaughtyAttributes.Editor +{ + public class PropertyMetaAttribute : BaseAttribute + { + public PropertyMetaAttribute(Type targetAttributeType) : base(targetAttributeType) + { + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyMetaAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyMetaAttribute.cs.meta new file mode 100644 index 0000000..2537218 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyMetaAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b46e1700b41c60141b19b0a7ed25a383 +timeCreated: 1508497398 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyValidatorAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyValidatorAttribute.cs new file mode 100644 index 0000000..375bd33 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyValidatorAttribute.cs @@ -0,0 +1,11 @@ +using System; + +namespace NaughtyAttributes.Editor +{ + public class PropertyValidatorAttribute : BaseAttribute + { + public PropertyValidatorAttribute(Type targetAttributeType) : base(targetAttributeType) + { + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyValidatorAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyValidatorAttribute.cs.meta new file mode 100644 index 0000000..1e3fbfe --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Attributes/PropertyValidatorAttribute.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 38c34a83bfd0a07468f20ae50c36737f +timeCreated: 1508153828 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration.meta new file mode 100644 index 0000000..4d91c4b --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3876cb6aacfb99f46803d5e50eacdf2c +folderAsset: yes +timeCreated: 1508230862 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/CodeGenerator.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/CodeGenerator.cs new file mode 100644 index 0000000..bafbf0b --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/CodeGenerator.cs @@ -0,0 +1,101 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; +using UnityEngine; +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + public class CodeGenerator : UnityEditor.Editor + { + private static readonly string GENERATED_CODE_TARGET_FOLDER = + (Application.dataPath.Replace("Assets", string.Empty) + AssetDatabase.GUIDToAssetPath(AssetDatabase.FindAssets("CodeGenerator")[0])) + .Replace("CodeGenerator.cs", string.Empty) + .Replace("/", "\\"); + + private static readonly string CLASS_NAME_PLACEHOLDER = "__classname__"; + private static readonly string ENTRIES_PLACEHOLDER = "__entries__"; + private static readonly string META_ENTRY_FORMAT = "metasByAttributeType[typeof({0})] = new {1}();" + Environment.NewLine; + private static readonly string DRAWER_ENTRY_FORMAT = "drawersByAttributeType[typeof({0})] = new {1}();" + Environment.NewLine; + private static readonly string GROUPER_ENTRY_FORMAT = "groupersByAttributeType[typeof({0})] = new {1}();" + Environment.NewLine; + private static readonly string VALIDATOR_ENTRY_FORMAT = "validatorsByAttributeType[typeof({0})] = new {1}();" + Environment.NewLine; + private static readonly string DRAW_CONDITION_ENTRY_FORMAT = "drawConditionsByAttributeType[typeof({0})] = new {1}();" + Environment.NewLine; + + //[UnityEditor.Callbacks.DidReloadScripts] + [MenuItem("Tools/NaughtyAttributes/Update Attributes Database")] + private static void GenerateCode() + { + GenerateScript("PropertyMetaDatabase", "PropertyMetaDatabaseTemplate", META_ENTRY_FORMAT); + GenerateScript("PropertyDrawerDatabase", "PropertyDrawerDatabaseTemplate", DRAWER_ENTRY_FORMAT); + GenerateScript("PropertyGrouperDatabase", "PropertyGrouperDatabaseTemplate", GROUPER_ENTRY_FORMAT); + GenerateScript("PropertyValidatorDatabase", "PropertyValidatorDatabaseTemplate", VALIDATOR_ENTRY_FORMAT); + GenerateScript("PropertyDrawConditionDatabase", "PropertyDrawConditionDatabaseTemplate", DRAW_CONDITION_ENTRY_FORMAT); + + GenerateScript("FieldDrawerDatabase", "FieldDrawerDatabaseTemplate", DRAWER_ENTRY_FORMAT); + GenerateScript("MethodDrawerDatabase", "MethodDrawerDatabaseTemplate", DRAWER_ENTRY_FORMAT); + GenerateScript("NativePropertyDrawerDatabase", "NativePropertyDrawerDbTemplate", DRAWER_ENTRY_FORMAT); + + AssetDatabase.Refresh(); + } + + private static void GenerateScript(string scriptName, string templateName, string entryFormat) + where TAttribute : IAttribute + { + string[] templateAssets = AssetDatabase.FindAssets(templateName); + if (templateAssets.Length == 0) + { + return; + } + + string templateGUID = templateAssets[0]; + string templateRelativePath = AssetDatabase.GUIDToAssetPath(templateGUID); + string templateFormat = (AssetDatabase.LoadAssetAtPath(templateRelativePath, typeof(TextAsset)) as TextAsset).ToString(); + //string templateFullPath = (Application.dataPath.Replace("Assets", string.Empty) + templateRelativePath).Replace("/", "\\"); + //string templateFormat = IOUtility.ReadFromFile(templateFullPath); + + StringBuilder entriesBuilder = new StringBuilder(); + List subTypes = GetAllSubTypes(typeof(TClass)); + + foreach (var subType in subTypes) + { + IAttribute[] attributes = (IAttribute[])subType.GetCustomAttributes(typeof(TAttribute), true); + if (attributes.Length > 0) + { + entriesBuilder.AppendFormat(entryFormat, attributes[0].TargetAttributeType.Name, subType.Name); + } + } + + string scriptContent = templateFormat + .Replace(CLASS_NAME_PLACEHOLDER, scriptName) + .Replace(ENTRIES_PLACEHOLDER, entriesBuilder.ToString()); + + scriptContent = Regex.Replace(scriptContent, @"\r\n|\n\r|\r|\n", Environment.NewLine); // Normalize line endings + + string scriptPath = GENERATED_CODE_TARGET_FOLDER + scriptName + ".cs"; + + IOUtility.WriteToFile(scriptPath, scriptContent); + } + + private static List GetAllSubTypes(Type baseClass) + { + var result = new List(); + Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); + + foreach (var assemly in assemblies) + { + Type[] types = assemly.GetTypes(); + foreach (var type in types) + { + if (type.IsSubclassOf(baseClass)) + { + result.Add(type); + } + } + } + + return result; + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/CodeGenerator.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/CodeGenerator.cs.meta new file mode 100644 index 0000000..2bbd870 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/CodeGenerator.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 990da0e1629b14049842bf2ac82cbff0 +timeCreated: 1508230160 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/FieldDrawerDatabase.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/FieldDrawerDatabase.cs new file mode 100644 index 0000000..a1e4692 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/FieldDrawerDatabase.cs @@ -0,0 +1,33 @@ +// This class is auto generated + +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + public static class FieldDrawerDatabase + { + private static Dictionary drawersByAttributeType; + + static FieldDrawerDatabase() + { + drawersByAttributeType = new Dictionary(); + drawersByAttributeType[typeof(ShowNonSerializedFieldAttribute)] = new ShowNonSerializedFieldFieldDrawer(); + + } + + public static FieldDrawer GetDrawerForAttribute(Type attributeType) + { + FieldDrawer drawer; + if (drawersByAttributeType.TryGetValue(attributeType, out drawer)) + { + return drawer; + } + else + { + return null; + } + } + } +} + diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/FieldDrawerDatabase.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/FieldDrawerDatabase.cs.meta new file mode 100644 index 0000000..52c69e9 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/FieldDrawerDatabase.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b2406e32d0ab1214ab4959f1cdc8a609 +timeCreated: 1508836346 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/MethodDrawerDatabase.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/MethodDrawerDatabase.cs new file mode 100644 index 0000000..832fb60 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/MethodDrawerDatabase.cs @@ -0,0 +1,33 @@ +// This class is auto generated + +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + public static class MethodDrawerDatabase + { + private static Dictionary drawersByAttributeType; + + static MethodDrawerDatabase() + { + drawersByAttributeType = new Dictionary(); + drawersByAttributeType[typeof(ButtonAttribute)] = new ButtonMethodDrawer(); + + } + + public static MethodDrawer GetDrawerForAttribute(Type attributeType) + { + MethodDrawer drawer; + if (drawersByAttributeType.TryGetValue(attributeType, out drawer)) + { + return drawer; + } + else + { + return null; + } + } + } +} + diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/MethodDrawerDatabase.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/MethodDrawerDatabase.cs.meta new file mode 100644 index 0000000..82b0f85 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/MethodDrawerDatabase.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 40b81aa63ff76d34ea67277db99a6a25 +timeCreated: 1508592498 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/NativePropertyDrawerDatabase.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/NativePropertyDrawerDatabase.cs new file mode 100644 index 0000000..2844f95 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/NativePropertyDrawerDatabase.cs @@ -0,0 +1,33 @@ +// This class is auto generated + +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + public static class NativePropertyDrawerDatabase + { + private static Dictionary drawersByAttributeType; + + static NativePropertyDrawerDatabase() + { + drawersByAttributeType = new Dictionary(); + drawersByAttributeType[typeof(ShowNativePropertyAttribute)] = new ShowNativePropertyNativePropertyDrawer(); + + } + + public static NativePropertyDrawer GetDrawerForAttribute(Type attributeType) + { + NativePropertyDrawer drawer; + if (drawersByAttributeType.TryGetValue(attributeType, out drawer)) + { + return drawer; + } + else + { + return null; + } + } + } +} + diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/NativePropertyDrawerDatabase.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/NativePropertyDrawerDatabase.cs.meta new file mode 100644 index 0000000..b86e8d3 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/NativePropertyDrawerDatabase.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 9fd2f82e21266a94ea967208610dda1e +timeCreated: 1510925645 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawConditionDatabase.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawConditionDatabase.cs new file mode 100644 index 0000000..2bf40b8 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawConditionDatabase.cs @@ -0,0 +1,34 @@ +// This class is auto generated + +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + public static class PropertyDrawConditionDatabase + { + private static Dictionary drawConditionsByAttributeType; + + static PropertyDrawConditionDatabase() + { + drawConditionsByAttributeType = new Dictionary(); + drawConditionsByAttributeType[typeof(HideIfAttribute)] = new HideIfPropertyDrawCondition(); +drawConditionsByAttributeType[typeof(ShowIfAttribute)] = new ShowIfPropertyDrawCondition(); + + } + + public static PropertyDrawCondition GetDrawConditionForAttribute(Type attributeType) + { + PropertyDrawCondition drawCondition; + if (drawConditionsByAttributeType.TryGetValue(attributeType, out drawCondition)) + { + return drawCondition; + } + else + { + return null; + } + } + } +} + diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawConditionDatabase.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawConditionDatabase.cs.meta new file mode 100644 index 0000000..e4b5bff --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawConditionDatabase.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0b96dc9fe878bfc49865d28d601a7468 +timeCreated: 1508414568 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawerDatabase.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawerDatabase.cs new file mode 100644 index 0000000..1aa4e94 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawerDatabase.cs @@ -0,0 +1,50 @@ +// This class is auto generated + +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + public static class PropertyDrawerDatabase + { + private static Dictionary drawersByAttributeType; + + static PropertyDrawerDatabase() + { + drawersByAttributeType = new Dictionary(); + drawersByAttributeType[typeof(DisableIfAttribute)] = new DisableIfPropertyDrawer(); +drawersByAttributeType[typeof(DropdownAttribute)] = new DropdownPropertyDrawer(); +drawersByAttributeType[typeof(EnableIfAttribute)] = new EnableIfPropertyDrawer(); +drawersByAttributeType[typeof(MinMaxSliderAttribute)] = new MinMaxSliderPropertyDrawer(); +drawersByAttributeType[typeof(ProgressBarAttribute)] = new ProgressBarPropertyDrawer(); +drawersByAttributeType[typeof(ReadOnlyAttribute)] = new ReadOnlyPropertyDrawer(); +drawersByAttributeType[typeof(ReorderableListAttribute)] = new ReorderableListPropertyDrawer(); +drawersByAttributeType[typeof(ResizableTextAreaAttribute)] = new ResizableTextAreaPropertyDrawer(); +drawersByAttributeType[typeof(ShowAssetPreviewAttribute)] = new ShowAssetPreviewPropertyDrawer(); +drawersByAttributeType[typeof(SliderAttribute)] = new SliderPropertyDrawer(); + + } + + public static PropertyDrawer GetDrawerForAttribute(Type attributeType) + { + PropertyDrawer drawer; + if (drawersByAttributeType.TryGetValue(attributeType, out drawer)) + { + return drawer; + } + else + { + return null; + } + } + + public static void ClearCache() + { + foreach (var kvp in drawersByAttributeType) + { + kvp.Value.ClearCache(); + } + } + } +} + diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawerDatabase.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawerDatabase.cs.meta new file mode 100644 index 0000000..36c43db --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawerDatabase.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 57bb89ab38f8da84db719a3fad7934d2 +timeCreated: 1508241644 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyGrouperDatabase.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyGrouperDatabase.cs new file mode 100644 index 0000000..d2d067e --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyGrouperDatabase.cs @@ -0,0 +1,33 @@ +// This class is auto generated + +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + public static class PropertyGrouperDatabase + { + private static Dictionary groupersByAttributeType; + + static PropertyGrouperDatabase() + { + groupersByAttributeType = new Dictionary(); + groupersByAttributeType[typeof(BoxGroupAttribute)] = new BoxGroupPropertyGrouper(); + + } + + public static PropertyGrouper GetGrouperForAttribute(Type attributeType) + { + PropertyGrouper grouper; + if (groupersByAttributeType.TryGetValue(attributeType, out grouper)) + { + return grouper; + } + else + { + return null; + } + } + } +} + diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyGrouperDatabase.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyGrouperDatabase.cs.meta new file mode 100644 index 0000000..bc0f34b --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyGrouperDatabase.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0e5fed99fdc5f794291677a80073b4ba +timeCreated: 1508333008 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyMetaDatabase.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyMetaDatabase.cs new file mode 100644 index 0000000..45dfc00 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyMetaDatabase.cs @@ -0,0 +1,34 @@ +// This class is auto generated + +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + public static class PropertyMetaDatabase + { + private static Dictionary metasByAttributeType; + + static PropertyMetaDatabase() + { + metasByAttributeType = new Dictionary(); + metasByAttributeType[typeof(InfoBoxAttribute)] = new InfoBoxPropertyMeta(); +metasByAttributeType[typeof(OnValueChangedAttribute)] = new OnValueChangedPropertyMeta(); + + } + + public static PropertyMeta GetMetaForAttribute(Type attributeType) + { + PropertyMeta meta; + if (metasByAttributeType.TryGetValue(attributeType, out meta)) + { + return meta; + } + else + { + return null; + } + } + } +} + diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyMetaDatabase.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyMetaDatabase.cs.meta new file mode 100644 index 0000000..6a60430 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyMetaDatabase.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 57233c5ec1975024aa0723241b2f8210 +timeCreated: 1508497398 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyValidatorDatabase.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyValidatorDatabase.cs new file mode 100644 index 0000000..c74ca91 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyValidatorDatabase.cs @@ -0,0 +1,36 @@ +// This class is auto generated + +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + public static class PropertyValidatorDatabase + { + private static Dictionary validatorsByAttributeType; + + static PropertyValidatorDatabase() + { + validatorsByAttributeType = new Dictionary(); + validatorsByAttributeType[typeof(MaxValueAttribute)] = new MaxValuePropertyValidator(); +validatorsByAttributeType[typeof(MinValueAttribute)] = new MinValuePropertyValidator(); +validatorsByAttributeType[typeof(RequiredAttribute)] = new RequiredPropertyValidator(); +validatorsByAttributeType[typeof(ValidateInputAttribute)] = new ValidateInputPropertyValidator(); + + } + + public static PropertyValidator GetValidatorForAttribute(Type attributeType) + { + PropertyValidator validator; + if (validatorsByAttributeType.TryGetValue(attributeType, out validator)) + { + return validator; + } + else + { + return null; + } + } + } +} + diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyValidatorDatabase.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyValidatorDatabase.cs.meta new file mode 100644 index 0000000..6d882da --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyValidatorDatabase.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 24e9da8a6b324374a9f655d3a867b284 +timeCreated: 1508241122 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates.meta new file mode 100644 index 0000000..5d830f1 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7b15ea6695a69d74ab656006617d8d21 +folderAsset: yes +timeCreated: 1508230862 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/FieldDrawerDatabaseTemplate.txt b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/FieldDrawerDatabaseTemplate.txt new file mode 100644 index 0000000..926a6d7 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/FieldDrawerDatabaseTemplate.txt @@ -0,0 +1,31 @@ +// This class is auto generated + +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + public static class __classname__ + { + private static Dictionary drawersByAttributeType; + + static __classname__() + { + drawersByAttributeType = new Dictionary(); + __entries__ + } + + public static FieldDrawer GetDrawerForAttribute(Type attributeType) + { + FieldDrawer drawer; + if (drawersByAttributeType.TryGetValue(attributeType, out drawer)) + { + return drawer; + } + else + { + return null; + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/FieldDrawerDatabaseTemplate.txt.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/FieldDrawerDatabaseTemplate.txt.meta new file mode 100644 index 0000000..43e8f76 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/FieldDrawerDatabaseTemplate.txt.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 943b4c41373856243996247275be2cd8 +timeCreated: 1508836344 +licenseType: Free +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/MethodDrawerDatabaseTemplate.txt b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/MethodDrawerDatabaseTemplate.txt new file mode 100644 index 0000000..d6efd8a --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/MethodDrawerDatabaseTemplate.txt @@ -0,0 +1,31 @@ +// This class is auto generated + +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + public static class __classname__ + { + private static Dictionary drawersByAttributeType; + + static __classname__() + { + drawersByAttributeType = new Dictionary(); + __entries__ + } + + public static MethodDrawer GetDrawerForAttribute(Type attributeType) + { + MethodDrawer drawer; + if (drawersByAttributeType.TryGetValue(attributeType, out drawer)) + { + return drawer; + } + else + { + return null; + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/MethodDrawerDatabaseTemplate.txt.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/MethodDrawerDatabaseTemplate.txt.meta new file mode 100644 index 0000000..4531345 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/MethodDrawerDatabaseTemplate.txt.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 52d15465eb3439f4a9b95963a21d19b7 +timeCreated: 1508592495 +licenseType: Free +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/NativePropertyDrawerDbTemplate.txt b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/NativePropertyDrawerDbTemplate.txt new file mode 100644 index 0000000..fe9cca1 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/NativePropertyDrawerDbTemplate.txt @@ -0,0 +1,31 @@ +// This class is auto generated + +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + public static class __classname__ + { + private static Dictionary drawersByAttributeType; + + static __classname__() + { + drawersByAttributeType = new Dictionary(); + __entries__ + } + + public static NativePropertyDrawer GetDrawerForAttribute(Type attributeType) + { + NativePropertyDrawer drawer; + if (drawersByAttributeType.TryGetValue(attributeType, out drawer)) + { + return drawer; + } + else + { + return null; + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/NativePropertyDrawerDbTemplate.txt.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/NativePropertyDrawerDbTemplate.txt.meta new file mode 100644 index 0000000..4c16e8c --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/NativePropertyDrawerDbTemplate.txt.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b82f5f6bf1fd4314c93624a8bc8835fd +timeCreated: 1510924467 +licenseType: Free +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyDrawConditionDatabaseTemplate.txt b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyDrawConditionDatabaseTemplate.txt new file mode 100644 index 0000000..adc064a --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyDrawConditionDatabaseTemplate.txt @@ -0,0 +1,31 @@ +// This class is auto generated + +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + public static class __classname__ + { + private static Dictionary drawConditionsByAttributeType; + + static __classname__() + { + drawConditionsByAttributeType = new Dictionary(); + __entries__ + } + + public static PropertyDrawCondition GetDrawConditionForAttribute(Type attributeType) + { + PropertyDrawCondition drawCondition; + if (drawConditionsByAttributeType.TryGetValue(attributeType, out drawCondition)) + { + return drawCondition; + } + else + { + return null; + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyDrawConditionDatabaseTemplate.txt.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyDrawConditionDatabaseTemplate.txt.meta new file mode 100644 index 0000000..1d19d37 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyDrawConditionDatabaseTemplate.txt.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b36f5858330c2d140a697f19ba6cc36b +timeCreated: 1508414568 +licenseType: Free +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyDrawerDatabaseTemplate.txt b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyDrawerDatabaseTemplate.txt new file mode 100644 index 0000000..338dde4 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyDrawerDatabaseTemplate.txt @@ -0,0 +1,39 @@ +// This class is auto generated + +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + public static class __classname__ + { + private static Dictionary drawersByAttributeType; + + static __classname__() + { + drawersByAttributeType = new Dictionary(); + __entries__ + } + + public static PropertyDrawer GetDrawerForAttribute(Type attributeType) + { + PropertyDrawer drawer; + if (drawersByAttributeType.TryGetValue(attributeType, out drawer)) + { + return drawer; + } + else + { + return null; + } + } + + public static void ClearCache() + { + foreach (var kvp in drawersByAttributeType) + { + kvp.Value.ClearCache(); + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyDrawerDatabaseTemplate.txt.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyDrawerDatabaseTemplate.txt.meta new file mode 100644 index 0000000..26014c9 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyDrawerDatabaseTemplate.txt.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 136a96a904b577244b08be5d5542a77d +timeCreated: 1508241102 +licenseType: Free +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyGrouperDatabaseTemplate.txt b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyGrouperDatabaseTemplate.txt new file mode 100644 index 0000000..5065a45 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyGrouperDatabaseTemplate.txt @@ -0,0 +1,31 @@ +// This class is auto generated + +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + public static class __classname__ + { + private static Dictionary groupersByAttributeType; + + static __classname__() + { + groupersByAttributeType = new Dictionary(); + __entries__ + } + + public static PropertyGrouper GetGrouperForAttribute(Type attributeType) + { + PropertyGrouper grouper; + if (groupersByAttributeType.TryGetValue(attributeType, out grouper)) + { + return grouper; + } + else + { + return null; + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyGrouperDatabaseTemplate.txt.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyGrouperDatabaseTemplate.txt.meta new file mode 100644 index 0000000..1167151 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyGrouperDatabaseTemplate.txt.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7fcc5bff99ecd4843b766f23cd585b55 +timeCreated: 1508332899 +licenseType: Free +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyMetaDatabaseTemplate.txt b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyMetaDatabaseTemplate.txt new file mode 100644 index 0000000..d88bea4 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyMetaDatabaseTemplate.txt @@ -0,0 +1,31 @@ +// This class is auto generated + +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + public static class __classname__ + { + private static Dictionary metasByAttributeType; + + static __classname__() + { + metasByAttributeType = new Dictionary(); + __entries__ + } + + public static PropertyMeta GetMetaForAttribute(Type attributeType) + { + PropertyMeta meta; + if (metasByAttributeType.TryGetValue(attributeType, out meta)) + { + return meta; + } + else + { + return null; + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyMetaDatabaseTemplate.txt.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyMetaDatabaseTemplate.txt.meta new file mode 100644 index 0000000..849d247 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyMetaDatabaseTemplate.txt.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fde25cf95f45b50469fcf4ee1e38993c +timeCreated: 1508497401 +licenseType: Free +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyValidatorDatabaseTemplate.txt b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyValidatorDatabaseTemplate.txt new file mode 100644 index 0000000..2a63494 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyValidatorDatabaseTemplate.txt @@ -0,0 +1,31 @@ +// This class is auto generated + +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + public static class __classname__ + { + private static Dictionary validatorsByAttributeType; + + static __classname__() + { + validatorsByAttributeType = new Dictionary(); + __entries__ + } + + public static PropertyValidator GetValidatorForAttribute(Type attributeType) + { + PropertyValidator validator; + if (validatorsByAttributeType.TryGetValue(attributeType, out validator)) + { + return validator; + } + else + { + return null; + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyValidatorDatabaseTemplate.txt.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyValidatorDatabaseTemplate.txt.meta new file mode 100644 index 0000000..c0c96d4 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/Templates/PropertyValidatorDatabaseTemplate.txt.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a21c3d37c1492da4386198388150024c +timeCreated: 1508230862 +licenseType: Free +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Editors.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Editors.meta new file mode 100644 index 0000000..2c445db --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Editors.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4db73d2276d0e8144a206c5c2cd350de +folderAsset: yes +timeCreated: 1508055750 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Editors/InspectorEditor.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Editors/InspectorEditor.cs new file mode 100644 index 0000000..c593bf9 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Editors/InspectorEditor.cs @@ -0,0 +1,320 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEditor; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(UnityEngine.Object), true)] + public class InspectorEditor : UnityEditor.Editor + { + private SerializedProperty script; + + private IEnumerable fields; + private HashSet groupedFields; + private Dictionary> groupedFieldsByGroupName; + private IEnumerable nonSerializedFields; + private IEnumerable nativeProperties; + private IEnumerable methods; + + private Dictionary serializedPropertiesByFieldName; + + private bool useDefaultInspector; + + private void OnEnable() + { + this.script = this.serializedObject.FindProperty("m_Script"); + + // Cache serialized fields + this.fields = ReflectionUtility.GetAllFields(this.target, f => this.serializedObject.FindProperty(f.Name) != null); + + // If there are no NaughtyAttributes use default inspector + if (this.fields.All(f => f.GetCustomAttributes(typeof(NaughtyAttribute), true).Length == 0)) + { + this.useDefaultInspector = true; + } + else + { + this.useDefaultInspector = false; + + // Cache grouped fields + this.groupedFields = new HashSet(this.fields.Where(f => f.GetCustomAttributes(typeof(GroupAttribute), true).Length > 0)); + + // Cache grouped fields by group name + this.groupedFieldsByGroupName = new Dictionary>(); + foreach (var groupedField in this.groupedFields) + { + string groupName = (groupedField.GetCustomAttributes(typeof(GroupAttribute), true)[0] as GroupAttribute).Name; + + if (this.groupedFieldsByGroupName.ContainsKey(groupName)) + { + this.groupedFieldsByGroupName[groupName].Add(groupedField); + } + else + { + this.groupedFieldsByGroupName[groupName] = new List() + { + groupedField + }; + } + } + + // Cache serialized properties by field name + this.serializedPropertiesByFieldName = new Dictionary(); + foreach (var field in this.fields) + { + this.serializedPropertiesByFieldName[field.Name] = this.serializedObject.FindProperty(field.Name); + } + } + + // Cache non-serialized fields + this.nonSerializedFields = ReflectionUtility.GetAllFields( + this.target, f => f.GetCustomAttributes(typeof(DrawerAttribute), true).Length > 0 && this.serializedObject.FindProperty(f.Name) == null); + + // Cache the native properties + this.nativeProperties = ReflectionUtility.GetAllProperties( + this.target, p => p.GetCustomAttributes(typeof(DrawerAttribute), true).Length > 0); + + // Cache methods with DrawerAttribute + this.methods = ReflectionUtility.GetAllMethods( + this.target, m => m.GetCustomAttributes(typeof(DrawerAttribute), true).Length > 0); + } + + private void OnDisable() + { + PropertyDrawerDatabase.ClearCache(); + } + + public override void OnInspectorGUI() + { + if (this.useDefaultInspector) + { + this.DrawDefaultInspector(); + } + else + { + this.serializedObject.Update(); + + if (this.script != null) + { + GUI.enabled = false; + EditorGUILayout.PropertyField(this.script); + GUI.enabled = true; + } + + // Draw fields + HashSet drawnGroups = new HashSet(); + foreach (var field in this.fields) + { + if (this.groupedFields.Contains(field)) + { + // Draw grouped fields + string groupName = (field.GetCustomAttributes(typeof(GroupAttribute), true)[0] as GroupAttribute).Name; + if (!drawnGroups.Contains(groupName)) + { + drawnGroups.Add(groupName); + + PropertyGrouper grouper = this.GetPropertyGrouperForField(field); + if (grouper != null) + { + grouper.BeginGroup(groupName); + + this.ValidateAndDrawFields(this.groupedFieldsByGroupName[groupName]); + + grouper.EndGroup(); + } + else + { + this.ValidateAndDrawFields(this.groupedFieldsByGroupName[groupName]); + } + } + } + else + { + // Draw non-grouped field + this.ValidateAndDrawField(field); + } + } + + this.serializedObject.ApplyModifiedProperties(); + } + + // Draw non-serialized fields + foreach (var field in this.nonSerializedFields) + { + DrawerAttribute drawerAttribute = (DrawerAttribute)field.GetCustomAttributes(typeof(DrawerAttribute), true)[0]; + FieldDrawer drawer = FieldDrawerDatabase.GetDrawerForAttribute(drawerAttribute.GetType()); + if (drawer != null) + { + drawer.DrawField(this.target, field); + } + } + + // Draw native properties + foreach (var property in this.nativeProperties) + { + DrawerAttribute drawerAttribute = (DrawerAttribute)property.GetCustomAttributes(typeof(DrawerAttribute), true)[0]; + NativePropertyDrawer drawer = NativePropertyDrawerDatabase.GetDrawerForAttribute(drawerAttribute.GetType()); + if (drawer != null) + { + drawer.DrawNativeProperty(this.target, property); + } + } + + // Draw methods + foreach (var method in this.methods) + { + DrawerAttribute drawerAttribute = (DrawerAttribute)method.GetCustomAttributes(typeof(DrawerAttribute), true)[0]; + MethodDrawer methodDrawer = MethodDrawerDatabase.GetDrawerForAttribute(drawerAttribute.GetType()); + if (methodDrawer != null) + { + methodDrawer.DrawMethod(this.target, method); + } + } + } + + private void ValidateAndDrawFields(IEnumerable fields) + { + foreach (var field in fields) + { + this.ValidateAndDrawField(field); + } + } + + private void ValidateAndDrawField(FieldInfo field) + { + this.ValidateField(field); + this.ApplyFieldMeta(field); + this.DrawField(field); + } + + private void ValidateField(FieldInfo field) + { + ValidatorAttribute[] validatorAttributes = (ValidatorAttribute[])field.GetCustomAttributes(typeof(ValidatorAttribute), true); + + foreach (var attribute in validatorAttributes) + { + PropertyValidator validator = PropertyValidatorDatabase.GetValidatorForAttribute(attribute.GetType()); + if (validator != null) + { + validator.ValidateProperty(this.serializedPropertiesByFieldName[field.Name]); + } + } + } + + private void DrawField(FieldInfo field) + { + // Check if the field has draw conditions + PropertyDrawCondition drawCondition = this.GetPropertyDrawConditionForField(field); + if (drawCondition != null) + { + bool canDrawProperty = drawCondition.CanDrawProperty(this.serializedPropertiesByFieldName[field.Name]); + if (!canDrawProperty) + { + return; + } + } + + // Check if the field has HideInInspectorAttribute + HideInInspector[] hideInInspectorAttributes = (HideInInspector[])field.GetCustomAttributes(typeof(HideInInspector), true); + if (hideInInspectorAttributes.Length > 0) + { + return; + } + + // Draw the field + EditorGUI.BeginChangeCheck(); + PropertyDrawer drawer = this.GetPropertyDrawerForField(field); + if (drawer != null) + { + drawer.DrawProperty(this.serializedPropertiesByFieldName[field.Name]); + } + else + { + EditorDrawUtility.DrawPropertyField(this.serializedPropertiesByFieldName[field.Name]); + } + + if (EditorGUI.EndChangeCheck()) + { + OnValueChangedAttribute[] onValueChangedAttributes = (OnValueChangedAttribute[])field.GetCustomAttributes(typeof(OnValueChangedAttribute), true); + foreach (var onValueChangedAttribute in onValueChangedAttributes) + { + PropertyMeta meta = PropertyMetaDatabase.GetMetaForAttribute(onValueChangedAttribute.GetType()); + if (meta != null) + { + meta.ApplyPropertyMeta(this.serializedPropertiesByFieldName[field.Name], onValueChangedAttribute); + } + } + } + } + + private void ApplyFieldMeta(FieldInfo field) + { + // Apply custom meta attributes + MetaAttribute[] metaAttributes = field + .GetCustomAttributes(typeof(MetaAttribute), true) + .Where(attr => attr.GetType() != typeof(OnValueChangedAttribute)) + .Select(obj => obj as MetaAttribute) + .ToArray(); + + Array.Sort(metaAttributes, (x, y) => + { + return x.Order - y.Order; + }); + + foreach (var metaAttribute in metaAttributes) + { + PropertyMeta meta = PropertyMetaDatabase.GetMetaForAttribute(metaAttribute.GetType()); + if (meta != null) + { + meta.ApplyPropertyMeta(this.serializedPropertiesByFieldName[field.Name], metaAttribute); + } + } + } + + private PropertyDrawer GetPropertyDrawerForField(FieldInfo field) + { + DrawerAttribute[] drawerAttributes = (DrawerAttribute[])field.GetCustomAttributes(typeof(DrawerAttribute), true); + if (drawerAttributes.Length > 0) + { + PropertyDrawer drawer = PropertyDrawerDatabase.GetDrawerForAttribute(drawerAttributes[0].GetType()); + return drawer; + } + else + { + return null; + } + } + + private PropertyGrouper GetPropertyGrouperForField(FieldInfo field) + { + GroupAttribute[] groupAttributes = (GroupAttribute[])field.GetCustomAttributes(typeof(GroupAttribute), true); + if (groupAttributes.Length > 0) + { + PropertyGrouper grouper = PropertyGrouperDatabase.GetGrouperForAttribute(groupAttributes[0].GetType()); + return grouper; + } + else + { + return null; + } + } + + private PropertyDrawCondition GetPropertyDrawConditionForField(FieldInfo field) + { + DrawConditionAttribute[] drawConditionAttributes = (DrawConditionAttribute[])field.GetCustomAttributes(typeof(DrawConditionAttribute), true); + if (drawConditionAttributes.Length > 0) + { + PropertyDrawCondition drawCondition = PropertyDrawConditionDatabase.GetDrawConditionForAttribute(drawConditionAttributes[0].GetType()); + return drawCondition; + } + else + { + return null; + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Editors/InspectorEditor.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Editors/InspectorEditor.cs.meta new file mode 100644 index 0000000..b623552 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Editors/InspectorEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 9e82d6d6926a6c74688e2787b37630d1 +timeCreated: 1508055750 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers.meta new file mode 100644 index 0000000..ed81436 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 79b05858e72c1b0498eca7954843c802 +folderAsset: yes +timeCreated: 1508835721 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/FieldDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/FieldDrawer.cs new file mode 100644 index 0000000..805a064 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/FieldDrawer.cs @@ -0,0 +1,9 @@ +using System.Reflection; + +namespace NaughtyAttributes.Editor +{ + public abstract class FieldDrawer + { + public abstract void DrawField(UnityEngine.Object target, FieldInfo field); + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/FieldDrawer.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/FieldDrawer.cs.meta new file mode 100644 index 0000000..789d479 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/FieldDrawer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 8949267118f232a4fbebd777de8ed6fe +timeCreated: 1508835721 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/ShowNonSerializedFieldFieldDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/ShowNonSerializedFieldFieldDrawer.cs new file mode 100644 index 0000000..f057d1f --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/ShowNonSerializedFieldFieldDrawer.cs @@ -0,0 +1,20 @@ +using System.Reflection; +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + [FieldDrawer(typeof(ShowNonSerializedFieldAttribute))] + public class ShowNonSerializedFieldFieldDrawer : FieldDrawer + { + public override void DrawField(UnityEngine.Object target, FieldInfo field) + { + object value = field.GetValue(target); + + if (!EditorDrawUtility.DrawLayoutField(value, field.Name, field.FieldType)) + { + string warning = string.Format("{0} doesn't support {1} types", typeof(ShowNonSerializedFieldFieldDrawer).Name, field.FieldType.Name); + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: target); + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/ShowNonSerializedFieldFieldDrawer.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/ShowNonSerializedFieldFieldDrawer.cs.meta new file mode 100644 index 0000000..fa3410c --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/ShowNonSerializedFieldFieldDrawer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 8449d5c2158e97d479caaec24c61baec +timeCreated: 1508835721 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers.meta new file mode 100644 index 0000000..7e351e2 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f95312994b1f8c746a402669cb1655eb +folderAsset: yes +timeCreated: 1508592494 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers/ButtonMethodDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers/ButtonMethodDrawer.cs new file mode 100644 index 0000000..8d2d8df --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers/ButtonMethodDrawer.cs @@ -0,0 +1,29 @@ +using System.Reflection; +using UnityEditor; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + [MethodDrawer(typeof(ButtonAttribute))] + public class ButtonMethodDrawer : MethodDrawer + { + public override void DrawMethod(UnityEngine.Object target, MethodInfo methodInfo) + { + if (methodInfo.GetParameters().Length == 0) + { + ButtonAttribute buttonAttribute = (ButtonAttribute)methodInfo.GetCustomAttributes(typeof(ButtonAttribute), true)[0]; + string buttonText = string.IsNullOrEmpty(buttonAttribute.Text) ? methodInfo.Name : buttonAttribute.Text; + + if (GUILayout.Button(buttonText)) + { + methodInfo.Invoke(target, null); + } + } + else + { + string warning = typeof(ButtonAttribute).Name + " works only on methods with no parameters"; + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: target); + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers/ButtonMethodDrawer.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers/ButtonMethodDrawer.cs.meta new file mode 100644 index 0000000..cff17a7 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers/ButtonMethodDrawer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ad01ec1a22422c6409f913d60ce39d61 +timeCreated: 1508592494 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers/MethodDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers/MethodDrawer.cs new file mode 100644 index 0000000..687688d --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers/MethodDrawer.cs @@ -0,0 +1,9 @@ +using System.Reflection; + +namespace NaughtyAttributes.Editor +{ + public abstract class MethodDrawer + { + public abstract void DrawMethod(UnityEngine.Object target, MethodInfo methodInfo); + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers/MethodDrawer.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers/MethodDrawer.cs.meta new file mode 100644 index 0000000..22137e5 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/MethodDrawers/MethodDrawer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a65a1addcdd323249b590f7a06110869 +timeCreated: 1508592494 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers.meta new file mode 100644 index 0000000..665bbfc --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ae67cc6bfa799f147968e9b0371a21fc +folderAsset: yes +timeCreated: 1510924467 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/NativePropertyDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/NativePropertyDrawer.cs new file mode 100644 index 0000000..0fb0e6b --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/NativePropertyDrawer.cs @@ -0,0 +1,9 @@ +using System.Reflection; + +namespace NaughtyAttributes.Editor +{ + public abstract class NativePropertyDrawer + { + public abstract void DrawNativeProperty(UnityEngine.Object target, PropertyInfo property); + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/NativePropertyDrawer.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/NativePropertyDrawer.cs.meta new file mode 100644 index 0000000..897323c --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/NativePropertyDrawer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 715c5ada29663a245b0b35937c892377 +timeCreated: 1510924467 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/ShowNativePropertyNativePropertyDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/ShowNativePropertyNativePropertyDrawer.cs new file mode 100644 index 0000000..2352cda --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/ShowNativePropertyNativePropertyDrawer.cs @@ -0,0 +1,20 @@ +using System.Reflection; +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + [NativePropertyDrawer(typeof(ShowNativePropertyAttribute))] + public class ShowNativePropertyNativePropertyDrawer : NativePropertyDrawer + { + public override void DrawNativeProperty(UnityEngine.Object target, PropertyInfo property) + { + object value = property.GetValue(target, null); + + if (!EditorDrawUtility.DrawLayoutField(value, property.Name, property.PropertyType)) + { + string warning = string.Format("{0} doesn't support {1} types", typeof(ShowNativePropertyNativePropertyDrawer).Name, property.PropertyType.Name); + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: target); + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/ShowNativePropertyNativePropertyDrawer.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/ShowNativePropertyNativePropertyDrawer.cs.meta new file mode 100644 index 0000000..9b1f424 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/ShowNativePropertyNativePropertyDrawer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 518b0fde2a9d15d498bc17fd1d7062c7 +timeCreated: 1510926376 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NaughtyAttributes.Editor.asmdef b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NaughtyAttributes.Editor.asmdef new file mode 100644 index 0000000..44eaead --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NaughtyAttributes.Editor.asmdef @@ -0,0 +1,12 @@ +{ + "name": "NaughtyAttributes.Editor", + "references": [ + "NaughtyAttributes" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false +} \ No newline at end of file diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NaughtyAttributes.Editor.asmdef.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NaughtyAttributes.Editor.asmdef.meta new file mode 100644 index 0000000..f53287c --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NaughtyAttributes.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7f264d010c5f90a46beaf273bbb85ac2 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions.meta new file mode 100644 index 0000000..6742dcd --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0ed2b7d432f0ad644b1f0752cf65aa9c +folderAsset: yes +timeCreated: 1508414568 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/HideIfPropertyDrawCondition.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/HideIfPropertyDrawCondition.cs new file mode 100644 index 0000000..04c359e --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/HideIfPropertyDrawCondition.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + [PropertyDrawCondition(typeof(HideIfAttribute))] + public class HideIfPropertyDrawCondition : PropertyDrawCondition + { + public override bool CanDrawProperty(SerializedProperty property) + { + HideIfAttribute hideIfAttribute = PropertyUtility.GetAttribute(property); + UnityEngine.Object target = PropertyUtility.GetTargetObject(property); + + FieldInfo conditionField = ReflectionUtility.GetField(target, hideIfAttribute.ConditionName); + if (conditionField != null && + conditionField.FieldType == typeof(bool)) + { + return !(bool)conditionField.GetValue(target); + } + + MethodInfo conditionMethod = ReflectionUtility.GetMethod(target, hideIfAttribute.ConditionName); + if (conditionMethod != null && + conditionMethod.ReturnType == typeof(bool) && + conditionMethod.GetParameters().Length == 0) + { + return !(bool)conditionMethod.Invoke(target, null); + } + + string warning = hideIfAttribute.GetType().Name + " needs a valid boolean condition field or method name to work"; + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: target); + + return true; + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/HideIfPropertyDrawCondition.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/HideIfPropertyDrawCondition.cs.meta new file mode 100644 index 0000000..2b7cd1d --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/HideIfPropertyDrawCondition.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: f7e60d80f0231654ab13cfb1178e6eb8 +timeCreated: 1508414568 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/PropertyDrawCondition.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/PropertyDrawCondition.cs new file mode 100644 index 0000000..2ea9f7a --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/PropertyDrawCondition.cs @@ -0,0 +1,9 @@ +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + public abstract class PropertyDrawCondition + { + public abstract bool CanDrawProperty(SerializedProperty property); + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/PropertyDrawCondition.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/PropertyDrawCondition.cs.meta new file mode 100644 index 0000000..f326b5d --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/PropertyDrawCondition.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ce2d1d9afa04cae43a18bd01ec9447eb +timeCreated: 1508414568 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/ShowIfPropertyDrawCondition.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/ShowIfPropertyDrawCondition.cs new file mode 100644 index 0000000..503ecfc --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/ShowIfPropertyDrawCondition.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + [PropertyDrawCondition(typeof(ShowIfAttribute))] + public class ShowIfPropertyDrawCondition : PropertyDrawCondition + { + public override bool CanDrawProperty(SerializedProperty property) + { + ShowIfAttribute showIfAttribute = PropertyUtility.GetAttribute(property); + UnityEngine.Object target = PropertyUtility.GetTargetObject(property); + + FieldInfo conditionField = ReflectionUtility.GetField(target, showIfAttribute.ConditionName); + if (conditionField != null && + conditionField.FieldType == typeof(bool)) + { + return (bool)conditionField.GetValue(target); + } + + MethodInfo conditionMethod = ReflectionUtility.GetMethod(target, showIfAttribute.ConditionName); + if (conditionMethod != null && + conditionMethod.ReturnType == typeof(bool) && + conditionMethod.GetParameters().Length == 0) + { + return (bool)conditionMethod.Invoke(target, null); + } + + string warning = showIfAttribute.GetType().Name + " needs a valid boolean condition field or method name to work"; + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: target); + + return true; + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/ShowIfPropertyDrawCondition.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/ShowIfPropertyDrawCondition.cs.meta new file mode 100644 index 0000000..2e7a555 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawConditions/ShowIfPropertyDrawCondition.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: fce0c8241476ad94cbbcdd6faae90700 +timeCreated: 1508414568 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers.meta new file mode 100644 index 0000000..7f3a245 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4327d74fca5deaa4c83c483fe468d274 +folderAsset: yes +timeCreated: 1508051576 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DisableIfPropertyDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DisableIfPropertyDrawer.cs new file mode 100644 index 0000000..86e5bb9 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DisableIfPropertyDrawer.cs @@ -0,0 +1,48 @@ +using System.Reflection; +using UnityEditor; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + [PropertyDrawer(typeof(DisableIfAttribute))] + public class DisableIfPropertyDrawer : PropertyDrawer + { + public override void DrawProperty(SerializedProperty property) + { + bool drawDisabled = false; + bool validCondition = false; + + DisableIfAttribute disableIfAttribute = PropertyUtility.GetAttribute(property); + UnityEngine.Object target = PropertyUtility.GetTargetObject(property); + + FieldInfo conditionField = ReflectionUtility.GetField(target, disableIfAttribute.ConditionName); + if (conditionField != null && + conditionField.FieldType == typeof(bool)) + { + drawDisabled = (bool)conditionField.GetValue(target); + validCondition = true; + } + + MethodInfo conditionMethod = ReflectionUtility.GetMethod(target, disableIfAttribute.ConditionName); + if (conditionMethod != null && + conditionMethod.ReturnType == typeof(bool) && + conditionMethod.GetParameters().Length == 0) + { + drawDisabled = (bool)conditionMethod.Invoke(target, null); + validCondition = true; + } + + if (validCondition) + { + GUI.enabled = !drawDisabled; + EditorDrawUtility.DrawPropertyField(property); + GUI.enabled = true; + } + else + { + string warning = disableIfAttribute.GetType().Name + " needs a valid boolean condition field or method name to work"; + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: target); + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DisableIfPropertyDrawer.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DisableIfPropertyDrawer.cs.meta new file mode 100644 index 0000000..579b0a4 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DisableIfPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6093965e939dcd24687aed40741be04b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DropdownPropertyDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DropdownPropertyDrawer.cs new file mode 100644 index 0000000..f7ac834 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DropdownPropertyDrawer.cs @@ -0,0 +1,130 @@ +using UnityEngine; +using UnityEditor; +using System.Reflection; +using System.Collections; +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + [PropertyDrawer(typeof(DropdownAttribute))] + public class DropdownPropertyDrawer : PropertyDrawer + { + public override void DrawProperty(SerializedProperty property) + { + EditorDrawUtility.DrawHeader(property); + + DropdownAttribute dropdownAttribute = PropertyUtility.GetAttribute(property); + UnityEngine.Object target = PropertyUtility.GetTargetObject(property); + + FieldInfo fieldInfo = ReflectionUtility.GetField(target, property.name); + FieldInfo valuesFieldInfo = ReflectionUtility.GetField(target, dropdownAttribute.ValuesFieldName); + + if (valuesFieldInfo == null) + { + this.DrawWarningBox(string.Format("{0} cannot find a values field with name \"{1}\"", dropdownAttribute.GetType().Name, dropdownAttribute.ValuesFieldName)); + EditorGUILayout.PropertyField(property, true); + } + else if (valuesFieldInfo.GetValue(target) is IList && + fieldInfo.FieldType == this.GetElementType(valuesFieldInfo)) + { + // Selected value + object selectedValue = fieldInfo.GetValue(target); + + // Values and display options + IList valuesList = (IList)valuesFieldInfo.GetValue(target); + object[] values = new object[valuesList.Count]; + string[] displayOptions = new string[valuesList.Count]; + + for (int i = 0; i < values.Length; i++) + { + object value = valuesList[i]; + values[i] = value; + displayOptions[i] = value.ToString(); + } + + // Selected value index + int selectedValueIndex = Array.IndexOf(values, selectedValue); + if (selectedValueIndex < 0) + { + selectedValueIndex = 0; + } + + // Draw the dropdown + this.DrawDropdown(target, fieldInfo, property.displayName, selectedValueIndex, values, displayOptions); + } + else if (valuesFieldInfo.GetValue(target) is IDropdownList) + { + // Current value + object selectedValue = fieldInfo.GetValue(target); + + // Current value index, values and display options + IDropdownList dropdown = (IDropdownList)valuesFieldInfo.GetValue(target); + IEnumerator> dropdownEnumerator = dropdown.GetEnumerator(); + + int index = -1; + int selectedValueIndex = -1; + List values = new List(); + List displayOptions = new List(); + + while (dropdownEnumerator.MoveNext()) + { + index++; + + KeyValuePair current = dropdownEnumerator.Current; + if (current.Value.Equals(selectedValue)) + { + selectedValueIndex = index; + } + + values.Add(current.Value); + displayOptions.Add(current.Key); + } + + if (selectedValueIndex < 0) + { + selectedValueIndex = 0; + } + + // Draw the dropdown + this.DrawDropdown(target, fieldInfo, property.displayName, selectedValueIndex, values.ToArray(), displayOptions.ToArray()); + } + else + { + this.DrawWarningBox(typeof(DropdownAttribute).Name + " works only when the type of the field is equal to the element type of the array"); + EditorGUILayout.PropertyField(property, true); + } + } + + private Type GetElementType(FieldInfo listFieldInfo) + { + if (listFieldInfo.FieldType.IsGenericType) + { + return listFieldInfo.FieldType.GetGenericArguments()[0]; + } + else + { + return listFieldInfo.FieldType.GetElementType(); + } + } + + private void DrawDropdown(UnityEngine.Object target, FieldInfo fieldInfo, string label, int selectedValueIndex, object[] values, string[] displayOptions) + { + EditorGUI.BeginChangeCheck(); + + int newIndex = EditorGUILayout.Popup(label, selectedValueIndex, displayOptions); + + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(target, "Dropdown"); + fieldInfo.SetValue(target, values[newIndex]); + } + } + + private void DrawWarningBox(string message) + { + EditorGUILayout.HelpBox(message, MessageType.Warning); + Debug.LogWarning(message); + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DropdownPropertyDrawer.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DropdownPropertyDrawer.cs.meta new file mode 100644 index 0000000..eb68163 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DropdownPropertyDrawer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 19d935f1205a5804c80c51c3ad95a271 +timeCreated: 1508753698 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnableIfPropertyDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnableIfPropertyDrawer.cs new file mode 100644 index 0000000..ece692a --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnableIfPropertyDrawer.cs @@ -0,0 +1,48 @@ +using System.Reflection; +using UnityEditor; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + [PropertyDrawer(typeof(EnableIfAttribute))] + public class EnableIfPropertyDrawer : PropertyDrawer + { + public override void DrawProperty(SerializedProperty property) + { + bool drawEnabled = false; + bool validCondition = false; + + EnableIfAttribute enableIfAttribute = PropertyUtility.GetAttribute(property); + UnityEngine.Object target = PropertyUtility.GetTargetObject(property); + + FieldInfo conditionField = ReflectionUtility.GetField(target, enableIfAttribute.ConditionName); + if (conditionField != null && + conditionField.FieldType == typeof(bool)) + { + drawEnabled = (bool)conditionField.GetValue(target); + validCondition = true; + } + + MethodInfo conditionMethod = ReflectionUtility.GetMethod(target, enableIfAttribute.ConditionName); + if (conditionMethod != null && + conditionMethod.ReturnType == typeof(bool) && + conditionMethod.GetParameters().Length == 0) + { + drawEnabled = (bool)conditionMethod.Invoke(target, null); + validCondition = true; + } + + if (validCondition) + { + GUI.enabled = drawEnabled; + EditorDrawUtility.DrawPropertyField(property); + GUI.enabled = true; + } + else + { + string warning = enableIfAttribute.GetType().Name + " needs a valid boolean condition field or method name to work"; + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: target); + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnableIfPropertyDrawer.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnableIfPropertyDrawer.cs.meta new file mode 100644 index 0000000..9b1abe6 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnableIfPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 36d4c9f730abf4945814f7e205003836 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/MinMaxSliderPropertyDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/MinMaxSliderPropertyDrawer.cs new file mode 100644 index 0000000..1031ebb --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/MinMaxSliderPropertyDrawer.cs @@ -0,0 +1,76 @@ +using UnityEngine; +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + [PropertyDrawer(typeof(MinMaxSliderAttribute))] + public class MinMaxSliderPropertyDrawer : PropertyDrawer + { + public override void DrawProperty(SerializedProperty property) + { + EditorDrawUtility.DrawHeader(property); + + MinMaxSliderAttribute minMaxSliderAttribute = PropertyUtility.GetAttribute(property); + + if (property.propertyType == SerializedPropertyType.Vector2) + { + Rect controlRect = EditorGUILayout.GetControlRect(); + float labelWidth = EditorGUIUtility.labelWidth; + float floatFieldWidth = EditorGUIUtility.fieldWidth; + float sliderWidth = controlRect.width - labelWidth - 2f * floatFieldWidth; + float sliderPadding = 5f; + + Rect labelRect = new Rect( + controlRect.x, + controlRect.y, + labelWidth, + controlRect.height); + + Rect sliderRect = new Rect( + controlRect.x + labelWidth + floatFieldWidth + sliderPadding, + controlRect.y, + sliderWidth - 2f * sliderPadding, + controlRect.height); + + Rect minFloatFieldRect = new Rect( + controlRect.x + labelWidth, + controlRect.y, + floatFieldWidth, + controlRect.height); + + Rect maxFloatFieldRect = new Rect( + controlRect.x + labelWidth + floatFieldWidth + sliderWidth, + controlRect.y, + floatFieldWidth, + controlRect.height); + + // Draw the label + EditorGUI.LabelField(labelRect, property.displayName); + + // Draw the slider + EditorGUI.BeginChangeCheck(); + + Vector2 sliderValue = property.vector2Value; + EditorGUI.MinMaxSlider(sliderRect, ref sliderValue.x, ref sliderValue.y, minMaxSliderAttribute.MinValue, minMaxSliderAttribute.MaxValue); + + sliderValue.x = EditorGUI.FloatField(minFloatFieldRect, sliderValue.x); + sliderValue.x = Mathf.Clamp(sliderValue.x, minMaxSliderAttribute.MinValue, Mathf.Min(minMaxSliderAttribute.MaxValue, sliderValue.y)); + + sliderValue.y = EditorGUI.FloatField(maxFloatFieldRect, sliderValue.y); + sliderValue.y = Mathf.Clamp(sliderValue.y, Mathf.Max(minMaxSliderAttribute.MinValue, sliderValue.x), minMaxSliderAttribute.MaxValue); + + if (EditorGUI.EndChangeCheck()) + { + property.vector2Value = sliderValue; + } + } + else + { + string warning = minMaxSliderAttribute.GetType().Name + " can be used only on Vector2 fields"; + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: PropertyUtility.GetTargetObject(property)); + + EditorDrawUtility.DrawPropertyField(property); + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/MinMaxSliderPropertyDrawer.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/MinMaxSliderPropertyDrawer.cs.meta new file mode 100644 index 0000000..ca0af07 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/MinMaxSliderPropertyDrawer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 27011af81554b5b4489b155f09275475 +timeCreated: 1508427131 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ProgressBarPropertyDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ProgressBarPropertyDrawer.cs new file mode 100644 index 0000000..582f2b1 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ProgressBarPropertyDrawer.cs @@ -0,0 +1,96 @@ +using UnityEngine; +using UnityEditor; +using System; + +namespace NaughtyAttributes.Editor +{ + [PropertyDrawer(typeof(ProgressBarAttribute))] + public class ProgressBarPropertyDrawer : PropertyDrawer + { + public override void DrawProperty(SerializedProperty property) + { + EditorDrawUtility.DrawHeader(property); + + if (property.propertyType != SerializedPropertyType.Float && property.propertyType != SerializedPropertyType.Integer) + { + EditorGUILayout.HelpBox("Field " + property.name + " is not a number", MessageType.Warning); + return; + } + + var value = property.propertyType == SerializedPropertyType.Integer ? property.intValue : property.floatValue; + var valueFormatted = property.propertyType == SerializedPropertyType.Integer ? value.ToString() : String.Format("{0:0.00}", value); + + ProgressBarAttribute progressBarAttribute = PropertyUtility.GetAttribute(property); + var position = EditorGUILayout.GetControlRect(); + var maxValue = progressBarAttribute.MaxValue; + float lineHight = EditorGUIUtility.singleLineHeight; + float padding = EditorGUIUtility.standardVerticalSpacing; + var barPosition = new Rect(position.position.x, position.position.y, position.size.x, lineHight); + + var fillPercentage = value / maxValue; + var barLabel = (!string.IsNullOrEmpty(progressBarAttribute.Name) ? "[" + progressBarAttribute.Name + "] " : "") + valueFormatted + "/" + maxValue; + + var color = GetColor(progressBarAttribute.Color); + var color2 = Color.white; + DrawBar(barPosition, Mathf.Clamp01(fillPercentage), barLabel, color, color2); + } + + private void DrawBar(Rect position, float fillPercent, string label, Color barColor, Color labelColor) + { + if (Event.current.type != EventType.Repaint) + { + return; + } + + Color savedColor = GUI.color; + + var fillRect = new Rect(position.x, position.y, position.width * fillPercent, position.height); + + EditorGUI.DrawRect(position, new Color(0.13f, 0.13f, 0.13f)); + EditorGUI.DrawRect(fillRect, barColor); + + // set alignment and cache the default + var align = GUI.skin.label.alignment; + GUI.skin.label.alignment = TextAnchor.UpperCenter; + + // set the color and cache the default + var c = GUI.contentColor; + GUI.contentColor = labelColor; + + // calculate the position + var labelRect = new Rect(position.x, position.y - 2, position.width, position.height); + + // draw~ + EditorGUI.DropShadowLabel(labelRect, label); + + // reset color and alignment + GUI.contentColor = c; + GUI.skin.label.alignment = align; + } + + private Color GetColor(ProgressBarColor color) + { + switch (color) + { + case ProgressBarColor.Red: + return new Color32(255, 0, 63, 255); + case ProgressBarColor.Pink: + return new Color32(255, 152, 203, 255); + case ProgressBarColor.Orange: + return new Color32(255, 128, 0, 255); + case ProgressBarColor.Yellow: + return new Color32(255, 211, 0, 255); + case ProgressBarColor.Green: + return new Color32(102, 255, 0, 255); + case ProgressBarColor.Blue: + return new Color32(0, 135, 189, 255); + case ProgressBarColor.Indigo: + return new Color32(75, 0, 130, 255); + case ProgressBarColor.Violet: + return new Color32(127, 0, 255, 255); + default: + return Color.white; + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ProgressBarPropertyDrawer.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ProgressBarPropertyDrawer.cs.meta new file mode 100644 index 0000000..c7403f8 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ProgressBarPropertyDrawer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 47ba764aac86a4d488c8acd0af8f0d23 +timeCreated: 1518435237 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/PropertyDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/PropertyDrawer.cs new file mode 100644 index 0000000..762c30e --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/PropertyDrawer.cs @@ -0,0 +1,14 @@ +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + public abstract class PropertyDrawer + { + public abstract void DrawProperty(SerializedProperty property); + + public virtual void ClearCache() + { + + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/PropertyDrawer.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/PropertyDrawer.cs.meta new file mode 100644 index 0000000..276a963 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/PropertyDrawer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: fd2df67a49fb7bd4d8e3914c5a2cf4a8 +timeCreated: 1508051576 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReadOnlyPropertyDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReadOnlyPropertyDrawer.cs new file mode 100644 index 0000000..a255642 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReadOnlyPropertyDrawer.cs @@ -0,0 +1,16 @@ +using UnityEditor; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + [PropertyDrawer(typeof(ReadOnlyAttribute))] + public class ReadOnlyPropertyDrawer : PropertyDrawer + { + public override void DrawProperty(SerializedProperty property) + { + GUI.enabled = false; + EditorDrawUtility.DrawPropertyField(property); + GUI.enabled = true; + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReadOnlyPropertyDrawer.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReadOnlyPropertyDrawer.cs.meta new file mode 100644 index 0000000..aa80c05 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReadOnlyPropertyDrawer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a392efb1d44b30744bb7bf76e479cfab +timeCreated: 1508862451 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReorderableListPropertyDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReorderableListPropertyDrawer.cs new file mode 100644 index 0000000..5a7aa68 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReorderableListPropertyDrawer.cs @@ -0,0 +1,115 @@ +using System; +using UnityEngine; +using UnityEditor; +using UnityEditorInternal; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + [PropertyDrawer(typeof(ReorderableListAttribute))] + public class ReorderableListPropertyDrawer : PropertyDrawer + { + struct PropertyKey : IEquatable + { + readonly string fieldName; + readonly int instanceId; + readonly object sourceObject; + + public PropertyKey(SerializedProperty property) + { + fieldName = property.name; + if (property.propertyType == SerializedPropertyType.ObjectReference) + { + instanceId = property.objectReferenceInstanceIDValue; + } + else + { + instanceId = property.serializedObject?.GetHashCode() ?? 0; + } + sourceObject = property.serializedObject; + } + + public bool Equals(PropertyKey other) + { + return string.Equals(fieldName, other.fieldName) && instanceId == other.instanceId && Equals(sourceObject, other.sourceObject); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) + { + return false; + } + + return obj is PropertyKey && Equals((PropertyKey)obj); + } + + public override int GetHashCode() + { + unchecked + { + var hashCode = (fieldName != null ? fieldName.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ instanceId; + hashCode = (hashCode * 397) ^ (sourceObject != null ? sourceObject.GetHashCode() : 0); + return hashCode; + } + } + + public static bool operator ==(PropertyKey left, PropertyKey right) + { + return left.Equals(right); + } + + public static bool operator !=(PropertyKey left, PropertyKey right) + { + return !left.Equals(right); + } + } + + Dictionary reorderableListsByPropertyName = new Dictionary(); + + public override void DrawProperty(SerializedProperty property) + { + EditorDrawUtility.DrawHeader(property); + + if (property.isArray) + { + var propertyKey = new PropertyKey(property); + if (!this.reorderableListsByPropertyName.ContainsKey(propertyKey)) + { + ReorderableList reorderableList = new ReorderableList(property.serializedObject, property, true, true, true, true) + { + drawHeaderCallback = (Rect rect) => + { + EditorGUI.LabelField(rect, string.Format("{0}: {1}", property.displayName, property.arraySize), EditorStyles.label); + }, + + drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => + { + var element = property.GetArrayElementAtIndex(index); + rect.y += 2f; + + EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), element); + } + }; + + this.reorderableListsByPropertyName[propertyKey] = reorderableList; + } + + this.reorderableListsByPropertyName[propertyKey].DoLayoutList(); + } + else + { + string warning = typeof(ReorderableListAttribute).Name + " can be used only on arrays or lists"; + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: PropertyUtility.GetTargetObject(property)); + + EditorDrawUtility.DrawPropertyField(property); + } + } + + public override void ClearCache() + { + this.reorderableListsByPropertyName.Clear(); + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReorderableListPropertyDrawer.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReorderableListPropertyDrawer.cs.meta new file mode 100644 index 0000000..c06f619 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReorderableListPropertyDrawer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 6d5a6c66de03d1d4882f0c83b0e5f8f2 +timeCreated: 1508402303 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ResizableTextAreaPropertyDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ResizableTextAreaPropertyDrawer.cs new file mode 100644 index 0000000..cacffb1 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ResizableTextAreaPropertyDrawer.cs @@ -0,0 +1,35 @@ +using UnityEngine; +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + [PropertyDrawer(typeof(ResizableTextAreaAttribute))] + public class ResizableTextAreaPropertyDrawer : PropertyDrawer + { + public override void DrawProperty(SerializedProperty property) + { + EditorDrawUtility.DrawHeader(property); + + if (property.propertyType == SerializedPropertyType.String) + { + EditorGUILayout.LabelField(property.displayName); + + EditorGUI.BeginChangeCheck(); + + string textAreaValue = EditorGUILayout.TextArea(property.stringValue, GUILayout.MinHeight(EditorGUIUtility.singleLineHeight * 3f)); + + if (EditorGUI.EndChangeCheck()) + { + property.stringValue = textAreaValue; + } + } + else + { + string warning = PropertyUtility.GetAttribute(property).GetType().Name + " can only be used on string fields"; + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: PropertyUtility.GetTargetObject(property)); + + EditorDrawUtility.DrawPropertyField(property); + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ResizableTextAreaPropertyDrawer.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ResizableTextAreaPropertyDrawer.cs.meta new file mode 100644 index 0000000..898f9d2 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ResizableTextAreaPropertyDrawer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 57848d4e847a8d445a53095abdbbb274 +timeCreated: 1508583167 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ShowAssetPreviewPropertyDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ShowAssetPreviewPropertyDrawer.cs new file mode 100644 index 0000000..b548c18 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ShowAssetPreviewPropertyDrawer.cs @@ -0,0 +1,40 @@ +using UnityEngine; +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + [PropertyDrawer(typeof(ShowAssetPreviewAttribute))] + public class ShowAssetPreviewPropertyDrawer : PropertyDrawer + { + public override void DrawProperty(SerializedProperty property) + { + EditorDrawUtility.DrawPropertyField(property); + + if (property.propertyType == SerializedPropertyType.ObjectReference) + { + if (property.objectReferenceValue != null) + { + Texture2D previewTexture = AssetPreview.GetAssetPreview(property.objectReferenceValue); + if (previewTexture != null) + { + ShowAssetPreviewAttribute showAssetPreviewAttribute = PropertyUtility.GetAttribute(property); + int width = Mathf.Clamp(showAssetPreviewAttribute.Width, 0, previewTexture.width); + int height = Mathf.Clamp(showAssetPreviewAttribute.Height, 0, previewTexture.height); + + GUILayout.Label(previewTexture, GUILayout.MaxWidth(width), GUILayout.MaxHeight(height)); + } + else + { + string warning = property.name + " doesn't have an asset preview"; + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: PropertyUtility.GetTargetObject(property)); + } + } + } + else + { + string warning = property.name + " doesn't have an asset preview"; + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: PropertyUtility.GetTargetObject(property)); + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ShowAssetPreviewPropertyDrawer.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ShowAssetPreviewPropertyDrawer.cs.meta new file mode 100644 index 0000000..4c4b7c0 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ShowAssetPreviewPropertyDrawer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 6c461f4d7edd955419e5e6ce2c874599 +timeCreated: 1509089502 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/SliderPropertyDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/SliderPropertyDrawer.cs new file mode 100644 index 0000000..c466292 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/SliderPropertyDrawer.cs @@ -0,0 +1,31 @@ +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + [PropertyDrawer(typeof(SliderAttribute))] + public class SliderPropertyDrawer : PropertyDrawer + { + public override void DrawProperty(SerializedProperty property) + { + EditorDrawUtility.DrawHeader(property); + + SliderAttribute sliderAttribute = PropertyUtility.GetAttribute(property); + + if (property.propertyType == SerializedPropertyType.Integer) + { + EditorGUILayout.IntSlider(property, (int)sliderAttribute.MinValue, (int)sliderAttribute.MaxValue); + } + else if (property.propertyType == SerializedPropertyType.Float) + { + EditorGUILayout.Slider(property, sliderAttribute.MinValue, sliderAttribute.MaxValue); + } + else + { + string warning = sliderAttribute.GetType().Name + " can be used only on int or float fields"; + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: PropertyUtility.GetTargetObject(property)); + + EditorDrawUtility.DrawPropertyField(property); + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/SliderPropertyDrawer.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/SliderPropertyDrawer.cs.meta new file mode 100644 index 0000000..5aae3b0 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/SliderPropertyDrawer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ae129a284d179ae41b8ab20f506e5d99 +timeCreated: 1508422518 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers.meta new file mode 100644 index 0000000..d850feb --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 35fed6de66b90ad418e2ca247a303b9b +folderAsset: yes +timeCreated: 1508331735 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers/BoxGroupPropertyGrouper.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers/BoxGroupPropertyGrouper.cs new file mode 100644 index 0000000..e84eaf3 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers/BoxGroupPropertyGrouper.cs @@ -0,0 +1,24 @@ +using UnityEditor; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + [PropertyGrouper(typeof(BoxGroupAttribute))] + public class BoxGroupPropertyGrouper : PropertyGrouper + { + public override void BeginGroup(string label) + { + EditorGUILayout.BeginVertical(GUI.skin.box); + + if (!string.IsNullOrEmpty(label)) + { + EditorGUILayout.LabelField(label, EditorStyles.boldLabel); + } + } + + public override void EndGroup() + { + EditorGUILayout.EndVertical(); + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers/BoxGroupPropertyGrouper.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers/BoxGroupPropertyGrouper.cs.meta new file mode 100644 index 0000000..b11e43f --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers/BoxGroupPropertyGrouper.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 657c1fb836d709c4b964d04f07ddd047 +timeCreated: 1508332897 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers/PropertyGrouper.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers/PropertyGrouper.cs new file mode 100644 index 0000000..2e4492a --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers/PropertyGrouper.cs @@ -0,0 +1,11 @@ +using System; + +namespace NaughtyAttributes.Editor +{ + public abstract class PropertyGrouper + { + public abstract void BeginGroup(string label); + + public abstract void EndGroup(); + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers/PropertyGrouper.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers/PropertyGrouper.cs.meta new file mode 100644 index 0000000..1e2a88a --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyGroupers/PropertyGrouper.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 207d6d654fe48184c97a1c946d0ad8a4 +timeCreated: 1508331735 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas.meta new file mode 100644 index 0000000..58792a1 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 254c9f391295da84fb392b742e7fceae +folderAsset: yes +timeCreated: 1508497398 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/InfoBoxPropertyMeta.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/InfoBoxPropertyMeta.cs new file mode 100644 index 0000000..83fe0b7 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/InfoBoxPropertyMeta.cs @@ -0,0 +1,68 @@ +using System.Reflection; +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + [PropertyMeta(typeof(InfoBoxAttribute))] + public class InfoBoxPropertyMeta : PropertyMeta + { + public override void ApplyPropertyMeta(SerializedProperty property, MetaAttribute metaAttribute) + { + InfoBoxAttribute infoBoxAttribute = (InfoBoxAttribute)metaAttribute; + UnityEngine.Object target = PropertyUtility.GetTargetObject(property); + + if (!string.IsNullOrEmpty(infoBoxAttribute.VisibleIf)) + { + FieldInfo conditionField = ReflectionUtility.GetField(target, infoBoxAttribute.VisibleIf); + if (conditionField != null && + conditionField.FieldType == typeof(bool)) + { + if ((bool)conditionField.GetValue(target)) + { + this.DrawInfoBox(infoBoxAttribute.Text, infoBoxAttribute.Type); + } + + return; + } + + MethodInfo conditionMethod = ReflectionUtility.GetMethod(target, infoBoxAttribute.VisibleIf); + if (conditionMethod != null && + conditionMethod.ReturnType == typeof(bool) && + conditionMethod.GetParameters().Length == 0) + { + if ((bool)conditionMethod.Invoke(target, null)) + { + this.DrawInfoBox(infoBoxAttribute.Text, infoBoxAttribute.Type); + } + + return; + } + + string warning = infoBoxAttribute.GetType().Name + " needs a valid boolean condition field or method name to work"; + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: PropertyUtility.GetTargetObject(property)); + } + else + { + this.DrawInfoBox(infoBoxAttribute.Text, infoBoxAttribute.Type); + } + } + + private void DrawInfoBox(string infoText, InfoBoxType infoBoxType) + { + switch (infoBoxType) + { + case InfoBoxType.Normal: + EditorGUILayout.HelpBox(infoText, MessageType.Info); + break; + + case InfoBoxType.Warning: + EditorGUILayout.HelpBox(infoText, MessageType.Warning); + break; + + case InfoBoxType.Error: + EditorGUILayout.HelpBox(infoText, MessageType.Error); + break; + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/InfoBoxPropertyMeta.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/InfoBoxPropertyMeta.cs.meta new file mode 100644 index 0000000..bb4c001 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/InfoBoxPropertyMeta.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 998d996265069854eae8d1241df0c8aa +timeCreated: 1508607449 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/OnValueChangedPropertyMeta.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/OnValueChangedPropertyMeta.cs new file mode 100644 index 0000000..75303ce --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/OnValueChangedPropertyMeta.cs @@ -0,0 +1,31 @@ +using System.Reflection; +using UnityEditor; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + [PropertyMeta(typeof(OnValueChangedAttribute))] + public class OnValueChangedPropertyMeta : PropertyMeta + { + public override void ApplyPropertyMeta(SerializedProperty property, MetaAttribute metaAttribute) + { + OnValueChangedAttribute onValueChangedAttribute = (OnValueChangedAttribute)metaAttribute; + UnityEngine.Object target = PropertyUtility.GetTargetObject(property); + + MethodInfo callbackMethod = ReflectionUtility.GetMethod(target, onValueChangedAttribute.CallbackName); + if (callbackMethod != null && + callbackMethod.ReturnType == typeof(void) && + callbackMethod.GetParameters().Length == 0) + { + property.serializedObject.ApplyModifiedProperties(); // We must apply modifications so that the callback can be invoked with up-to-date data + + callbackMethod.Invoke(target, null); + } + else + { + string warning = onValueChangedAttribute.GetType().Name + " can invoke only action methods - with void return type and no parameters"; + Debug.LogWarning(warning, target); + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/OnValueChangedPropertyMeta.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/OnValueChangedPropertyMeta.cs.meta new file mode 100644 index 0000000..4c29909 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/OnValueChangedPropertyMeta.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a55050bf047356c49b1598f431d277e9 +timeCreated: 1508612140 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/PropertyMeta.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/PropertyMeta.cs new file mode 100644 index 0000000..3d9b499 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/PropertyMeta.cs @@ -0,0 +1,9 @@ +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + public abstract class PropertyMeta + { + public abstract void ApplyPropertyMeta(SerializedProperty property, MetaAttribute metaAttribute); + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/PropertyMeta.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/PropertyMeta.cs.meta new file mode 100644 index 0000000..831ab49 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyMetas/PropertyMeta.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 87cd72b1f8ad36840a07e1128f77ec5b +timeCreated: 1508497398 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators.meta new file mode 100644 index 0000000..6713dc9 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: efd539f7816167541ba63e633f2a9a7c +folderAsset: yes +timeCreated: 1508153828 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/MaxValuePropertyValidator.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/MaxValuePropertyValidator.cs new file mode 100644 index 0000000..84f54af --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/MaxValuePropertyValidator.cs @@ -0,0 +1,33 @@ +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + [PropertyValidator(typeof(MaxValueAttribute))] + public class MaxValuePropertyValidator : PropertyValidator + { + public override void ValidateProperty(SerializedProperty property) + { + MaxValueAttribute maxValueAttribute = PropertyUtility.GetAttribute(property); + + if (property.propertyType == SerializedPropertyType.Integer) + { + if (property.intValue > maxValueAttribute.MaxValue) + { + property.intValue = (int)maxValueAttribute.MaxValue; + } + } + else if (property.propertyType == SerializedPropertyType.Float) + { + if (property.floatValue > maxValueAttribute.MaxValue) + { + property.floatValue = maxValueAttribute.MaxValue; + } + } + else + { + string warning = maxValueAttribute.GetType().Name + " can be used only on int or float fields"; + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: PropertyUtility.GetTargetObject(property)); + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/MaxValuePropertyValidator.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/MaxValuePropertyValidator.cs.meta new file mode 100644 index 0000000..a11c91a --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/MaxValuePropertyValidator.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 84ddaea11c76b9c4f9a0b56dbab25b4c +timeCreated: 1508153828 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/MinValuePropertyValidator.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/MinValuePropertyValidator.cs new file mode 100644 index 0000000..0d20e46 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/MinValuePropertyValidator.cs @@ -0,0 +1,33 @@ +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + [PropertyValidator(typeof(MinValueAttribute))] + public class MinValuePropertyValidator : PropertyValidator + { + public override void ValidateProperty(SerializedProperty property) + { + MinValueAttribute minValueAttribute = PropertyUtility.GetAttribute(property); + + if (property.propertyType == SerializedPropertyType.Integer) + { + if (property.intValue < minValueAttribute.MinValue) + { + property.intValue = (int)minValueAttribute.MinValue; + } + } + else if (property.propertyType == SerializedPropertyType.Float) + { + if (property.floatValue < minValueAttribute.MinValue) + { + property.floatValue = minValueAttribute.MinValue; + } + } + else + { + string warning = minValueAttribute.GetType().Name + " can be used only on int or float fields"; + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: PropertyUtility.GetTargetObject(property)); + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/MinValuePropertyValidator.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/MinValuePropertyValidator.cs.meta new file mode 100644 index 0000000..929ac89 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/MinValuePropertyValidator.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 68add38e187dd154889b1e3b13247621 +timeCreated: 1508153828 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/PropertyValidator.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/PropertyValidator.cs new file mode 100644 index 0000000..c7380ea --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/PropertyValidator.cs @@ -0,0 +1,9 @@ +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + public abstract class PropertyValidator + { + public abstract void ValidateProperty(SerializedProperty property); + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/PropertyValidator.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/PropertyValidator.cs.meta new file mode 100644 index 0000000..56aca33 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/PropertyValidator.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 73502d09058a2e344a1eb20859d29203 +timeCreated: 1508153828 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/RequiredPropertyValidator.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/RequiredPropertyValidator.cs new file mode 100644 index 0000000..5180180 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/RequiredPropertyValidator.cs @@ -0,0 +1,32 @@ +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + [PropertyValidator(typeof(RequiredAttribute))] + public class RequiredPropertyValidator : PropertyValidator + { + public override void ValidateProperty(SerializedProperty property) + { + RequiredAttribute requiredAttribute = PropertyUtility.GetAttribute(property); + + if (property.propertyType == SerializedPropertyType.ObjectReference) + { + if (property.objectReferenceValue == null) + { + string errorMessage = property.name + " is required"; + if (!string.IsNullOrEmpty(requiredAttribute.Message)) + { + errorMessage = requiredAttribute.Message; + } + + EditorDrawUtility.DrawHelpBox(errorMessage, MessageType.Error, logToConsole: true, context: PropertyUtility.GetTargetObject(property)); + } + } + else + { + string warning = requiredAttribute.GetType().Name + " works only on reference types"; + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: PropertyUtility.GetTargetObject(property)); + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/RequiredPropertyValidator.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/RequiredPropertyValidator.cs.meta new file mode 100644 index 0000000..239c36c --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/RequiredPropertyValidator.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0675503782f800d4081737a5e41f9bf5 +timeCreated: 1508655546 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/ValidateInputPropertyValidator.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/ValidateInputPropertyValidator.cs new file mode 100644 index 0000000..352024d --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/ValidateInputPropertyValidator.cs @@ -0,0 +1,55 @@ +using System; +using System.Reflection; +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + [PropertyValidator(typeof(ValidateInputAttribute))] + public class ValidateInputPropertyValidator : PropertyValidator + { + public override void ValidateProperty(SerializedProperty property) + { + ValidateInputAttribute validateInputAttribute = PropertyUtility.GetAttribute(property); + UnityEngine.Object target = PropertyUtility.GetTargetObject(property); + + MethodInfo validationCallback = ReflectionUtility.GetMethod(target, validateInputAttribute.CallbackName); + + if (validationCallback != null && + validationCallback.ReturnType == typeof(bool) && + validationCallback.GetParameters().Length == 1) + { + FieldInfo fieldInfo = ReflectionUtility.GetField(target, property.name); + Type fieldType = fieldInfo.FieldType; + Type parameterType = validationCallback.GetParameters()[0].ParameterType; + + if (fieldType == parameterType) + { + if (!(bool)validationCallback.Invoke(target, new object[] { fieldInfo.GetValue(target) })) + { + if (string.IsNullOrEmpty(validateInputAttribute.Message)) + { + EditorDrawUtility.DrawHelpBox(property.name + " is not valid", MessageType.Error, logToConsole: true, context: target); + } + else + { + EditorDrawUtility.DrawHelpBox(validateInputAttribute.Message, MessageType.Error, logToConsole: true, context: target); + } + } + } + else + { + string warning = "The field type is not the same as the callback's parameter type"; + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: target); + } + } + else + { + string warning = + validateInputAttribute.GetType().Name + + " needs a callback with boolean return type and a single parameter of the same type as the field"; + + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: target); + } + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/ValidateInputPropertyValidator.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/ValidateInputPropertyValidator.cs.meta new file mode 100644 index 0000000..fb4a666 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/ValidateInputPropertyValidator.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 9b7357cef1466544aac67a1976ad9a18 +timeCreated: 1508657795 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility.meta new file mode 100644 index 0000000..ed16edd --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: acb4475c71a3fe947a81ced84ab89c6d +folderAsset: yes +timeCreated: 1508062761 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/EditorDrawUtility.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/EditorDrawUtility.cs new file mode 100644 index 0000000..f37d995 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/EditorDrawUtility.cs @@ -0,0 +1,145 @@ +using UnityEngine; +using UnityEditor; +using System; + +namespace NaughtyAttributes.Editor +{ + public static class EditorDrawUtility + { + public static void DrawHeader(string header) + { + EditorGUILayout.Space(); + EditorGUILayout.LabelField(header, EditorStyles.boldLabel); + } + + public static bool DrawHeader(SerializedProperty property) + { + HeaderAttribute headerAttr = PropertyUtility.GetAttribute(property); + if (headerAttr != null) + { + DrawHeader(headerAttr.header); + return true; + } + + return false; + } + + public static void DrawHelpBox(string message, MessageType type, bool logToConsole = false, UnityEngine.Object context = null) + { + EditorGUILayout.HelpBox(message, type); + + if (logToConsole) + { + switch (type) + { + case MessageType.None: + case MessageType.Info: + Debug.Log(message, context); + break; + case MessageType.Warning: + Debug.LogWarning(message, context); + break; + case MessageType.Error: + Debug.LogError(message, context); + break; + } + } + } + + public static void DrawPropertyField(SerializedProperty property, bool includeChildren = true) + { + EditorGUILayout.PropertyField(property, includeChildren); + } + + public static bool DrawLayoutField(object value, string label, Type targetType) + { + GUI.enabled = false; + + bool isDrawn = true; + Type valueType = value?.GetType() ?? targetType; + if (value != null) + { + if (valueType == typeof(bool)) + { + EditorGUILayout.Toggle(label, (bool) value); + } + else if (valueType == typeof(int)) + { + EditorGUILayout.IntField(label, (int) value); + } + else if (valueType == typeof(long)) + { + EditorGUILayout.LongField(label, (long) value); + } + else if (valueType == typeof(float)) + { + EditorGUILayout.FloatField(label, (float) value); + } + else if (valueType == typeof(double)) + { + EditorGUILayout.DoubleField(label, (double) value); + } + else if (valueType == typeof(string)) + { + EditorGUILayout.TextField(label, (string) value); + } + else if (valueType == typeof(Vector2)) + { + EditorGUILayout.Vector2Field(label, (Vector2) value); + } + else if (valueType == typeof(Vector3)) + { + EditorGUILayout.Vector3Field(label, (Vector3) value); + } + else if (valueType == typeof(Vector4)) + { + EditorGUILayout.Vector4Field(label, (Vector4) value); + } + else if (valueType == typeof(Color)) + { + EditorGUILayout.ColorField(label, (Color) value); + } + else if (valueType == typeof(Bounds)) + { + EditorGUILayout.BoundsField(label, (Bounds) value); + } + else if (valueType == typeof(Rect)) + { + EditorGUILayout.RectField(label, (Rect) value); + } + else if (valueType == typeof(Vector2)) + { + EditorGUILayout.Vector2Field(label, (Vector2) value); + } + else if (valueType == typeof(Vector3)) + { + EditorGUILayout.Vector3Field(label, (Vector3) value); + } + else if (valueType == typeof(Vector2Int)) + { + EditorGUILayout.Vector2IntField(label, (Vector2Int) value); + } + else if (valueType == typeof(Vector3Int)) + { + EditorGUILayout.Vector3IntField(label, (Vector3Int) value); + } + else if (typeof(UnityEngine.Object).IsAssignableFrom(valueType)) + { + EditorGUILayout.ObjectField(label, (UnityEngine.Object)value, valueType, true); + } + } + else if (typeof(UnityEngine.Object).IsAssignableFrom(valueType)) + { + EditorGUILayout.ObjectField(label, (UnityEngine.Object)value, valueType, true); + } + else + { + EditorGUILayout.TextField(label, $"{value}"); + } + + GUI.enabled = true; + + return isDrawn; + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/EditorDrawUtility.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/EditorDrawUtility.cs.meta new file mode 100644 index 0000000..704d3e5 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/EditorDrawUtility.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 6ff27ff7705d6064e935bb2159a1b453 +timeCreated: 1510926159 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/IOUtility.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/IOUtility.cs new file mode 100644 index 0000000..9872765 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/IOUtility.cs @@ -0,0 +1,49 @@ +using UnityEngine; +using System.IO; + +namespace NaughtyAttributes.Editor +{ + public static class IOUtility + { + public static string GetPersistentDataPath() + { + return Application.persistentDataPath + "/"; + } + + public static void WriteToFile(string filePath, string content) + { + using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write)) + { + using (StreamWriter streamWriter = new StreamWriter(fileStream, System.Text.Encoding.ASCII)) + { + streamWriter.WriteLine(content); + } + } + } + + public static string ReadFromFile(string filePath) + { + using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) + { + using (StreamReader streamReader = new StreamReader(fileStream, System.Text.Encoding.ASCII)) + { + string content = streamReader.ReadToEnd(); + return content; + } + } + } + + public static bool FileExists(string filePath) + { + return File.Exists(filePath); + } + + public static string GetPathRelativeToProjectFolder(string fullPath) + { + int indexOfAssetsWord = fullPath.IndexOf("\\Assets"); + string relativePath = fullPath.Substring(indexOfAssetsWord + 1); + + return relativePath; + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/IOUtility.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/IOUtility.cs.meta new file mode 100644 index 0000000..e8ab56a --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/IOUtility.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: bf376371b2951274e823154c03f066e2 +timeCreated: 1508232215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/PropertyUtility.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/PropertyUtility.cs new file mode 100644 index 0000000..fa8051c --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/PropertyUtility.cs @@ -0,0 +1,27 @@ +using UnityEditor; +using System; +using System.Reflection; + +namespace NaughtyAttributes.Editor +{ + public static class PropertyUtility + { + public static T GetAttribute(SerializedProperty property) where T : Attribute + { + T[] attributes = GetAttributes(property); + return attributes.Length > 0 ? attributes[0] : null; + } + + public static T[] GetAttributes(SerializedProperty property) where T : Attribute + { + FieldInfo fieldInfo = ReflectionUtility.GetField(GetTargetObject(property), property.name); + + return (T[])fieldInfo.GetCustomAttributes(typeof(T), true); + } + + public static UnityEngine.Object GetTargetObject(SerializedProperty property) + { + return property.serializedObject.targetObject; + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/PropertyUtility.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/PropertyUtility.cs.meta new file mode 100644 index 0000000..fad8d5b --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/PropertyUtility.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e2d50a3c7c8a9754cb3936216494be66 +timeCreated: 1508153828 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/ReflectionUtility.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/ReflectionUtility.cs new file mode 100644 index 0000000..f1df8a4 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/ReflectionUtility.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +namespace NaughtyAttributes.Editor +{ + public static class ReflectionUtility + { + public static IEnumerable GetAllFields(object target, Func predicate) + { + List types = new List() + { + target.GetType() + }; + + while (types.Last().BaseType != null) + { + types.Add(types.Last().BaseType); + } + + for (int i = types.Count - 1; i >= 0; i--) + { + IEnumerable fieldInfos = types[i] + .GetFields(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.DeclaredOnly) + .Where(predicate); + + foreach (var fieldInfo in fieldInfos) + { + yield return fieldInfo; + } + } + } + + public static IEnumerable GetAllProperties(object target, Func predicate) + { + List types = new List() + { + target.GetType() + }; + + while (types.Last().BaseType != null) + { + types.Add(types.Last().BaseType); + } + + for (int i = types.Count - 1; i >= 0; i--) + { + IEnumerable propertyInfos = types[i] + .GetProperties(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.DeclaredOnly) + .Where(predicate); + + foreach (var propertyInfo in propertyInfos) + { + yield return propertyInfo; + } + } + } + + public static IEnumerable GetAllMethods(object target, Func predicate) + { + IEnumerable methodInfos = target.GetType() + .GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public) + .Where(predicate); + + return methodInfos; + } + + public static FieldInfo GetField(object target, string fieldName) + { + return GetAllFields(target, f => f.Name.Equals(fieldName, StringComparison.InvariantCulture)).FirstOrDefault(); + } + + public static PropertyInfo GetProperty(object target, string propertyName) + { + return GetAllProperties(target, p => p.Name.Equals(propertyName, StringComparison.InvariantCulture)).FirstOrDefault(); + } + + public static MethodInfo GetMethod(object target, string methodName) + { + return GetAllMethods(target, m => m.Name.Equals(methodName, StringComparison.InvariantCulture)).FirstOrDefault(); + } + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/ReflectionUtility.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/ReflectionUtility.cs.meta new file mode 100644 index 0000000..73b6ea9 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Utility/ReflectionUtility.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 1d86c581f02a55f458e36bf7e81e3084 +timeCreated: 1520258793 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Test.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Test.meta new file mode 100644 index 0000000..6eca4f6 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Test.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ce2bd76b5676a434bb8a84254f67f1dc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyAttributes.Test.asmdef b/Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyAttributes.Test.asmdef new file mode 100644 index 0000000..37eea20 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyAttributes.Test.asmdef @@ -0,0 +1,10 @@ +{ + "name": "NaughtyAttributes.Test", + "references": [ + "NaughtyAttributes" + ], + "optionalUnityReferences": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false +} \ No newline at end of file diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyAttributes.Test.asmdef.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyAttributes.Test.asmdef.meta new file mode 100644 index 0000000..9f07c4c --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyAttributes.Test.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 82c1e45a5287b2a4caf5433640542667 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyComponent.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyComponent.cs new file mode 100644 index 0000000..7c760a8 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyComponent.cs @@ -0,0 +1,157 @@ +using NaughtyAttributes; +using System.Collections.Generic; +using UnityEngine; + +public class NaughtyComponent : MonoBehaviour +{ + [BoxGroup("Sliders")] + [Slider(0, 10)] + public int intSlider; + + [BoxGroup("Sliders")] + [Slider(0.0f, 10.0f)] + public float floatSlider; + + [BoxGroup("Sliders")] + [MinMaxSlider(0.0f, 100.0f)] + public Vector2 minMaxSlider; + + [BoxGroup("Reorderable Lists")] + [ReorderableList] + public int[] intArray; + + [BoxGroup("Reorderable Lists")] + [ReorderableList] + public List vectorList; + + [BoxGroup("Dropdowns")] + [Dropdown("intValues")] + public int intValue; + + [BoxGroup("Dropdowns")] + [Dropdown("stringValues")] + public string stringValue; + + [BoxGroup("Dropdowns")] + [Dropdown("vectorValues")] + public Vector3 vectorValue; + +#pragma warning disable 414 + private int[] intValues = new int[] { 1, 2, 3 }; + + private List stringValues = new List() { "A", "B", "C" }; + + private DropdownList vectorValues = new DropdownList() + { + { "Right", Vector3.right }, + { "Up", Vector3.up }, + { "Forward", Vector3.forward } + }; +#pragma warning restore 414 + + [ResizableTextArea] + public string textArea; + +#pragma warning disable 414 + [ShowNonSerializedField] + private int myInt = 10; + + [ShowNonSerializedField] + private const float PI = 3.14159f; + + [ShowNonSerializedField] + private static readonly Vector3 CONST_VECTOR = Vector3.one; +#pragma warning restore 414 + + [ShowNativeProperty] + public Transform Transform + { + get + { + return this.transform; + } + } + + [ReadOnly] + public int readOnlyInt = 5; + + public bool enableInt = true; + + [EnableIf("enableInt")] + public int enableIf; + + [DisableIf("enableInt")] + public int disabledIf; + + [EnableIf("ReturnTrue")] + public int enabledInt; + + [DisableIf("ReturnTrue")] + public int disabledInt; + + public bool showInt = true; + + [ShowIf("showInt")] + public int showIf; + + [HideIf("showInt")] + public int hideIf; + + [ShowIf("ReturnTrue")] + public int shownInt; + + [HideIf("ReturnTrue")] + public int hiddenInt; + + [ShowAssetPreview] + public Sprite sprite; + + [ShowAssetPreview(96, 96)] + public GameObject prefab; + + [ProgressBar("Health", 100, ProgressBarColor.Orange)] + public float health = 50; + + [MinValue(0.0f), MaxValue(1.0f)] + public float minMaxValidated; + + [Required] + public Transform requiredTransform; + + [Required("Must not be null")] + public GameObject requiredGameObject; + + [ValidateInput("IsNotNull", "must not be null")] + public Sprite notNullSprite; + + [InfoBox("Has onValueChanged callback")] + [OnValueChanged("OnValueChanged")] + public int onValueChanged; + + [Button] + public void MethodOne() + { + Debug.Log("MethodOne()"); + } + + [Button("Button Text")] + private void MethodTwo() + { + Debug.Log("MethodTwo()"); + } + + private bool ReturnTrue() + { + return true; + } + + private bool IsNotNull(Sprite sprite) + { + return sprite != null; + } + + private void OnValueChanged() + { + Debug.Log(this.onValueChanged); + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyComponent.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyComponent.cs.meta new file mode 100644 index 0000000..5702f19 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyComponent.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 9c928ea15ae74a44089beb2e534c1a35 +timeCreated: 1507996629 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyScriptableObject.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyScriptableObject.cs new file mode 100644 index 0000000..859b76d --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyScriptableObject.cs @@ -0,0 +1,157 @@ +using UnityEngine; +using NaughtyAttributes; +using System.Collections.Generic; + +[CreateAssetMenu(fileName = "NaughtyScriptableObject", menuName = "NaughtyAttributes/NaughtyScriptableObject")] +public class NaughtyScriptableObject : ScriptableObject +{ + [BoxGroup("Sliders")] + [Slider(0, 10)] + public int intSlider; + + [BoxGroup("Sliders")] + [Slider(0.0f, 10.0f)] + public float floatSlider; + + [BoxGroup("Sliders")] + [MinMaxSlider(0.0f, 100.0f)] + public Vector2 minMaxSlider; + + [BoxGroup("Reorderable Lists")] + [ReorderableList] + public int[] intArray; + + [BoxGroup("Reorderable Lists")] + [ReorderableList] + public List vectorList; + + [BoxGroup("Dropdowns")] + [Dropdown("intValues")] + public int intValue; + + [BoxGroup("Dropdowns")] + [Dropdown("stringValues")] + public string stringValue; + + [BoxGroup("Dropdowns")] + [Dropdown("vectorValues")] + public Vector3 vectorValue; + +#pragma warning disable 414 + private int[] intValues = new int[] { 1, 2, 3 }; + + private List stringValues = new List() { "A", "B", "C" }; + + private DropdownList vectorValues = new DropdownList() + { + { "Right", Vector3.right }, + { "Up", Vector3.up }, + { "Forward", Vector3.forward } + }; +#pragma warning restore 414 + + [ResizableTextArea] + public string textArea; + +#pragma warning disable 414 + [ShowNonSerializedField] + private int myInt = 10; + + [ShowNonSerializedField] + private const float PI = 3.14159f; + + [ShowNonSerializedField] + private static readonly Vector3 CONST_VECTOR = Vector3.one; +#pragma warning restore 414 + + [ShowNativeProperty] + public ScriptableObject Transform + { + get + { + return this; + } + } + + [ReadOnly] + public int readOnlyInt = 5; + + public bool enableInt = true; + + [EnableIf("enableInt")] + public int enableIf; + + [DisableIf("enableInt")] + public int disabledIf; + + [EnableIf("ReturnTrue")] + public int enabledInt; + + [DisableIf("ReturnTrue")] + public int disabledInt; + + public bool showInt = true; + + [ShowIf("showInt")] + public int showIf; + + [HideIf("showInt")] + public int hideIf; + + [ShowIf("ReturnTrue")] + public int shownInt; + + [HideIf("ReturnTrue")] + public int hiddenInt; + + [ShowAssetPreview] + public Sprite sprite; + + [ShowAssetPreview(96, 96)] + public GameObject prefab; + + [ProgressBar("Health", 100, ProgressBarColor.Orange)] + public float health = 50; + + [MinValue(0.0f), MaxValue(1.0f)] + public float minMaxValidated; + + [Required] + public GameObject requiredPrefab; + + [InfoBox("Has onValueChanged callback")] + [OnValueChanged("OnValueChanged")] + public int onValueChanged; + + [Button] + public void MethodOne() + { + Debug.Log("MethodOne()"); + } + + [Button("Button Text")] + private void MethodTwo() + { + Debug.Log("MethodTwo()"); + } + + private bool ReturnTrue() + { + return true; + } + + private bool ReturnFalse() + { + return false; + } + + private bool IsNotNull(Sprite sprite) + { + return sprite != null; + } + + private void OnValueChanged() + { + Debug.Log(this.onValueChanged); + } +} diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyScriptableObject.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyScriptableObject.cs.meta new file mode 100644 index 0000000..eb5d253 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Test/NaughtyScriptableObject.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 753bdb918c6038142acddbd7aae6958f +timeCreated: 1518639587 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/TestAssets.meta b/Assets/Plugins/NaughtyAttributes/TestAssets.meta new file mode 100644 index 0000000..931e8f8 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/TestAssets.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 53a462744f22ca549927c5e6ea797362 +folderAsset: yes +timeCreated: 1509089305 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/TestAssets/Cube.prefab b/Assets/Plugins/NaughtyAttributes/TestAssets/Cube.prefab new file mode 100644 index 0000000..62913f8 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/TestAssets/Cube.prefab @@ -0,0 +1,97 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1981131855061102} + m_IsPrefabParent: 1 +--- !u!1 &1981131855061102 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4344736110947706} + - component: {fileID: 33062901823624450} + - component: {fileID: 65233182844289960} + - component: {fileID: 23099360439063292} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4344736110947706 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1981131855061102} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23099360439063292 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1981131855061102} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33062901823624450 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1981131855061102} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65233182844289960 +BoxCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1981131855061102} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/NaughtyAttributes/TestAssets/Cube.prefab.meta b/Assets/Plugins/NaughtyAttributes/TestAssets/Cube.prefab.meta new file mode 100644 index 0000000..f493507 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/TestAssets/Cube.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7ec354ef3daae7641b7a3fa5e1fe0c81 +timeCreated: 1509089337 +licenseType: Free +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/TestAssets/NaughtyScriptableObject.asset b/Assets/Plugins/NaughtyAttributes/TestAssets/NaughtyScriptableObject.asset new file mode 100644 index 0000000..9fb8523 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/TestAssets/NaughtyScriptableObject.asset @@ -0,0 +1,40 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 753bdb918c6038142acddbd7aae6958f, type: 3} + m_Name: NaughtyScriptableObject + m_EditorClassIdentifier: + intSlider: 2 + floatSlider: 0 + minMaxSlider: {x: 0, y: 0} + intArray: + vectorList: [] + intValue: 0 + stringValue: + vectorValue: {x: 0, y: 0, z: 0} + textArea: + readOnlyInt: 5 + enableInt: 1 + enableIf: 0 + disabledIf: 0 + enabledInt: 0 + disabledInt: 0 + showInt: 1 + showIf: 0 + hideIf: 0 + shownInt: 0 + hiddenInt: 0 + sprite: {fileID: 0} + prefab: {fileID: 0} + health: 50 + minMaxValidated: 0 + requiredPrefab: {fileID: 1981131855061102, guid: 7ec354ef3daae7641b7a3fa5e1fe0c81, + type: 2} + onValueChanged: 1 diff --git a/Assets/Plugins/NaughtyAttributes/TestAssets/NaughtyScriptableObject.asset.meta b/Assets/Plugins/NaughtyAttributes/TestAssets/NaughtyScriptableObject.asset.meta new file mode 100644 index 0000000..dbcb741 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/TestAssets/NaughtyScriptableObject.asset.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9cf80899b80517945a2d2390fb48877f +timeCreated: 1518639643 +licenseType: Free +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/TestAssets/icon-github.png b/Assets/Plugins/NaughtyAttributes/TestAssets/icon-github.png new file mode 100644 index 0000000000000000000000000000000000000000..228b09acd4249ed0fa5d53891e819ae1be108358 GIT binary patch literal 29968 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

    NnlU$0zi`cjMZF>+M!v zYLUvUy~RtT9_DADuds&M6l}BT!Ti+%q9Xjg9P)byNw3VpEE%~i40M6~cXQxHozJ%H zvp@CV=WM>gXz)SaXQ$YOSoVK$VuN9Sm3sN?Ikm4Ji2S~M2HW6+Lp?R2hX(Mly-CUE z*!r$=ef3peW7P~l!r~+8z>TE3y#wNU@b?k-kp_?CowhRpM|W(jH6)K#uUtT5!&(OT z#wk0skhpmdBu7}M0u=lkmig@co8%izJ3(_az!beq5pQwvLh-4o&L=TcQ65qOT-%qV?bK`6Yun}%V_P^oG!Cc)2}29+D?vjcW>Zh+e(3Y zu%FxY8^iAz6fqOJWPg)&a=9Syl#}`K^4}>MbYotLE*|`V7J9x-HuJvif1u9Gx+R72 zm+BcCN8uCN_v5d~mt?-%EV3XoUgFeypMhHTT{1kl-c_8)=2dz1p#`M5SK?2xd@Tn5 zn~Rbo)_B)2x9KiSDUmus=Lu6zHoEye+fIDGMkeO__DcmN>3B1YW5iQt4X&0b^E6#A z2^!r0fSCmT?UM7=sjpV!aQ8<>U?hQ zp^_9jp90#|RX4H4&bF%R`s;qPx0#wKGVcC@*kqzb{v+jhM2LvoK>!)_rOv8110Et^ z`~^2M@4090sNPhx%DT9v451&4Ot(X*`o=t+FqM{bYS2`R7-Olg-5HfqsM}En(jXcW zpNAA*K#DVSi$m5~-&KCDSWtn&MBY!))!4~mUilItoo#7m9Mn4?`&)58u`-i+%}ikG z>32TO_|}K2d^r36phoxJ422_9`+Q#tHZcN;B3Qp>5}z%MtZ zw%?}x!~RW$o;mqsRzjKqHLYb-Khq$nBKprCh{5jm$1yP0>RKLQJ8t@!-o(I*JQ8y# z^H!SY?7(`(nO9-&jvICIsMJ?%V!9U3E-38~6xiw`woZ`rAIP0S6cMM(03#XaS6X0P z!{v@dyGX{4n_s#k%Q$fY%-vn8=zPxl(Lxl@cyk8xEat_6CCmjR%?jO>-$q3IBZ`ob7Nb~zqpMzLVrMjOkgVeY?{6Qp2S8+cB{s<*ybu2F z5ZnZANAKiOztLq$WH}>u{{kIMWMxnC-S|)OBv6;tDIPz;o9bcE{u6i6a|c)nUmOQN z8EV##lu0koSV(hnzS{&vO?zX}2EqU8GF3Yax&hDYATXO$ky}7+?6a|GScgrzWKAAb zHQkT5?cx_PcJF3;L>I^W#Z!ZwPp*~O=>!QA%B;jBgot!Mx=2PkMnZe5z{ru@#@MhT zq%gl1G}+jj9EVM4;#5<-vL|==3chK2_AnZl|KQ)0V(Js7R8qVniRBOSd_D5x@s6e4 zdFRY|oI<*}UF?b3=cBzXQ2&NLR_nOH47HFMf=!EN}sEZS_S6fDgM*R8V!O8j3hK#TZr%@qVD zAqc)Lq|`{KlKWf3VX~7`@N18=zO0C?L4dDrH%;V|M=M`D zxnQ9AvTh$=nIuVWLtLk&QtLXV9G8L{$-L5i3@o>k=#hu-lm8ea$%T54lJ^_deRonq z&wi6ky(<9y2K?mrv5(WCn?$*Ft1bctoXICE=#Fb8p~oe zJ_W!4-zfDAm`H=Hucz-zA73SN&-rh-_1?iv`lCjT+ujEyU%Wm#lTHu^>mQ7QK|Buh zeGO2f#RXbA8*^!~W=6;2?8grq+!xok2eQkp=5^i2@bYoq@fup*Pvj-v*TrFm4r7uN z2@LX5FDZ@fSkB>m3c}hN&hrZR@#+fmtho=8WuqMmRTDT@-TakLH*bN}sRg|+R}Gt-KB=#6>4 zG;L9SKC`&u@Uz&_mz_dDDX>n2$H%w6WBF6VBWH$Wm8aB0w*9PXKkHQMrAtrw$S>U# zeLgqoTIQ8Ito=h>8Mp2J4KNr9m2!7-Ow9z*k@ME=o)dl*wY!`SY@yOJ_=2Wff4#c< zPPKQgXd0R4+jfJ?Bs&Yxy#;3MXDpAeWV95&E>HD$HAPpMTHX#M_kaEL_b6gp${_IZ zvyt$9g8hyuzq6+aq3#Sudj?|+27fZMncr%?^=1bJ+jQ?1Jw@3b_2N$1pe+@yM767q z5oJ|jZ^Vl)^LQHxyA-nb$Y;f$s->$|slH4Qy=d&I^WpmCpmt!UH<`A*;~xuEq|N_g zlBtBZTe-`@Mn2oCI1Oe`ZJ&C7x>pykJ<*l6cp*tUNwT7T{%hKg(o&MJv11N4GyJCveZiA;#>YMjo-3$P_ z2!DU>QO=PATj8AG!gOE-R0W)UZb>tn&&Vg0Y(X;>hO)eqp4U9DjW(QOO{|Wh8hyMn z%RJsOv`wKe(eb15_7jy4#2?q|kaYGofI;&28IQ4EM)||Wdtq+?-lnE?PIqWsJ?a~h z-bx=#ofj6)Z5f0{Yh57#_ASC(yQX>Ob3Wf?g0g?`D%6sAu!jL?{Y!Ue!;)V!XmfDK zK}*Bws|Oeiqqkr+e5cP4zc^T5^27d#Xu6E(I=*E_KRVy)bd<^rJ~ckW8sH%mhh7ROre#|TATOX)GU2PGWza0Z%i=%E8I*?C2&r2NV&jzF?JjglX< zVTAZawXq(0Ib=796hRt!ZMylBSm05>E7q}D0F3r!FOZ6{HM*F=y`)i*7 zCF7D*d^Q*s+{i~UJj!CLr$LNGe!P)MRe#%pJi#S`Yw06~MN?rmrkuInd^gb(zIB_8 z-%J0H<=X0QpMLukd-5XnwQUy3*g*O{Ob}*Gofb)#sIfE3vt@Jdu)`y&p62l2@N2s= zS;CE|&a-{c9-||s;JJtslQ3Iq_*XaHe{0k#Cx=MAv}2`k|K?`AI@^GzP7f>xucGtx zP|vD@KmOk;?hk^M6zqK#R4nF}U3hb{0o_n9alAsR)vCk%l~EhRLbpEq9t+V;>zKaa9*3wfc@K8uSD##6 z&CTPLxw=9*m{@6UKan$@VWXmonDfa|IAD>Z$hxnQsiYcg2;yk>Mv(wye?lG-rJe!W z=-xfrA9-W~7i(_z0n>Z6TA;57?+EQxDP_)+wBbMv#UTp?3@3Jq>n|_{_C1JPc=^DY09amP$JLs4 z7kVCNOauB0$ENJs#Y~OE4Zl#}uSQG&FX_w`-i!nH@X!|Gv`dnE}hBSVe0Df;5)&(odmPCs&sMw z5dx^VV;|1Mj-Jy^Ty0a>i?junM%X4y<$nEPtU$yO=3}BPwn-3Y zTyHGerDSh;g8=svFii(}J&tvMy?c?v^^O3if2G-{xk`n=s1%#nqLdQ64ZY zqqN?@K>>i}FT;`Z0Ea^j_A;YH-JU-}f#dSbjvTiXt09ph#^93>XyK=q(OHL|JP-SA zDVJaf7>;b|U*9JNauXH!*s{GJFPj=wTUFK<&Nnh^DsF2biANf8W-RH+*wc6xG2ypk zjhHKmi6131C3E)>{i68i20|CD@|63ArF5(BF&lc(e&?mNGAp)B=kA z1*bANDW=aOEG->%hB>$XA&`rY3R^JvnG!#Dz}84P+-uyfqvi3NM9o>u9w@De+sP@gL~^`7_X*u1siEU1hlb1<{aZ z9Q&Qqmt`U1u+Qo!RCJh%Yqe`ceY&UOkKx8n@z1hME!1!mpDyDP|LZ~mB2ypuasI@` z;WiPV-pPls*Cg+IKZJbLmSa%G8NPD;a?`BUsMEdNzgfEa?HXC}?Ls4Fm|DTnAH7Ea z*!i&;D&Tgh6rMk@T<^+(JF9cqfOkzXIHHsaTnYKEen!&&kxP@WbXisE-!O2{y7*Rj z8J^c+Cq&5g1o^_^mMknkUF(cMHN)T4x?2Pa_}BLox3>-VqOa#&BBAW4}9%gqwf$$S~(Kzw>ng1i7W z)%(CF2cKP?ukbM4zVEt^{E36Ny%4UuiH0hR_r&;63k7)zsYnIiG|BV6-r{ zWJGZPz^H_Q#}5KPGOMrRrTLIlW1kDMi|vyMBAxw;M|yy z%+GGxtwvL_H#EjBHdo?Uw_l(iJj+*9JkOt37u)1RRjy|%^tl~X3o$d@LCyG|la1xe z+ZPwVwHJKETmQZ+{i4PtOY}4OQHE!DZwza8{g8>r2&mzR4aQC_;Pge^v$$@3)=QTo2|4VIrn0~K%Btl3Yug=(ObrI;L2kt#_ zEXFR%bypJl8DxH$lU56x@*{(Fq8CEGBnS&_v(qY9C$Jeg0K0O@#XNb{xUBao zWQ_z+Z!V~mo+up1n3)oHS|nF4c4~+PJ2B`-#4*Ea#wm;AOdPtXxk0@Gz#5fU%F5iL zg%c7Q39@{h`Ang({l{gKat(}DBjO6Idu4B2C3g!IMHSRHnjren_n7VP0&zF4?mk&E z00b`GQL1Et#1l<4VV=C+Vq=J)sXZEP->GLOZj7|`&X)O8y*EcTH_xIrya2IX2v+yw z_PU`P)a4VpRSw}#jW{tvrJz#J)ZQ$3Ggg^Jt!)|SvO9#~@!>U=&8xhh+5SRl6~>$|J_ zNcg=Mnlg6uzo(KC3#r$ztw0EOS4}|UT-4RBR0^tf|H=-!KO|x@+uytOcwCJWz{p~Rd z@-Pq^aFPM|XRei^qtWD7P7EzA(*&XAi`vY6O%GS6>fA_PyvI-IjADbN;kiVBAr4V( z%Zo6}QFPN1XmUx8!Y1*F)p1^tcxgc)0uksHdzT zq8b0ZDW$Xy?Z1|5e|SL7eWgqUlz^tkGXO?pP~uG<_8vAg>To1{9+Ek_Wtn3!|$vxO0(}SxnLL^JX%m z$zx33;zt44Ku;5p+V}bHC<)zf8&8OK>w{-e(Hl?Rq}eT!`ziJ`LC&`@<#z6G@>sf? zZ--{)?L!#d#LaNrEy36kP5!*wH-xWlBtn9%mL8xzLU%D{UXLoY^7 z#ueLK{g53bVYxIkiUovf1|Lr2lIw+Pj3gR89=1S4u;>J4LP1anQrWryX&X(<$1e=) zyj^OfH<$f3fc|IGu7}JyvmLhqb*3VU<}M1ThM)t6O*0*S9(CdG=~-Nl?5=!Vd@Ph};VeTmZwR26ih(*7*R< zkYS(p!@-%AwI`BY4W39Jqu6nQF~P(yp?HlGhZk#brX4i1qO~cl(~OYH$w<+v&;mPa zz!raAEK$gu)y1`r&r0he*xL31Oh7ctUcYJ?lVBc5ssab6+2NBcJ@t+gUlU z6)`|&p8?qfwoReWtjv@71qGFZH8}8uLLX(#ziL>J-(Mh`e+iqhPFd;sQiAZ*b&{tf zSfz_d!8E+Qd48B(xw!FZTz7@95K;oF^r}HPaxw{1HXp?fM`FRsq;E`A<9ipiGNGK9 z$#Z=>^J0*%o&+DSv;rHD5(oIR5{n6O763moQ2IvOvTM#Cr6D)}NNxAqJHw5?zK{jJVi9i1*7yzA>FHfu+&2weK zZlu{6Ozb29K<;of_k^gbEeOW=eHxrP2^tFx1#4&#JFaUHbUkA-C>(LBwlBM}s@lDlt_l1$f z0+vlXER#ZAzBIrLDKPZ&IxZ!%HO%*%knZG-@cEcvzAqwIE(2 z4H5WUZ@LO?PD&?CC#ojqy4UvCE;*j3mnhVKd6gL`rU|s&@HEZ>S|X`#?Ah zsyWoPSdOUSA^Qx^H_f)=Nr4OI^%x(B3U#QZKQH_JJ={o4@`LFyaYI387-0I)DEORB zn@wTH3m`k^g~J36;?ZvvhBtHivQ9wm-H9=v-#xU-4Un_<&?JHHiY7$HYLN^oepCbG zMKP%uJtvzn1P;4ze{LbT>2=#e-n6Q?#6jR5;Dh@>)=MqIXc^B*b3Mz$B5o9vGmXFx z`SYTzV0;%*itV5$;^zJD$aj0*L!V0y>f+Mw$0O`Q)k~I#c`epuV@4XrnNAjCFLbM= zu^HmuzOUQ{Ebo{Vv(6#nBMrLDhi3>WW49|TsUFLDY5+yUM1og$mh26h`SJw(3VTd- zaMQsOp=9YVlm>^<$hE3$GohX1g3K;>v_CQGq)w}c*14IGag!Ukpcr37Bi7-w{WAp2 zxFU$q7s0e|4v;I$d;}NSQN9}&j-HHGu!l&vg)HtQnhZDj@5B$!a$8%kw;pj&#Yuso z`oOg(F;;^ZA~IymB&R1n#8E{S>GR@-uqfqUv#FbMYqWd;h52|8-ZRd&2IDC64OLV-K)eWxT#Cms7r{#+<27L-o zV({?7M&Xx32Kq~;V-wLXj1I5)!cv=3+hz>LIzD-4ewSKJFxWA4EWaUm7p4ySk{9Ad z|M7|d+dK^uuS$0?M}}v2VJn6OJLUgYuvqSa-UWRB{9<_TudOt8ceq@`GMKK?IQ-4J zB~<)aA6QCj89ze;ID_9stjhcsPcH)0JNTow>-ccz21~Dh*o9%7fWE*Tc7ntoX*g%r z4UXd^3fX@+2w!O@fPVpZ*d!>XtTsUi^_>avH;AGz=f$Ev~( z3sA?31Y^=$?c|^SfD@RZMl*GEW$!LqW{~4PSRbnQGswYws2*`ao}p@eYu(lHE*;~7 z8j|6u)P7ERd8M)Uh>iwQbst7cIhqxiWfR$5%YubG!WeRIs1R^Fm#FzM6{lt zg1yK?V9|z>)`F<-x;ugt1BwQ#Rpqa@OS&Akw_kk#fEHlne}&B-EMU#TK91hn(F_DL z%ccZj|74G4K*)~X2IQPTBYNC}M_ZVyN6`e3{m^pb78(T8c^7f=;nnY!_OH~yAL#-f zB;WI9jvB4MBMqH8`ODy|jyxfNSIZDQd>YwU>N-5_O~`@tmAg$qhm5H^q1Jx*+o{Z1ctW04|jTz5xoIS*2!9w6J+ z+PC4Yg0t;alZb+4qiL@=4Jn2*$jALrq>)uj$&olHoN%=L9sU4-ZF`&3MS#*Or35=j zl|vXnRj1#Uu9R{$j1kG;ZCB~EKMI;> z>FasM0yy&>s5sr^bPZTqZ;4{uM`yoEX;NQyP>mCf%rE<3wE?0cZjW$DGH~#U`rhSY z3`blN$T7JrNoi(h89Rt=GOM5W0$ma;nv<|vQ}0KY)OUZ*j4pX}Np$Q{#T-EqFj2Ut z>&CTo-byMOCP@$wK*|na+!sklD2&E+gLz@Kb40rB)Yd4-0?>~0NXJhq7qi~fr|SiH ze&H!tJ{5@{|AYyA`%(@7E3DI^bfR4YEOeqIZoC zZeRkmV68;qUj%GX0%R`IU4QrJu^(F=xgbh*r9i$E2f@Pt^##Zg4ZCagjdTV^>h2QQ z^Bc2@J|Y%SDzy53GKkKQ$$yCpD}4^POO|Y=$_X8MAK)?F9b2&WV8Uah zz@u*#yEjMRr4E~{v@MS{a6j!~a74ZM<%W?^gI-OzrTk;cJDUu01y<)PCd2T(pL&|8 z^`CcCXUP&W}+(@{*|VyYS8$)1{#;2E*9%FIe`#)ft;vw#vUKM=nmB7M?E zN(WR&JNYxw^0|!vrW$v>xPF_mV{xVcsWbHv+mzpK1?y-oNb&=_W*5qT{a{Ph)#S1S z*k@nkscU?vKVDR5wc3L|!7%uqmh$CIDw;FHlH7TK+TDm;^rxlK)n%Y z|37rw_R@(DT6=rkU1lkAEBDQ`((j1e;hbIo0N@yl-J}vS!;u#WFBUY`*B6;-t3jVh z&IGQY31DY6d4O%(HEBVu^36_e@X4>XA4yM%_)LaAx}yBxMiprHN`95i{vetA|9Sx~ zzka1hJ*wJ`ki?#K8`O_$9Ppfk$SDrv0&-cn@KWwo-t-g{(~LE^)3}QRaIaE=IwY7+ zk)K=(u*3?UYeg=v}Uk_t>Mv5F&at z3j37L@W`pY6_b%Mj>y$?KKQ$=cn>c;-4p9-qRZ$HHj?-cV@=tWD_rI^dNvt0nC*{> zE3oIwBYR-9-W51c#r1n+0|42lKCyb*c(0ld<6jIaQ!)L(3G*y>RD5e#=N3tN#U`J_ zbWRpv@lMP`b3u(z2UNt& z7s5|a?6DVxy;m>ocAvn;j`6@VNVPFC2WMQTG@%|N)FIbQ=_BSg<~ptso$f^QRcCjY z>|n661$B?_!r;lN(Z<};_Tw5U%;Vu{FYrxLY#-+{Kcm8WCZdFW>;Vx~{IeMn!cD;J zLEhrtjZI}XgQevCDSCk`$^Nkw=jXAZu#{@*FpS|LRu{odzo1~iu!}d%*1pxjK65&2 z4snDm5Z4+(9NqlIq(jOaA0lsuM0Npyprr=(A~AOe*J_iEr(E)Zj%(%FV*`n9=m!D& zPO2yD#H9JR|0MFrhg0i&)h(Xf5jF;z2HU4&0+fhgO7gJ>_!m~s!h4cN3-}DSM9qC@ zZ63>=9GeyF)t3uBNY-?dnFM18yfgh0ARFknfH-rh{i2E(_*72!z*r_x#`Il{891a) z{awX+^)|zgT}NB4UAMdF0kw;vP8Zj|^}`U$#l~CmBIlE5Ax@TKR;h9o#R%Br6BmP< z_b3vZp^Yt?qqND3^8ab+D&wMhy6|P`ZlpmvL`p(hB@9wpSU^HTB!rcQMMOYa8l;hC z5fFi;mQD$YrAwri?&iJxfA6RLa_7#>oipd0=XuV|3NpS@Q>!Xu-joSy@zAvH=puw_ zCv=~60l+WfuKIWSN?rSthYyM5N5E;V!1T2GZ2sIq4%oTB>lni7XLg;%T9b6X!KP*g zl=ljXI^x6DbP&`eF@t%7x*Y|ZTYwcab;OgSc2h~eSPTs|-$KaScyA5r`Zrp3fTs=S zsh5L;hOXK@wvT=!3&dxR8@AdCk8yC(LY)sd0!fH_eB34vX%QwQ@PPpy$}2dA1R#$j z$;(XdX1lj&*;}LjE8q9@clPo2m8oH};c{h>NzkK>K+DJTj-AQxV+)j8{D>!;ZazRQ z%_t|8@Wl@t(Ja)BSLE?x0H3c20Bo-BA(;9V9gW7O*$x|=re#sd8x$S;91FQk5(!s3a4LE;6^`6{nJzQtB$B+-mSQL&iilJTPD zDFvEkg%l63^L@%FzxFqa3w(NAGmg|d-67x#+5f7DzKM9Y#|KX@H|Q(&u$-)1`gG&V zkI%c%`6sS7nx?6C%<@|Qe%g68kq4G13KlMUq?FajtZaLC#G?#DSLH>-yoy|;b$8q*%*u4`L zHQ6xqahoM{c@`lHI6Az%tcVxpvj@6u&&}Z$#`YQsC?P8`|DPD5D%z{7zjf*x7>YSV zoa45>{#Ww6DKr{1s^G$d-+_RV{Piacp15n*H_?f-d)KkENGpVR z|7ZiabOW}!^KakHO0%KvC@;HqJ?o4Q2BKp(R^M~B;MO^Ad|Wj^{A79X)|6{}mUN{9 zv>GMey~CTgJo3N;w_Uuw$`DK;JG+9lsQz2L7bl>0Be{s zSY1Hjn}&Hrfx+qG>UVzP!8>T?K$6ve9fZ!;2ddo7c&Fa6M*FWQ6r>ZZ;)4jrYiJvw z4qJ(@r033f{#a0Ph0{DBAKKERgiuoMa`0#9uUP?jX$h?NV6h?I!;D)~f~do1fvkNC zlHlSvh5^D=YY9{Ym;E0wC0dJ~t7!y>pV-E)4aeq}tJVY3HqrP6p4aBs+xWnn{+{5| zd2QnQVVL`aknrrdY;UnZ*+)chv-Ea?!}HjP>%I91>IYOBWFK8>sJ6SKcQcv(NqvdU zZo&tA9kyo%gqPb+0Rmp^i9uMBX!*;~8I3G+nog4&cy*s+O9`^G09d|UA_qz@(~5kr z;=vfxg~Ksit@TmV!=WohhLVKt^UHcHZM2ZdpIiGE$@hr=Tg8d1`qY*9DWcovd>df5 zd0NUKzSM)8vDB8g|GL?i&X#cio5+-!1P4)la>AtiKt`xl91Up*!q89}>(Xyb)9Ti) zXt)9ZM+IUh=(JB)Ueh?VNmwersRP!T_~~z034yy~U9=#_+vKyQ@pYzvxlnTYV5`}B z%H=28^1Yw2bYGJTxM0VczAcH7%y|0qLixw_9~eGRxPd;HJoG4dA5laOY(clQ%_PSD z#s_zszklMl^FFqm!>~RWj$I{|sPd36M`0ysO zXH=vmnQ9xaM?-~N%GtMc=NbB0XZq6z6;$fZZnIdShIuPcRs1AH@q}D;FEDG>zUL)O zotXI7NcSKAF>_Bo>-*V?hq0bZ-tal|U|o6sAz@lEd-KwXwcZab@{5swbLENTW1f=Z z)V9Imim-CX1=lp+G>XT^HIGlVb>xdZu0VK*@1@^bv7WPl^@y7Kk+cm1(7LzWgJWtC zWu=ku*gt*nFns}O<<`14P(uwl(Zl!_*XH&dDD3^&xaKW}X)3<8H%IEm(fH7K;=?`Q zKV*9kol&Frg1g&*D-ENY{70`O#bW%&VexyJE)TqzM9ILQn&rsmk@PQQ{&tYD6|Lg^ z%=}$@`N|?IxZwwC2D8lru-+ALal#1?QykK@l;5jgrkF||VI0z{41U7yrIcCCy%d27 zaut2Sp&oocYa^hBg9(e_VJFQ>>XMwTf4%kO7fJPGu}i6s6o(&9(`oRdi~$?Ee!(uP zKQA?AqJPqGWUG1cr@K&!jys>8UnSu|Z}EXj1w1glMQ$wk7YPtbgX{T~Fq+toH1IQu zo@&^!un1-+c9F#-u9FRx8<5Bh!|-=|-JoD%v+$m!ycAo>l)u++x04~9k#y82QvR5&oBZgy$+SxlqhecI=OWJ@AiOHd8=k`XDt@qj zdm_hYl&<^`#f3J$}!!~4ZkfJ<`Ew?$K;ak_ei+8r= z&x8XlN@u##N$}oyj^wAWAgws|pO7n^5JgbrZa#5QaViP63Nxo3RugpHd>PjJVkCYQ zJ!*htVfh_vxpq&f*))<@3s;PUX#4GSlBNb2d)p+-D4m2%J1DZrJItdsK=1$&LA1DxnDx;sD8zJW)Pna}JOOPG#= zM}8VHQQm4wg5uC1yHR1qZyM=@Td5Q2AUQRu2v;<4z$*FD=$*g7rnfQiog+(v{T4E) zcXlhCPkwAT)#MXssvxIM{2abWEZ~>nO&!IpV78UO!o;{(Mw$9<5Ieb-V92Wp8OM7X z{hS5)wR~KgE0r0r(!m`Rb>&dO*&Sz`YfIx8Ztt)VxL8$k&MQ`1ty*WgeHF#4+QDOj zi1JE#oMQF7HA;^&*s7LpT5CnSzw*z1Sl3(SiiQ}C#>SUj<;zRrL_=q^a{l(oLE6_D zmrZ7-%p@_Un=);qceqbiQ*q&0w2ho5 z!(*%O#lJM;E*Cw|$W>NT$?4%naOUU4JPR;;BBnG?}pxYQ0!DsBHr)(=JA$4 zbx+_`EVW1~MV5I^K^L#AWu4)t49LaIr0wzuf>?daJ{-oAvZjn?xru1HxlIclz7;tr zwx@oXi@tQf11!)D9$X&5m$*o6{{%pOT9!+T#gLRUUA_7qWv&atFyqT(>^6$S!dDY# zBd0`Rc-O@KQx2~VQ)Zqn@Q%qq$ME1u1}DxIV>hMaXFO|bzwAx|5uCkurD~2$AX{al zd(W0J@AeSN;M)XStzu6C_jo`!7U_wUDw|}*dq7PW#jDBlx!gaWaHMYRbn`|+zcI4M z%1WW07~nhPaQ`4#x1C&R)AyzSR7y$U;CCDIAr5-LbGnJNagDTsbqCqv$Qr1yjBFYG z%-}rjK}UGz@LC!-gAeB*$>89dJ_{gO>bGX|r?>2_9DjsL>>|n@A>MnpMj#yvSK!!P zMqGGTwF{vfTyIfblzCIk4!ez#}#;!f%vi5tGD=uJ$kv3 z?a`iN^|PM z+v?PWE7cT|uWRbjkO4&h^KfWvm|8762Yxs~Z$c>sijKW%J~Q0aYRs(L=A+j6t_4}r z-(@x@?xJQZS=jRnQ&OvS5;5Ub4gr4@#)pSV63tPz9-_v3EcZ+dO3%GY{2l{*$_<&} z-Hdlu=cpiTG-2GAKk*OqBCU1F`A@$-&j`v=jBNiJVzAGw&?aDQa(&KR#JYfNIW@GF zJCuOSntEJPw-lRxm`k{?x%GxW5JJaxTc0ZvcF80Hzl9m zk3&+Sf)E4E5BufPu+5;3qDU}V62>R6)jz%`2Q_wb4Cmdrb~D^NOb4lhc0OFeUjfJ> zW0FO4_+p7vlirYF_uH6AK-)JD2cTuY;Ld~h}Q|}~lEy|f;nzf4#S_QI( zO5B3{`k<210aRZX(#c|r6|ZVxmn#~jO;hz2m7hcYpn-imT1^#YX(=i#(?+P8RxQzL zNvbiitOr)@{R~ojf*j|d%tQ}~`xQ$5D)91O5{4G-)bE?_ri1rzWv-j!#_X82SPg|O z8X3xOp7L<%b*v{TG`KoGU;&*iV(y{fTRHlPK3GtS^c$kVnRl5`khVH$-D^+6@(;m8 z{gw`J=R1lAnQUwT;OjH?2XBP|^v+hx!jCgBNUP${AuHyBsEy+En2J!9kwwoXCRjyy z*2c6cZ}Ok++IFZEea)*}s84Ln4xNzhLf9oi<_;2jw+DzBJZz>I67V&Ea=ht(E$sQw z;rhc8jP;Sf_L#0%D&b*z_ek)yw$I76zPty+?^hFb#QbxAk!|s+?8gEYoYP*+fVdu}311?5P`m>8r<7T_2WT^ZaDA7(9P?814-ITpkbvXW08cHa!b+A(L_ z;~%6mYQHG?`xaaVnzmz918!k z&CN)1vA7*GZrug^Gxd!Z2-$oNW{o*j62*7Pm4w9sFI$CFw00&=jppNMWpzPR`f<{S z|1Ej^G5%}C=0;ZQUgg8Z8EvG~oU$nO<7`j#Z<6C#R&I{3BX7QdWQ|`nHDU+6oj9~T zE)(A+8?+;xg+h?rR711G(MEAcapWl0Zck7JlEwZZ`kXJ9qxPT>oBJkreVuT?^TXeP z4SVLit>T|Xf%1e#B&u$~eCIGJ|x&|yc@Sa=Jc5wbac%8pEDsp(lPO2agh-JRNO%U5%o{ssJ>_) zJuPC$8_8zGvLgHR3wtDLx221@lZEp4ozH(L(Jc8gt-}ab%b9{HQCD+u!;;&{D-jp!Q&9j>_W7YhLLb#^guY4iK8RRjg28)Tlj zL4BElOG&rg=fz4@tGmrw2nbS{U%aEZa4T`@xLM)M5YBw&8Ci}GKMLw|qX4<^u0+pb zMe;7$J7AQI;J_cmYQIyW!=Otzm#;JL=WEx?OSL0|gEEAAI0h>1xi&XTZiAJ2!22ib zCVG1&Ana^YfBh9jT3rj<74*P5g`inF^}a;mzXJ+&V^zXx;pHE-GOctMxN{nNfwaN`ha(8tU!RnANIR%k!H748gk5nikNiuD6kRcAq25g` zfc}p7faW%N9HS+#_~YIVh+7;iK?=fG(hnO44T2*oymZzuUd0V$u3lZsTpCSnFUX;H zI=+xb9{X}IgG=&)rdA+ny?z$fr99RTUaC#7QPgzBw?LbuYB@WL;CxP-JbuXlB$#|e z(_7{9QEe&2(wn=?R;YZ0!97wj5idtaff$nnGxDJxaHN)udd_zC<{R~qe81kbwVgEN zW&H*AOl#<^`k7Rw>JuU7x@Z=YY#f=pnd<>9u&4YE4&Y!-f1OAw1%R1kIK3OT*{&NdxXsQ3i>JfLzUc zo4{a&ja8Fzb$3s$>ssL?vAI-V-D_*0?^fAhoEdoWs=>96frL%?7f-H$uW8vfv2Gj~ zCYC?H6wGpu!bFwjYJIi}E3ZTF^`KDn&QtDOaC~S1*pyB!|4zAO>r3=q6V8Q^gC|8; zpkL6hx@}u|Fo?Hn2oCs(@~X0B7`3TKyk*-|h?xO{ECI#5ljZA(B6E;iv=m`mM_Rqb zsr?@FY-|QPhb~#i0%`{YiK6br-hn1LCT!Te+X_3W9pF>(Uu#*lk=xY_Ep?x@jId`0 zk-R#EZ~gAH;PS(-6>+A9>iUu70BTKpgWvM_#2m+M=)mPF0-ChBCG(voSfX*zweRo> zw{{RD?(?rzmU^P87EM7@&cZoAxf}`_tS3t;PGti{)XZnI1UlyPUtZ_`!1+?6HdXIi z|LNa~qvvTx5>eVKGWe1Q!X!fUNRU~Jm5_4YSr>r{xJ{Vf&+3rDKs{H9OxRB+`vhbH zWae1E)W2y*(jo8j_e|L^xlN9SWS_qSeMuL+uKCmy_0HXvY6~)?(uucqJFGDv&{ zzzN3jgEV%!z+Rv=@h`5x7%FLfVIV$C2#mt|#zhW%@wSPC){gg<=+dO*lAChr3AVF` zrf-eb;Win~$ua?sFM5lp0G5mW+>o;8RT`WwZd#zOsu0&i(xFtZBpfohg9O`i{(NhB0-O%s`Uo*BspYDo15-7<$51i= z1Q*aWo<(#e4GhBi%QHLRrzd`bESYdIy4YLL3yLfTY*uDU9k(cYMS4Az~R zrw`NrRek&OtuW15z-43IprG;tEoHSbHq#8Z*_ZqFIiwj`BLW`) zx@}%I>x{91j+$bngPHjzGx7MlY@KFG@nVa+IVd>}yv?ssa+QIrnMyHO%@A~b-Jv+z zE{z?$%pM}%4=TbyJ@gps$O@yZAhByxvMA3a%-1lAHElPYxuaVq^e;7z3jokW-Tp^_ zX-&K?IHhu6Pe=P9q(2;bl6<~`3)=>{31c)%7A2BB4&5Y!cLk-6h?* zCQUdAj{$(+;wS@GcSl_DC4>pjV|_GU7QSQmaoLC2mxQ;z%7+6V@{^6=g7QZ=h6kXq zkSLie&%#eW^tbdkQ@$|uNcl4fESPa6%F%G4vE^oAeafL0B18QzLhubveS+%5?2|zQ znfd^wIx3v#>zCO7kuE1hBbO&qyYw2(ogn%4_3Hhm~Ao(e{MPgN(*f4 zlDpmTSlpOEb|#vg;akkP>~!HFyru6i@BT?N~Q`XO@!VV`iY|$ zVQAWjHa4)^TN#IQT{WMS?i&d(JzWmH)Xuy?OBBLg+y}R$hrl)Wz_KF?eDl$rC;knQ zyG&>@JBbaRQXakjA2~`|npAvudMZycQ(wufpH6LdE-V?ZL}i8#rUC7GN5F-b>O}@w z>xqsyntqaC(F4pi1Wl9lbR#eS#T#-Zo_bI~w~@IxY4N+Us-Aou&W=DKR1%PWv}m*x zqU@fEiJ>YaVu@qhxN5}2IFww}0Ft~(8s=DQC!qJVVB|-<3+GnA$h6a2NeVKi(}i)D z7gdBSW}Uw0G`kGMV*!0v(z5^!+Gg0S4#XfQoTFmd%WgZdnXgrCTf zPW)j@Uri-pffy1)#t&fe#hK&|7jUyBlgIU`{1eFLWmi=hu$GE;j#k_nCT+?!QO*_U zRUWg~tW+K-tRmaKtFi)c5FEWBVkKR8gy#Rwo)fM5`E0PdHZDsv-~VSvJ=G&;IcN~Z zTW*Mv#IKfe?r1)>lNA6;!Oe6~dupa%R_2!xc6=vWPdateB^~tUa@j^FA+$z#`L9gs z4tqFo$$k7SjOSpXZ%Gxweb-%lfu_Xx0CGFX?=&R$^b#+?xna8lOgtV?YNP}Vh{0Cr`VSWR3N`5Vb&2!(0>Qj@fvEqd+~Dd&!ucF|jH41#W~ zKEm;vKRG-X{4mdPaCy9Ty0z!A5hj=IcyOt1+mV3aeNl>tdMAEbEZ$F^$FoO2(y~N5 z6(4W)c+dsKLw*!s694q5ijWPG9t(Lum!u>CN7egj$OHmjfC4S_-O?g6D@vZ?3op3~ z80(6>Xrj0WtrKLy%lTpIJve_UWb$L4U3I{|uuTF#aN8zF$F$`c;NZ%#I1i%IL2JVN zPzj0k(QZkX!&_Kf*kxAC7~*@JAaCA3J^_G-HPtt|00l62t0b6Ek=T`* zR_~^-;s(WW)z*q-=g@Utz~T5EM{vg8#-L*rsU)DTeLwD;(!rAe$TbeTPt;NGL?|?4 z>w|vSNq-ai(?e*sumeAAml7?cn>{2B#-bCb$0!jK@I0n3&p$6lS0@cTxdG7o^5J)} zMJZEPpHF6p=9_wZe*|+5S?$Y&z+i-1z7p9ovB(WH~6b=IsZSD0a4bM?X&8^r|*moKutsT^F=;Zmo1 z3N&k(6@~R9uu#!_?_24L)r(xDa2nPZPtcigYUH!v{N52r&I4;Sg85j?!v*oKsXICN zH~elhnT2G=YatYUl~6YBtSrb-C{nmEhzCPY)FT~n77H&eHe}G;)xCIdem-lTa;)K4 ziCPboqSXV+#Tgez4QIYN=-Uf#CMzCxsu$NxkU0RJYgz-|Gf4zdc#xzqyMg?kI0=ZT z)H&|F`+|A|aRgUKUwNh{$1m1%pLtrZJNaD14~?k#l-o0{bV@6ZzRaFm+=BGwoQ9 zsZND|;L)O#2W!6H zS*`CU4~>=2DSZU0GQ0FZ^SdOl30vCV8Pw~lO!A0XbCi48og zLdZU^Xj|&YZtYwzpxWgIrt7wgxF~AAX43eQnk2tNxpv6S`8riOY+t2tKj#+4Oa z{UhR|A1XUIVFFDVgZTqbBK>HL${m5-lv}EvsImBwKecCq9PYpHj~OQ*YkuPF0zL4K z^+ewV=2yUvqe*-5ud1lIZrihwVQ(2iei|U)O(ibTkE!G^Vgp!Y`Fc8XnRfP(BS%bk5e@L>qh+LG2HS+M_O03mn zH-;#npWX@3Uw3vOa-Zs$4*&<3J)AwN8yt$pPB<7=s_9MUS4XYle2r|UMuX5S5$OaO zrbJNpFMEDEk=6u1jF&Z6Y6E_rpqW>6CU#U>@iW?5K1I5zlYeSECK#E{OTh~Q)aq1D zPf+|nG_bRP?7$5?u3Rdp8%9-oI&|1c46@koydwJNQ{ttmtNPJZ*yx+#);nv?a4NTj z;jqW&&+t@Ayqs=gRtXMw+EUzS9mCC{!7L8z)@y6WoxFvxEh9T(L0665CK5SB zx1}_>*F`beYh~bc*!&1!gFVi8L$q1{`p3zh7)uP8u3SBHg*;LqaCwmuWzx2MmsVk5 zZmV4A7#l&Sk~`8WcTtby%X-Yt3n<|*@H8?$Y7#rKbN=uWe-dPNYdbFPQ~EXadv!ka zVr2BZ(c8xPLWQdh@7h$_860G7Tj3BgO9nyRK-VYfe^_N6E$w#V|Fzfqg*(%dYC< zuOJ7#N3+U*ut6_co&Q|<%X8m5k9N5JB|P>l<}>quB|<@e(qJ5@v>;Sm$rQ$lvvT#? zWAZu}Vu&?of2Mvzj4VzmB=`PI}riRz-ChQA!G z-a8sBO=&zxyU!$uH$@N+C-vw|-lxR9??m{k;pV&k$z+f}to1$>jF0(6(-YbxQO<2J ztEE5*2avCgSe1q#ye+5HX*5k+D{L)p zs)u$ZZ~Tx2NDCzrXE?LY%`K+TAji@v+S16JHzHZOvE`9&S=ejcw7Yi*3hm z2o~+ywGAHdDKGOflS@Le1^b!P>n4GeAGNQ|e+mcP-;Ap)shd2IkuZesVpBAa+!8)= zpe12F6aoX<3@m&PJlD|w1_bCkxL&J}h7b@C^m7p!5cU}dtIzLPlpm!?{lG#wk_KDO zvO#(#NxmSXL_5_Zfar=P*}BaJ!9a{0SkRW~2#8FNk5H2+R_$?d?4$wBldve!HwQGH zkfEvrHx8Nq4Dw{3gs~@P!Eqfu*Q?BPf9-FzU-qP*=%=vf7Lx6uq?iwOf0eu5BS?JC`-}XMX>K`@_Oh2ofl(oGYJlMv*+3H#W)fn z8rcIrf(;h*ZD}zR#l~fM^Cbr%!Xx+<_mtNS3`|p*QUmJChMi5Tuu!MZ?G_cL-F}=> z!ZkmZ@mp-bLrd@Gn0wB+pWRYiV2*Xb$OJ?F3X@d~P&Bmtojkq1OG%lYoW8_-(RG zl$Ou-xOnHz@RO8>OURxFpER_ur~?t{5n4zT<75kV0tB%l%bC8NdV#r*z0%6ZTA zWS)4J3=yY(MPY$mGDkS{`_W+i-uJO9CXiSX*9Wb{TlrnZz$XqDdV&xvP&xxmglCBZ#W zTQo$PfAzFbjp2e~XhWt??_&hy8|2VTX=hR6@5wu(i=jS5NrY<$9$;lwURA}vFXmwn zpL@h{0nCtgnxc*0h%G;a@8BMq@y(~b6`XTU+oC@pmjvjmNN;PP#ORi}^Nez`oH#b^ zJqUe4yuBtMQU>2>x zrFwr7NW3R>OPTF^6~6=qilXg1N2x%Q;Ex-RYLC)u-^Nl2q56RT^9fGSwC@ zrHjo<6wxCTI0J!u%(HH?fAaYtG{FvfVL3#~cPA1U+)Pg%ase55 z%dWWNF@G3=w|Yl=Ji`*gW!nK8V~SQ0MF7~Js~w0($4znSf8fmLVEGX%dr&S2;Y@`Q z$O4t}pK9=Pdth(vtvTU$fYOj%;@)!)2&-WSV=#j7>F(a5eVf+AJ0Gi=3M>@;O)iM= ztE^2u;NH_gUUWqRIK%3N19~~e@O~~AW!f@jJDo>@6+gdZB`^qaFyn9n!|YXf?92e? zY44(qIx3Bx9@{z&-bG(Yh$^|MbNslQTj#0%Nb|Zy$sc@^$>(sUL j^<2*u$qv!Zn`=dQ$m@Wo$V%|A4*)z<(Nsn}w)przcCP>i literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/TestAssets/icon-github.png.meta b/Assets/Plugins/NaughtyAttributes/TestAssets/icon-github.png.meta new file mode 100644 index 0000000..14874c3 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/TestAssets/icon-github.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 005888ede18a58e4db8d069cfa3007cb +timeCreated: 1509089310 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/_Scenes.meta b/Assets/Plugins/NaughtyAttributes/_Scenes.meta new file mode 100644 index 0000000..91002d8 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/_Scenes.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: afb4c815411c28b449e61fbaa1a8bfa3 +folderAsset: yes +timeCreated: 1507995550 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/_Scenes/DemoScene.unity b/Assets/Plugins/NaughtyAttributes/_Scenes/DemoScene.unity new file mode 100644 index 0000000..1d29eeb --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/_Scenes/DemoScene.unity @@ -0,0 +1,334 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44657874, g: 0.49641258, b: 0.5748172, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &1444377589 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1444377591} + - component: {fileID: 1444377590} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1444377590 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1444377589} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1444377591 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1444377589} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1591883662 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1591883666} + - component: {fileID: 1591883665} + - component: {fileID: 1591883664} + - component: {fileID: 1591883663} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1591883663 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1591883662} + m_Enabled: 1 +--- !u!124 &1591883664 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1591883662} + m_Enabled: 1 +--- !u!20 &1591883665 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1591883662} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1591883666 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1591883662} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2033251972 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2033251974} + - component: {fileID: 2033251973} + m_Layer: 0 + m_Name: TestObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2033251973 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2033251972} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9c928ea15ae74a44089beb2e534c1a35, type: 3} + m_Name: + m_EditorClassIdentifier: + intSlider: 0 + floatSlider: 0 + minMaxSlider: {x: 0, y: 0} + intArray: + vectorList: [] + intValue: 0 + stringValue: + vectorValue: {x: 0, y: 0, z: 0} + textArea: + readOnlyInt: 5 + enableInt: 1 + enableIf: 0 + disabledIf: 0 + enabledInt: 0 + disabledInt: 0 + showInt: 1 + showIf: 0 + hideIf: 0 + shownInt: 0 + hiddenInt: 0 + sprite: {fileID: 21300000, guid: 005888ede18a58e4db8d069cfa3007cb, type: 3} + prefab: {fileID: 1981131855061102, guid: 7ec354ef3daae7641b7a3fa5e1fe0c81, type: 2} + health: 50 + minMaxValidated: 0 + requiredTransform: {fileID: 2033251974} + requiredGameObject: {fileID: 2033251972} + notNullSprite: {fileID: 21300000, guid: 005888ede18a58e4db8d069cfa3007cb, type: 3} + onValueChanged: 0 +--- !u!4 &2033251974 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2033251972} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/NaughtyAttributes/_Scenes/DemoScene.unity.meta b/Assets/Plugins/NaughtyAttributes/_Scenes/DemoScene.unity.meta new file mode 100644 index 0000000..819f1ec --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/_Scenes/DemoScene.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 07845a5477be2b149a6f1cb32b5a3a5b +timeCreated: 1507998788 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From e52d8ec4dd23008e8e3e4ab84a87c5b02c55ced4 Mon Sep 17 00:00:00 2001 From: Thomas Morgner Date: Mon, 11 Mar 2019 17:34:33 +0000 Subject: [PATCH 05/24] Missing meta files and project now uses 2018.3.5. --- Assets/Plugins.meta | 8 ++++++++ Assets/TextMesh Pro.meta | 8 ++++++++ ProjectSettings/ProjectVersion.txt | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 Assets/Plugins.meta create mode 100644 Assets/TextMesh Pro.meta diff --git a/Assets/Plugins.meta b/Assets/Plugins.meta new file mode 100644 index 0000000..441f095 --- /dev/null +++ b/Assets/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1143ea67f80f30d4eb91287bd083a8a4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextMesh Pro.meta b/Assets/TextMesh Pro.meta new file mode 100644 index 0000000..f9da8b5 --- /dev/null +++ b/Assets/TextMesh Pro.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f54d1bd14bd3ca042bd867b519fee8cc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index ca32b1e..6128d74 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1 +1 @@ -m_EditorVersion: 2018.3.0f2 +m_EditorVersion: 2018.3.5f1 From 79b99380251e7057a14361ff0956520d095aff5f Mon Sep 17 00:00:00 2001 From: Thomas Morgner Date: Mon, 11 Mar 2019 17:37:44 +0000 Subject: [PATCH 06/24] Added Assembly definition for plugin UnityTutorialSystem. --- .../Scripts/UnityTutorialSystem.asmdef | 15 +++++++++++++++ .../Scripts/UnityTutorialSystem.asmdef.meta | 7 +++++++ 2 files changed, 22 insertions(+) create mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UnityTutorialSystem.asmdef create mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UnityTutorialSystem.asmdef.meta diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UnityTutorialSystem.asmdef b/Assets/Plugins/UnityTutorialSystem/Scripts/UnityTutorialSystem.asmdef new file mode 100644 index 0000000..5f8e42b --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UnityTutorialSystem.asmdef @@ -0,0 +1,15 @@ +{ + "name": "UnityTutorialSystem", + "references": [ + "NaughtyAttributes", + "Unity.TextMeshPro" + ], + "optionalUnityReferences": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UnityTutorialSystem.asmdef.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UnityTutorialSystem.asmdef.meta new file mode 100644 index 0000000..0a9fe5f --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UnityTutorialSystem.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 21d86dcf9d039d74ebea76df0aed66ab +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From 956332d923f7271abc67c6fd0a5c24b98e074a1c Mon Sep 17 00:00:00 2001 From: Thomas Morgner Date: Mon, 11 Mar 2019 19:11:38 +0000 Subject: [PATCH 07/24] There is no need to only allow higher level TutorialEventMessages in the renderer for as long as we can safely fall back to some sane text. --- .../Scenes/TutorialAssembly.unity | 757 ++++++++++++------ .../Scripts/Helpers/TutorialEventStateData.cs | 8 +- .../Helpers/TutorialEventStatePublisher.cs | 4 +- .../Helpers/TutorialEventStreamManager.cs | 8 +- 4 files changed, 532 insertions(+), 245 deletions(-) diff --git a/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity b/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity index 657158c..741d89b 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity +++ b/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -50,7 +50,6 @@ LightmapSettings: m_BounceScale: 1 m_IndirectOutputScale: 1 m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 m_EnvironmentLightingMode: 0 m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 1 @@ -117,7 +116,8 @@ NavMeshSettings: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 121474008} @@ -134,7 +134,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 121474007} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -147,7 +148,8 @@ Transform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 121474007} m_Enabled: 1 m_EditorHideFlags: 0 @@ -157,11 +159,17 @@ MonoBehaviour: Messages: - {fileID: 114969602861105628, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} - {fileID: 114295595302332938, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + matchStarting: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null matchComplete: m_PersistentCalls: m_Calls: [] m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + debug: 0 matchFailed: m_PersistentCalls: m_Calls: [] @@ -172,7 +180,8 @@ MonoBehaviour: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 121474007} m_Enabled: 1 m_EditorHideFlags: 0 @@ -180,13 +189,13 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: stateChain: {fileID: 121474009} - successMessage: {fileID: 114453565588672230, guid: c01cc92f4088c6e4abcd3830c0002c24, - type: 2} + successMessage: {fileID: 0} --- !u!1 &136464903 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 136464907} @@ -207,7 +216,8 @@ GameObject: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 136464903} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -219,7 +229,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 136464903} m_Enabled: 1 m_CastShadows: 1 @@ -229,6 +240,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 1 + m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: 254da5f51648fba4c9a58e4aa28b91de, type: 2} m_StaticBatchInfo: @@ -254,14 +266,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 136464903} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!4 &136464907 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 136464903} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 2.705, y: 1, z: -4.827} @@ -275,7 +289,8 @@ Transform: AudioSource: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 136464903} m_Enabled: 1 serializedVersion: 4 @@ -370,7 +385,8 @@ AudioSource: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 136464903} m_Enabled: 1 m_EditorHideFlags: 0 @@ -382,7 +398,8 @@ MonoBehaviour: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 136464903} m_Enabled: 1 m_EditorHideFlags: 0 @@ -430,7 +447,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 141102407} @@ -448,7 +466,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 141102406} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 1, z: 0} @@ -461,7 +480,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 141102406} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -473,7 +493,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 141102406} m_Enabled: 1 m_CastShadows: 1 @@ -483,6 +504,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 1 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -508,14 +530,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 141102406} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &146596266 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 146596267} @@ -533,7 +557,8 @@ GameObject: RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 146596266} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -552,7 +577,8 @@ RectTransform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 146596266} m_Enabled: 1 m_EditorHideFlags: 0 @@ -598,7 +624,8 @@ MonoBehaviour: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 146596266} m_Enabled: 1 m_EditorHideFlags: 0 @@ -621,18 +648,21 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 --- !u!222 &146596270 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 146596266} m_CullTransparentMesh: 0 --- !u!1 &159285979 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 159285980} @@ -648,7 +678,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 159285979} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -662,7 +693,8 @@ Transform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 159285979} m_Enabled: 1 m_EditorHideFlags: 0 @@ -671,6 +703,7 @@ MonoBehaviour: m_EditorClassIdentifier: sources: - {fileID: 168782044} + detailedDebugging: 0 nextMessageSource: {fileID: 1471210926} autoPopulate: 0 enableForNextMessage: @@ -709,7 +742,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 165394804} @@ -727,7 +761,8 @@ GameObject: RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 165394803} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -741,14 +776,15 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -480, y: 0} - m_SizeDelta: {x: 480, y: 0} + m_AnchoredPosition: {x: -400, y: 0} + m_SizeDelta: {x: 400, y: 0} m_Pivot: {x: 0, y: 0} --- !u!114 &165394805 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 165394803} m_Enabled: 1 m_EditorHideFlags: 0 @@ -771,18 +807,21 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 --- !u!222 &165394806 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 165394803} m_CullTransparentMesh: 0 --- !u!114 &165394807 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 165394803} m_Enabled: 1 m_EditorHideFlags: 0 @@ -813,7 +852,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 168782043} @@ -830,7 +870,8 @@ GameObject: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 168782041} m_Enabled: 1 m_EditorHideFlags: 0 @@ -844,7 +885,8 @@ MonoBehaviour: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 168782041} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -860,7 +902,8 @@ Transform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 168782041} m_Enabled: 1 m_EditorHideFlags: 0 @@ -880,6 +923,11 @@ MonoBehaviour: - {fileID: 114087278996602626, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} - {fileID: 114531965955044376, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} - {fileID: 114505920661840866, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + matchStarting: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null matchComplete: m_PersistentCalls: m_Calls: @@ -896,6 +944,7 @@ MonoBehaviour: m_CallState: 2 m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + debug: 0 matchFailed: m_PersistentCalls: m_Calls: @@ -923,12 +972,13 @@ MonoBehaviour: m_CallState: 2 m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - strict: 1 + mode: 0 --- !u!1 &364011009 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 364011010} @@ -945,7 +995,8 @@ GameObject: RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 364011009} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -963,7 +1014,8 @@ RectTransform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 364011009} m_Enabled: 1 m_EditorHideFlags: 0 @@ -986,18 +1038,21 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 --- !u!222 &364011012 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 364011009} m_CullTransparentMesh: 0 --- !u!1 &375966258 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 375966259} @@ -1014,7 +1069,8 @@ GameObject: RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 375966258} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -1027,13 +1083,14 @@ RectTransform: m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 480, y: 0} + m_SizeDelta: {x: 400, y: 0} m_Pivot: {x: 1, y: 0} --- !u!114 &375966260 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 375966258} m_Enabled: 1 m_EditorHideFlags: 0 @@ -1041,7 +1098,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_Color: {r: 0.118999995, g: 0.118999995, b: 0.118999995, a: 0.7607843} m_RaycastTarget: 1 m_OnCullStateChanged: m_PersistentCalls: @@ -1056,18 +1113,21 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 --- !u!222 &375966261 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 375966258} m_CullTransparentMesh: 0 --- !u!1 &385256435 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 385256436} @@ -1085,7 +1145,8 @@ GameObject: RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 385256435} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -1104,7 +1165,8 @@ RectTransform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 385256435} m_Enabled: 1 m_EditorHideFlags: 0 @@ -1138,8 +1200,8 @@ MonoBehaviour: m_TargetGraphic: {fileID: 364011011} m_HandleRect: {fileID: 364011010} m_Direction: 2 - m_Value: 0 - m_Size: 1 + m_Value: 1 + m_Size: 0.99999994 m_NumberOfSteps: 0 m_OnValueChanged: m_PersistentCalls: @@ -1150,7 +1212,8 @@ MonoBehaviour: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 385256435} m_Enabled: 1 m_EditorHideFlags: 0 @@ -1173,18 +1236,21 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 --- !u!222 &385256439 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 385256435} m_CullTransparentMesh: 0 --- !u!1 &491854708 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 491854709} @@ -1202,7 +1268,8 @@ GameObject: RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 491854708} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -1221,7 +1288,8 @@ RectTransform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 491854708} m_Enabled: 1 m_EditorHideFlags: 0 @@ -1244,18 +1312,21 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 --- !u!222 &491854711 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 491854708} m_CullTransparentMesh: 0 --- !u!114 &491854712 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 491854708} m_Enabled: 1 m_EditorHideFlags: 0 @@ -1267,7 +1338,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 492172210} @@ -1285,7 +1357,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 492172209} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 1, z: 0} @@ -1298,7 +1371,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 492172209} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -1310,7 +1384,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 492172209} m_Enabled: 1 m_CastShadows: 1 @@ -1320,6 +1395,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 1 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -1345,14 +1421,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 492172209} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &536738627 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 536738628} @@ -1367,7 +1445,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 536738627} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -1380,7 +1459,8 @@ Transform: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 540661111} @@ -1401,7 +1481,8 @@ GameObject: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 540661107} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -1413,7 +1494,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 540661107} m_Enabled: 1 m_CastShadows: 1 @@ -1423,6 +1505,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 1 + m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: 2d0f2f374d40b044cad99564f6499b66, type: 2} m_StaticBatchInfo: @@ -1448,14 +1531,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 540661107} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!4 &540661111 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 540661107} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 5, y: 1, z: 0} @@ -1469,7 +1554,8 @@ Transform: AudioSource: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 540661107} m_Enabled: 1 serializedVersion: 4 @@ -1564,7 +1650,8 @@ AudioSource: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 540661107} m_Enabled: 1 m_EditorHideFlags: 0 @@ -1576,7 +1663,8 @@ MonoBehaviour: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 540661107} m_Enabled: 1 m_EditorHideFlags: 0 @@ -1623,13 +1711,15 @@ MonoBehaviour: --- !u!4 &606059359 stripped Transform: m_CorrespondingSourceObject: {fileID: 4628888185422042, guid: f124838f11137ef4fade04d0ac972bc6, - type: 2} - m_PrefabInternal: {fileID: 1838933567} + type: 3} + m_PrefabInstance: {fileID: 1838933567} + m_PrefabAsset: {fileID: 0} --- !u!1 &636989485 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 636989486} @@ -1645,7 +1735,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 636989485} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -1659,7 +1750,8 @@ Transform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 636989485} m_Enabled: 1 m_EditorHideFlags: 0 @@ -1668,6 +1760,7 @@ MonoBehaviour: m_EditorClassIdentifier: sources: - {fileID: 168782044} + detailedDebugging: 0 nextMessageSource: {fileID: 796071488} autoPopulate: 0 enableForNextMessage: @@ -1706,7 +1799,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 638795628} @@ -1722,7 +1816,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 638795627} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -1736,7 +1831,8 @@ Transform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 638795627} m_Enabled: 1 m_EditorHideFlags: 0 @@ -1745,6 +1841,7 @@ MonoBehaviour: m_EditorClassIdentifier: sources: - {fileID: 168782044} + detailedDebugging: 0 nextMessageSource: {fileID: 136464909} autoPopulate: 0 enableForNextMessage: @@ -1783,7 +1880,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 787784673} @@ -1801,7 +1899,8 @@ GameObject: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 787784669} m_Enabled: 1 m_EditorHideFlags: 0 @@ -1817,7 +1916,8 @@ MonoBehaviour: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 787784669} m_Enabled: 1 m_EditorHideFlags: 0 @@ -1827,7 +1927,7 @@ MonoBehaviour: m_UiScaleMode: 1 m_ReferencePixelsPerUnit: 1 m_ScaleFactor: 1 - m_ReferenceResolution: {x: 1920, y: 1080} + m_ReferenceResolution: {x: 1000, y: 700} m_ScreenMatchMode: 0 m_MatchWidthOrHeight: 0 m_PhysicalUnit: 3 @@ -1838,7 +1938,8 @@ MonoBehaviour: Canvas: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 787784669} m_Enabled: 1 serializedVersion: 3 @@ -1858,7 +1959,8 @@ Canvas: RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 787784669} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -1877,7 +1979,8 @@ RectTransform: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 796071486} @@ -1898,7 +2001,8 @@ GameObject: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 796071482} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -1910,7 +2014,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 796071482} m_Enabled: 1 m_CastShadows: 1 @@ -1920,6 +2025,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 1 + m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: 156bb662bf805ff4293c7bedc3c3082d, type: 2} m_StaticBatchInfo: @@ -1945,14 +2051,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 796071482} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!4 &796071486 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 796071482} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0.844, y: 1, z: -4.806} @@ -1966,7 +2074,8 @@ Transform: AudioSource: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 796071482} m_Enabled: 1 serializedVersion: 4 @@ -2061,7 +2170,8 @@ AudioSource: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 796071482} m_Enabled: 1 m_EditorHideFlags: 0 @@ -2073,7 +2183,8 @@ MonoBehaviour: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 796071482} m_Enabled: 1 m_EditorHideFlags: 0 @@ -2121,7 +2232,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 945075561} @@ -2137,7 +2249,8 @@ GameObject: Light: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 945075559} m_Enabled: 1 serializedVersion: 8 @@ -2174,7 +2287,8 @@ Light: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 945075559} m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} m_LocalPosition: {x: 0, y: 3, z: 0} @@ -2187,7 +2301,8 @@ Transform: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1079922267} @@ -2203,7 +2318,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1079922266} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -2216,7 +2332,8 @@ Transform: AudioSource: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1079922266} m_Enabled: 1 serializedVersion: 4 @@ -2311,7 +2428,8 @@ AudioSource: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1087091968} @@ -2326,7 +2444,8 @@ GameObject: RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1087091967} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -2345,7 +2464,8 @@ RectTransform: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1088321519} @@ -2361,7 +2481,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1088321518} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -2374,7 +2495,8 @@ Transform: AudioSource: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1088321518} m_Enabled: 1 serializedVersion: 4 @@ -2469,7 +2591,8 @@ AudioSource: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1163547443} @@ -2485,7 +2608,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1163547442} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 1, z: 0} @@ -2499,7 +2623,8 @@ Transform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1163547442} m_Enabled: 1 m_EditorHideFlags: 0 @@ -2508,6 +2633,7 @@ MonoBehaviour: m_EditorClassIdentifier: sources: - {fileID: 168782044} + detailedDebugging: 0 nextMessageSource: {fileID: 1299307876} autoPopulate: 0 enableForNextMessage: @@ -2546,7 +2672,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1202807407} @@ -2566,7 +2693,8 @@ GameObject: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1202807401} m_Enabled: 1 m_EditorHideFlags: 0 @@ -2578,7 +2706,8 @@ MonoBehaviour: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1202807401} m_Enabled: 1 m_EditorHideFlags: 0 @@ -2615,7 +2744,8 @@ MonoBehaviour: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1202807401} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -2627,7 +2757,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1202807401} m_Enabled: 1 m_CastShadows: 1 @@ -2637,6 +2768,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 1 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -2662,14 +2794,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1202807401} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!4 &1202807407 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1202807401} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 3.3839302, y: -0.35, z: -1.9372907} @@ -2679,145 +2813,215 @@ Transform: m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1223395833 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 491854709} m_Modifications: - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_AnchorMax.x value: 1 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_Pivot.y value: 1 objectReference: {fileID: 0} - target: {fileID: 114720927400143124, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_havePropertiesChanged value: 1 objectReference: {fileID: 0} - target: {fileID: 114720927400143124, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_isInputParsingRequired value: 1 objectReference: {fileID: 0} - target: {fileID: 224160305383547462, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224160305383547462, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_AnchorMax.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224160305383547462, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224160305383547462, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224160305383547462, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 0 objectReference: {fileID: 0} + - target: {fileID: 224160305383547462, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: m_SizeDelta.y + value: 40 + objectReference: {fileID: 0} + - target: {fileID: 224995421561536330, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: m_SizeDelta.y + value: 25 + objectReference: {fileID: 0} + - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: whenNextEventColor.a + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: whenNextEventColor.r + value: 0.740566 + objectReference: {fileID: 0} + - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: whenNextEventColor.g + value: 0.79368824 + objectReference: {fileID: 0} + - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: whenNextEventColor.b + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: whenCompletedColor.r + value: 0.7028302 + objectReference: {fileID: 0} + - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: whenCompletedColor.g + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: whenCompletedColor.b + value: 0.72236216 + objectReference: {fileID: 0} + - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: whenCompletedColor.a + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: defaultColor.r + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: defaultColor.g + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: defaultColor.b + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: defaultColor.a + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 154207b2fe8edf6469479d563d3e8e59, type: 2} - m_IsPrefabAsset: 0 + m_SourcePrefab: {fileID: 100100000, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} --- !u!1 &1299307870 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1299307874} @@ -2838,7 +3042,8 @@ GameObject: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1299307870} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -2850,7 +3055,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1299307870} m_Enabled: 1 m_CastShadows: 1 @@ -2860,6 +3066,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 1 + m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: cdcd9310224fa424bb696b3a16069566, type: 2} m_StaticBatchInfo: @@ -2885,14 +3092,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1299307870} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!4 &1299307874 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1299307870} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 5, y: 1, z: -4.734} @@ -2906,7 +3115,8 @@ Transform: AudioSource: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1299307870} m_Enabled: 1 serializedVersion: 4 @@ -3001,7 +3211,8 @@ AudioSource: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1299307870} m_Enabled: 1 m_EditorHideFlags: 0 @@ -3013,7 +3224,8 @@ MonoBehaviour: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1299307870} m_Enabled: 1 m_EditorHideFlags: 0 @@ -3061,7 +3273,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1471210924} @@ -3082,7 +3295,8 @@ GameObject: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1471210920} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -3094,7 +3308,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1471210920} m_Enabled: 1 m_CastShadows: 1 @@ -3104,6 +3319,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 1 + m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: 613e8da578a66c94f8d7dd6e9c35cfef, type: 2} m_StaticBatchInfo: @@ -3129,14 +3345,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1471210920} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!4 &1471210924 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1471210920} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 5, y: 1, z: -2.097} @@ -3150,7 +3368,8 @@ Transform: AudioSource: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1471210920} m_Enabled: 1 serializedVersion: 4 @@ -3245,7 +3464,8 @@ AudioSource: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1471210920} m_Enabled: 1 m_EditorHideFlags: 0 @@ -3257,7 +3477,8 @@ MonoBehaviour: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1471210920} m_Enabled: 1 m_EditorHideFlags: 0 @@ -3305,7 +3526,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1569524829} @@ -3320,7 +3542,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1569524828} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -3340,7 +3563,8 @@ Transform: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1634999306} @@ -3358,7 +3582,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1634999305} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 1, z: 0} @@ -3371,7 +3596,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1634999305} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -3383,7 +3609,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1634999305} m_Enabled: 1 m_CastShadows: 1 @@ -3393,6 +3620,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 1 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -3418,14 +3646,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1634999305} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1672648492 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1672648496} @@ -3443,7 +3673,8 @@ GameObject: MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1672648492} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -3451,13 +3682,13 @@ MeshCollider: serializedVersion: 3 m_Convex: 0 m_CookingOptions: 14 - m_SkinWidth: 0.01 m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} --- !u!23 &1672648494 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1672648492} m_Enabled: 1 m_CastShadows: 1 @@ -3467,6 +3698,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 1 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -3492,14 +3724,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1672648492} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} --- !u!4 &1672648496 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1672648492} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -3512,7 +3746,8 @@ Transform: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1743168503} @@ -3530,7 +3765,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1743168502} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 1, z: 0} @@ -3543,7 +3779,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1743168502} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -3555,7 +3792,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1743168502} m_Enabled: 1 m_CastShadows: 1 @@ -3565,6 +3803,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 1 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -3590,14 +3829,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1743168502} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1770791379 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1770791380} @@ -3613,7 +3854,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1770791379} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -3627,7 +3869,8 @@ Transform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1770791379} m_Enabled: 1 m_EditorHideFlags: 0 @@ -3636,6 +3879,7 @@ MonoBehaviour: m_EditorClassIdentifier: sources: - {fileID: 168782044} + detailedDebugging: 0 nextMessageSource: {fileID: 540661113} autoPopulate: 0 enableForNextMessage: @@ -3674,7 +3918,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1771014850} @@ -3691,7 +3936,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1771014849} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -3706,7 +3952,8 @@ Transform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1771014849} m_Enabled: 1 m_EditorHideFlags: 0 @@ -3715,6 +3962,11 @@ MonoBehaviour: m_EditorClassIdentifier: Messages: - {fileID: 114683655999235588, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} + matchStarting: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null matchComplete: m_PersistentCalls: m_Calls: @@ -3731,6 +3983,7 @@ MonoBehaviour: m_CallState: 2 m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + debug: 0 matchFailed: m_PersistentCalls: m_Calls: @@ -3752,7 +4005,8 @@ MonoBehaviour: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1771014849} m_Enabled: 1 m_EditorHideFlags: 0 @@ -3766,7 +4020,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1816184698} @@ -3782,7 +4037,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1816184697} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -3795,7 +4051,8 @@ Transform: AudioSource: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1816184697} m_Enabled: 1 serializedVersion: 4 @@ -3890,7 +4147,8 @@ AudioSource: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1824248533} @@ -3905,7 +4163,8 @@ GameObject: RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1824248532} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -3921,65 +4180,65 @@ RectTransform: m_SizeDelta: {x: -20, y: -20} m_Pivot: {x: 0.5, y: 0.5} --- !u!1001 &1838933567 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + - target: {fileID: 1244723767573728, guid: f124838f11137ef4fade04d0ac972bc6, type: 3} + propertyPath: m_Name + value: Player + objectReference: {fileID: 0} + - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 3} propertyPath: m_LocalRotation.y value: 0.9659258 objectReference: {fileID: 0} - - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 3} propertyPath: m_LocalRotation.w value: 0.2588191 objectReference: {fileID: 0} - - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 3} propertyPath: m_RootOrder value: 5 objectReference: {fileID: 0} - - target: {fileID: 1244723767573728, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} - propertyPath: m_Name - value: Player - objectReference: {fileID: 0} - - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} + - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 150 objectReference: {fileID: 0} - target: {fileID: 114571473726663984, guid: f124838f11137ef4fade04d0ac972bc6, - type: 2} + type: 3} propertyPath: head value: objectReference: {fileID: 606059359} m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: f124838f11137ef4fade04d0ac972bc6, type: 2} - m_IsPrefabAsset: 0 + m_SourcePrefab: {fileID: 100100000, guid: f124838f11137ef4fade04d0ac972bc6, type: 3} --- !u!1 &1871891754 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1871891755} @@ -3996,7 +4255,8 @@ GameObject: RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1871891754} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -4014,7 +4274,8 @@ RectTransform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1871891754} m_Enabled: 1 m_EditorHideFlags: 0 @@ -4037,18 +4298,21 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 --- !u!222 &1871891757 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1871891754} m_CullTransparentMesh: 0 --- !u!1 &1909489377 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1909489380} @@ -4065,7 +4329,8 @@ GameObject: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1909489377} m_Enabled: 1 m_EditorHideFlags: 0 @@ -4083,7 +4348,8 @@ MonoBehaviour: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1909489377} m_Enabled: 1 m_EditorHideFlags: 0 @@ -4097,7 +4363,8 @@ MonoBehaviour: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1909489377} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -4110,7 +4377,8 @@ Transform: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1982592445} @@ -4128,7 +4396,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1982592444} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -4141,7 +4410,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1982592444} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -4153,7 +4423,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1982592444} m_Enabled: 1 m_CastShadows: 1 @@ -4163,6 +4434,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 1 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -4188,25 +4460,34 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1982592444} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!224 &2004723107 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} - m_PrefabInternal: {fileID: 1223395833} + type: 3} + m_PrefabInstance: {fileID: 1223395833} + m_PrefabAsset: {fileID: 0} --- !u!114 &2004723108 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 114400973501864318, guid: 154207b2fe8edf6469479d563d3e8e59, - type: 2} - m_PrefabInternal: {fileID: 1223395833} + type: 3} + m_PrefabInstance: {fileID: 1223395833} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 5dabfd477c564c518af7ad4e2362742a, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &2005220180 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 2005220181} @@ -4222,7 +4503,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2005220180} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 3.3839302, y: -0.5588294, z: -1.9372907} @@ -4238,7 +4520,8 @@ Transform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2005220180} m_Enabled: 1 m_EditorHideFlags: 0 @@ -4250,11 +4533,13 @@ MonoBehaviour: - {fileID: 1771014852} - {fileID: 121474010} tutorialSteps: {fileID: 2004723108} + debug: 0 --- !u!1 &2089696629 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 2089696630} @@ -4270,7 +4555,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2089696629} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -4283,7 +4569,8 @@ Transform: AudioSource: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2089696629} m_Enabled: 1 serializedVersion: 4 diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStateData.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStateData.cs index 1f5aa52..7154bb6 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStateData.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStateData.cs @@ -12,7 +12,7 @@ public class TutorialEventStateData : IReadOnlyList, { readonly List subTasks; - public TutorialEventStateData(TutorialEventMessage sourceMessage, + public TutorialEventStateData(BasicEventStreamMessage sourceMessage, bool completed, bool expectedNext, IReadOnlyList data) @@ -23,11 +23,11 @@ public TutorialEventStateData(TutorialEventMessage sourceMessage, subTasks = new List(data); } - public TutorialEventStateData(TutorialEventMessage sourceMessage, + public TutorialEventStateData(BasicEventStreamMessage sourceMessage, bool completed, bool expectedNext, params TutorialEventStateData[] data) : - this(sourceMessage, completed, expectedNext, (IReadOnlyList) data) + this(sourceMessage, completed, expectedNext, (IReadOnlyList)data) { } @@ -96,7 +96,7 @@ public override bool Equals(object obj) return false; } - return Equals((TutorialEventStateData) obj); + return Equals((TutorialEventStateData)obj); } public override int GetHashCode() diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStatePublisher.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStatePublisher.cs index 270aefb..49087a7 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStatePublisher.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStatePublisher.cs @@ -13,7 +13,7 @@ public class TutorialProgressEvent : UnityEvent stateChanged; - public TutorialEventMessage SuccessMessage => successMessage; + public BasicEventStreamMessage SuccessMessage => successMessage; public EventMessageMatcherState MatchResult => stateChain.MatchResult; diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStreamManager.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStreamManager.cs index a086094..af7fd97 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStreamManager.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStreamManager.cs @@ -197,7 +197,7 @@ static TutorialEventStateData AddTree(ExpectedStates state, } else { - var message = Convert(s.Message); + var message = (s.Message); childStates.Add(new TutorialEventStateData(message, s.Completed, s.ExpectedNext)); } } @@ -236,13 +236,13 @@ class ExpectedStates { public readonly List RequiredMessages; public readonly TutorialEventStatePublisher MessageSource; - public readonly TutorialEventMessage SuccessMessage; + public readonly BasicEventStreamMessage SuccessMessage; public readonly HashSet Dependencies; readonly bool debug; public ExpectedStates(TutorialEventStatePublisher message, - TutorialEventMessage successMessage, - List requiredMessages, + BasicEventStreamMessage successMessage, + List requiredMessages, bool debug) { MessageSource = message; From 6288598ea985af63a32497ef092081f080400002 Mon Sep 17 00:00:00 2001 From: Thomas Morgner Date: Mon, 11 Mar 2019 19:12:08 +0000 Subject: [PATCH 08/24] Disable mouse movement when trying click something on the screen. --- .../Scenes/Scripts/CharacterBehaviour.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Assets/Plugins/UnityTutorialSystem/Scenes/Scripts/CharacterBehaviour.cs b/Assets/Plugins/UnityTutorialSystem/Scenes/Scripts/CharacterBehaviour.cs index 75ae52b..a9900a0 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scenes/Scripts/CharacterBehaviour.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scenes/Scripts/CharacterBehaviour.cs @@ -17,6 +17,7 @@ public class CharacterBehaviour : MonoBehaviour [SerializeField] bool invertHeadLook; CharacterController characterController; [SerializeField] Transform head; + [SerializeField] bool mouseMovement; public UnityEvent MovementBlocked; public UnityEvent Moving; @@ -49,7 +50,7 @@ void OnDisable() void FixedUpdate() { var h = Input.GetAxis("Horizontal"); - if (!independentHeadMovement) + if (mouseMovement && !independentHeadMovement) { h += Input.GetAxis("Mouse X"); } @@ -74,7 +75,10 @@ void FixedUpdate() transform.Rotate(Vector3.up, h * rotationSpeed * Time.fixedDeltaTime); } - HandleMouseLook(); + if (mouseMovement) + { + HandleMouseLook(); + } MovementResult = characterController.Move(velocity); From d0afc46acc0f36706ee1a0e5c0ff0e1c57d78624 Mon Sep 17 00:00:00 2001 From: Thomas Morgner Date: Mon, 11 Mar 2019 19:52:51 +0000 Subject: [PATCH 09/24] Added README with actual content, removed unused files. --- .../Scripts/UI/Trees/DefaultTreeModel.cs | 83 -------- .../Scripts/UI/Trees/DefaultTreeModel.cs.meta | 11 - .../Scripts/UI/Trees/DefaultTreeNode.cs | 200 ------------------ .../Scripts/UI/Trees/DefaultTreeNode.cs.meta | 11 - .../UI/Trees/DefaultTreeNodeComparer.cs | 57 ----- .../UI/Trees/DefaultTreeNodeComparer.cs.meta | 11 - .../UI/Trees/DefaultTreeSelectionModel.cs | 146 ------------- .../Trees/DefaultTreeSelectionModel.cs.meta | 11 - .../Scripts/UI/Trees/ITreeSelectionModel.cs | 18 -- .../UI/Trees/ITreeSelectionModel.cs.meta | 11 - .../Scripts/UI/Trees/TreeNodeExtensions.cs | 24 --- .../UI/Trees/TreeNodeExtensions.cs.meta | 3 - README.md | 186 ++++++++++++++++ 13 files changed, 186 insertions(+), 586 deletions(-) delete mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeModel.cs delete mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeModel.cs.meta delete mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNode.cs delete mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNode.cs.meta delete mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNodeComparer.cs delete mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNodeComparer.cs.meta delete mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeSelectionModel.cs delete mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeSelectionModel.cs.meta delete mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeSelectionModel.cs delete mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeSelectionModel.cs.meta delete mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeNodeExtensions.cs delete mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeNodeExtensions.cs.meta diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeModel.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeModel.cs deleted file mode 100644 index bec5238..0000000 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeModel.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; - -namespace TutorialSystem.UI.Trees -{ - [Serializable] - public class DefaultTreeModel : TreeModel - { - DefaultTreeNode root; - - public DefaultTreeModel() - { - Root = new DefaultTreeNode(); - } - - public DefaultTreeModel(DefaultTreeNode root) - { - Root = root; - } - - public override bool HasRoot => root != null; - - public override DefaultTreeNode Root - { - get { return root; } - set - { - var old = root; - root = value; - if (!ReferenceEquals(old, root)) - { - FireStructureChanged(); - } - } - } - - public override bool IsLeaf(DefaultTreeNode node) - { - return node.IsLeaf; - } - - public override DefaultTreeNode GetChildAt(DefaultTreeNode parent, int index) - { - return parent[index]; - } - - public override int ChildCount(DefaultTreeNode parent) - { - return parent.Count; - } - - public override int GetIndexOfChild(DefaultTreeNode parent, DefaultTreeNode child) - { - return parent.IndexOf(child); - } - - public void InsertChild(DefaultTreeNode parent, DefaultTreeNode child) - { - child.Parent?.Remove(child); - - var index = parent.Count; - parent.InsertAt(child, index); - FireNodeInserted(parent.Path, index, child); - } - - public void InsertChild(DefaultTreeNode parent, DefaultTreeNode child, int index) - { - parent.InsertAt(child, index); - FireNodeInserted(parent.Path, index, child); - } - - public void RemoveChild(DefaultTreeNode parent, DefaultTreeNode child) - { - var idx = parent.IndexOf(child); - if (idx == -1) - { - throw new ArgumentException(); - } - - parent.Remove(child); - FireNodeRemoved(parent.Path, idx, child); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeModel.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeModel.cs.meta deleted file mode 100644 index e80e0e3..0000000 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeModel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 77a4518412dfe494b90b2e03cc0829be -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNode.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNode.cs deleted file mode 100644 index 41e9705..0000000 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNode.cs +++ /dev/null @@ -1,200 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace TutorialSystem.UI.Trees -{ - [Serializable] - public class DefaultTreeNode : IReadOnlyList, IEquatable - { - // ReSharper disable once CollectionNeverUpdated.Local - static readonly List emptyNodes = new List(); - - List backend; - object value; - TreePath path; - DefaultTreeNode parent; - - public DefaultTreeNode(bool asLeaf = false, object value = null) - { - IsLeaf = asLeaf; - this.value = value; - } - - public TreePath Path - { - get - { - if (path != null) - { - return path; - } - - if (Parent == null) - { - path = new TreePath(this); - } - else - { - path = new TreePath(Parent.Path, this); - } - - return path; - } - } - - public object Value - { - get { return value; } - set { this.value = value; } - } - - public DefaultTreeNode Parent - { - get { return parent; } - private set - { - parent = value; - path = null; - } - } - - public bool IsLeaf { get; } - - public bool Equals(DefaultTreeNode other) - { - return ReferenceEquals(this, other); - } - - public DefaultTreeNode this[int index] - { - get - { - if (backend == null) - { - throw new IndexOutOfRangeException(); - } - - return backend[index]; - } - } - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - public int Count => backend?.Count ?? 0; - - public override bool Equals(object obj) - { - if (ReferenceEquals(null, obj)) - { - return false; - } - - if (ReferenceEquals(this, obj)) - { - return true; - } - - if (obj.GetType() != GetType()) - { - return false; - } - - return Equals((DefaultTreeNode) obj); - } - - public override int GetHashCode() - { - return RuntimeHelpers.GetHashCode(this); - } - - public static bool operator ==(DefaultTreeNode left, DefaultTreeNode right) - { - return Equals(left, right); - } - - public static bool operator !=(DefaultTreeNode left, DefaultTreeNode right) - { - return !Equals(left, right); - } - - public void Add(DefaultTreeNode child) - { - var oldParent = child.Parent; - if ((oldParent != null) && !oldParent.Remove(child)) - { - throw new ArgumentException(); - } - - if (backend == null) - { - backend = new List(); - } - - backend.Add(child); - child.Parent = this; - } - - public override string ToString() - { - return $"{Value}"; - } - - public List.Enumerator GetEnumerator() - { - return backend?.GetEnumerator() ?? emptyNodes.GetEnumerator(); - } - - public bool Remove(DefaultTreeNode child) - { - if (backend == null) - { - return false; - } - - if (backend.Remove(child)) - { - child.Parent = null; - return true; - } - - return false; - } - - public int IndexOf(DefaultTreeNode child) - { - if (backend == null) - { - return -1; - } - - return backend.IndexOf(child); - } - - public void InsertAt(DefaultTreeNode child, int index) - { - var oldParent = child.Parent; - if ((oldParent != null) && !oldParent.Remove(child)) - { - throw new ArgumentException(); - } - - if (backend == null) - { - backend = new List(); - } - - backend.Insert(index, child); - child.Parent = this; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNode.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNode.cs.meta deleted file mode 100644 index 4e79653..0000000 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 46b7ab3545b06c94f9f6596e237e1bbd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNodeComparer.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNodeComparer.cs deleted file mode 100644 index ccc1790..0000000 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNodeComparer.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace TutorialSystem.UI.Trees -{ - public class DefaultTreeNodeComparer : IComparer - { - readonly IComparer valueComparer; - - public DefaultTreeNodeComparer(IComparer valueComparer) - { - if (valueComparer == null) - { - throw new ArgumentNullException(nameof(valueComparer)); - } - - this.valueComparer = valueComparer; - } - - public int Compare(DefaultTreeNode x, DefaultTreeNode y) - { - if ((x == null) && (y == null)) - { - return 0; - } - - if (x == null) - { - return -1; - } - - if (y == null) - { - return 1; - } - - var xT = x.Value is T; - var yT = y.Value is T; - if (!xT && !yT) - { - return 0; - } - - if (!xT) - { - return -1; - } - - if (!yT) - { - return 1; - } - - return valueComparer.Compare((T) x.Value, (T) y.Value); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNodeComparer.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNodeComparer.cs.meta deleted file mode 100644 index a0b1265..0000000 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeNodeComparer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 59511ee80acae8844b772eacd36d9620 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeSelectionModel.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeSelectionModel.cs deleted file mode 100644 index 6712ee9..0000000 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeSelectionModel.cs +++ /dev/null @@ -1,146 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; - -namespace TutorialSystem.UI.Trees -{ - public class DefaultTreeSelectionModel : ITreeSelectionModel - { - readonly List> backend; - - public DefaultTreeSelectionModel() - { - backend = new List>(); - SelectionMode = SelectionMode.SingleSelection; - } - - public SelectionMode SelectionMode { get; set; } - public Func, int> RowMapper { get; set; } - - public TreePath SelectionPath - { - get - { - if (backend.Count > 0) - { - return backend[0]; - } - - return null; - } - set - { - backend.Clear(); - if (value != null) - { - backend.Add(value); - } - - SelectionChanged?.Invoke(this, EventArgs.Empty); - } - } - - public bool Contains(TreePath item) - { - return backend.Contains(item); - } - - public void SetPaths(TreePath[] p) - { - backend.Clear(); - if (p.Length != 0) - { - if (SelectionMode == SelectionMode.SingleSelection) - { - backend.Add(p[0]); - } - else if (SelectionMode == SelectionMode.ContinuousSelection) - { - if (IsContinuous(p)) - { - backend.AddRange(p); - } - else - { - backend.Add(p[0]); - } - } - else - { - backend.AddRange(p); - } - } - - SelectionChanged?.Invoke(this, EventArgs.Empty); - } - - public void Add(TreePath p) - { - var tmp = new List> {p}; - tmp.AddRange(backend); - SetPaths(tmp.ToArray()); - } - - public void Remove(TreePath p) - { - var tmp = new List>(backend); - tmp.Remove(p); - SetPaths(tmp.ToArray()); - } - - IEnumerator> IEnumerable>.GetEnumerator() - { - return GetEnumerator(); - } - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - public int Count => backend.Count; - - public TreePath this[int index] => backend[index]; - - public event EventHandler SelectionChanged; - - bool IsContinuous(TreePath[] treePaths) - { - if (treePaths.Length == 0) - { - return true; - } - - var selectionByIndex = new int[treePaths.Length]; - for (var idx = 0; idx < selectionByIndex.Length; idx += 1) - { - var x = RowMapper?.Invoke(treePaths[idx]) ?? -1; - selectionByIndex[idx] = x; - } - - Array.Sort(selectionByIndex); - var expected = selectionByIndex[0]; - if (expected == -1) - { - return false; - } - - for (var idx = 1; idx < selectionByIndex.Length; idx += 1) - { - if (selectionByIndex[idx] != expected + 1) - { - return false; - } - - expected += 1; - } - - return true; - } - - public List>.Enumerator GetEnumerator() - { - return backend.GetEnumerator(); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeSelectionModel.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeSelectionModel.cs.meta deleted file mode 100644 index 202d927..0000000 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/DefaultTreeSelectionModel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 763631fa213e862489413f39d756d7b2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeSelectionModel.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeSelectionModel.cs deleted file mode 100644 index 26dc8d2..0000000 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeSelectionModel.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace TutorialSystem.UI.Trees -{ - public interface ITreeSelectionModel : IReadOnlyList> - { - SelectionMode SelectionMode { get; set; } - TreePath SelectionPath { get; set; } - - Func, int> RowMapper { get; set; } - void SetPaths(TreePath[] p); - void Add(TreePath p); - void Remove(TreePath p); - bool Contains(TreePath p); - event EventHandler SelectionChanged; - } -} \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeSelectionModel.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeSelectionModel.cs.meta deleted file mode 100644 index 341b8e9..0000000 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeSelectionModel.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 17c3de2c5e238f74e9f9c7bd0a82f75f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeNodeExtensions.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeNodeExtensions.cs deleted file mode 100644 index 9977193..0000000 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeNodeExtensions.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections.Generic; - -namespace TutorialSystem.UI.Trees -{ - public static class TreeNodeExtensions - { - public static int InsertSorted(this DefaultTreeNode parent, DefaultTreeNode node, IComparer sorter) - { - var c = parent.Count; - for (var idx = 0; idx < c; idx += 1) - { - var current = parent[idx]; - if (sorter.Compare(current, node) > 0) - { - parent.InsertAt(node, idx); - return idx; - } - } - - parent.Add(node); - return c; - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeNodeExtensions.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeNodeExtensions.cs.meta deleted file mode 100644 index ac0372b..0000000 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeNodeExtensions.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 5b1bc13fab5a4e4291d349b782b4bb86 -timeCreated: 1546539985 \ No newline at end of file diff --git a/README.md b/README.md index 97613b4..41f64ff 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,188 @@ # Unity Tutorial-System Engine +This module contains the necessary code to build an event based tutorial +system for Unity games. + +In modern games we player expect to be gently taught how to play the game. +For this purpose the first level or two contains a carefully choreographed +walk-through where each step is laid out clearly. The game tracks our +progress and guides us towards the next step. + +The code in this module contains all necessary ingredients to build such +a system. It contains an central event bus with predefined, strongly +referenced events, state tracking and user interface components to visualise +the current state of the tutorial. + +Larger sequences of events can be broken down into smaller tasks. You can +flexibly combine multiple task-flows into larger work-flows, including +optional or alternative tasks. + +## Usage and Setup + +### Step 1: Define the events the system tracks. + +The system tracks events that happen in your game. I would recommend to +model these events as a workflow or sequence diagram, it will make your +task a lot easier. + +After planing out which events you need in your game, create one ore more +EventStream scriptable objects (via the menu +``Assets->Create ..->Event Stream->Event Stream``). + +Each EventStream declears the messages it can handle. Messages are in +itself scriptable objects and can contain additional properties. + +To create messages, open the event stream object in the Unity inspector +and add entries to the "Message Types" list. When you defined all entries, +save the object, then press "Generate Message Handles", and then save +once again. + +(Scriptable objects that have been generated as child objects do not show +up in the inspector and project browser until the currently pending +changes have been saved. This is a peculiar Unity-Editor behaviour that +we cannot change.) + +***Warning***: If you rename or reorder events, Unity will generate new +object-IDs for each message. This usually erases all references to these +objects in MonoBehaviours. After making changs to the event-stream, you +will have to revalidate your objects. + +### Step 2: Generating event-stream messages + +Program your game logic as usual. Whenever something happens in your game +that should trigger a state change in the tutorial (ie. the player completed +a task) you need to fire an event for the event-stream. + +Each mesasge object carries a reference to its event stream. If you have a +reference to a message, you can simply fire the event by invoking +``BasicEventStreamMessage#Publish()``. + +The UnityTutorialSystem ships with a ``PublishStreamEvent`` MonoBehaviour that +you can add to your existing game objects. This MonoBehaviour holds a +reference to a EventStreamMessage object and contains a single public +method (``TriggerEvent()``) to publish the event to the event stream. You can +either call this method from your code (or hold a reference to the +EventStreamMessage and call ``Publish()`` yourself), or you can wire up this +method to an UnityEvent that your game object componentns expose. + +The cubes in the demo scene contain a MouseEventPublisher script that raises +an UnityEvent for each mouse event that is triggered on MonoBehaviour scripts. +In the demo, the ``clicked`` event then calls the +``PublishStreamEvent#TriggerEvent`` method on the PublishStreamEvent that is +also added to each cube. + +### Step 3: Processing event stream messages + +Each event stream forwards all valid received events to all listeners for +processing. The processing to combine multiple events to track larger state +changes happens in event aggregator MonoBehaviours. + +The default implementations shipped in the library are configured with a list +of EventStreamMessage objects. The aggregators automatically subscribe to all +required event message streams and expose UnityEvents for when the aggregator +becomes active, progressed to the next state, and when matching succeeded or +failed. All aggregators track all relevant event states internally and +publish the current state of its tracking via the ListEvents method. The +EventMessageState informs you of each message the stream expects and whether +the message has been received, or whether this message is the next expected +event. + +For event processing the UnityTutorialSystem provides the following implementations: + +* EventSequenceAggregator + + Represents an ordered sequence of events. The event aggregator will report + a successful match if all defined events have been recorded in the defined + order. + + This aggregator can process events out of order if the next event message + is marked as out-of-order executable, and if the event aggregator's + validation mode is set to ``AllowOutOfOrderEvents``. + + > In the demo scene, the MelodyStateHandler is a sequence aggregator + > that tracks clicks on the coloured cubes. Each click generates + > a tone and successfully playing the melody will complete the task. + +* EventSetAggregator + + Represents an unordered sequence of events. + + The aggregator will report a successful match if all defined events have + seen seen at least once. + + If matching is set to strict, the aggregator will fail the matching if + any duplicate event has been received. + +* OneOfEventSetAggregator + + Represents a choice of events. This aggregator will report an success as + soon as one of the defined events has been received. + +* EventMessageCounter + + An simple example aggregator that counts incoming events that match + the given event message. + +### Step 4: Combine Event Aggregators + +Each event aggregator publishes UnityEvents during state changes. This +means you can add a PublishStreamEvent component to publish messages on +these events. + +As it is very common to send events when a event aggregation +is complete, this project also contains the specialised +``TutorialEventStatePublisher`` MonoBehaviour to simplify the configuration +of the event processing. + +### Step 5: Displaying Task Lists + +Tutorials usually display a list of tasks to guide the player through +these crucial first steps. This project ships with a simple Tree/List +GUI component that displays the known events inside a Unity GUI. + +The tree/list display consists of two parts: + +* The TutorialEventStreamManager is responsible for building a + display model of all known event aggregators and their relationships + between each other. This class constantly monitors and updates all + aggregators to update the display model with the new data. + + The resulting model is then published to a TutorialEventTreeView. + +* The TutorialEventTreeView is a Unity-GUI controller that is responsible + for displaying the model content in the UI. + + In the demo a Unity-canvas contains a ScrollPane and a dynamic, + vertical list of elements. The ``ContentList`` game object contains + the TreeView script that is responsible for instantiating new display + elements for each element in the tree model. + + The ``_Template`` game object is used as template for each data item. + +If an EventAggregator uses a TutorialEventStatePublisher +to publishes a success message, and if that message is expected in another +EventAggregator, the TutorialEventStreamManager treats this as a +hierarchical relationship between the two aggregators. + +> In the sample scene, the 'CombinedStateHandler' aggregator game object +> receives events from both the MelodyStateHandler and the ButtonStateHandler +> object. The TutorialEventStreamManager on the StateHandlers game object +> therefore treats both both the MelodyStateHandler and the ButtonStateHandler +> as dependents (ie child tasks) of the CombinedStateHandler. + +### Step 6: Indicating the next possible step + +No player wants to be left guessing the next valid step in a tutorial. +Therefore games commonly show indicators over the game objects where the +player can solve the next task. + +In the UnityTutorialSystem project, the ``NextEventSelector`` monobehaviour +implements a simple tracking script that watches event aggregators for +changes. If the defined 'next message' becomes one of the expected +next steps in the monitored aggregators this script fires an +``enableForNextMessage`` event, and a ``disableForNextMessage`` event +when the define event stream message is no longer an expected next step. + +In the demo scene we use this to enable and disable small bouncing ball +indicators over the next cube the player should click. + From 17da47542a5fdf742ad4dcad3cad444cbca1584d Mon Sep 17 00:00:00 2001 From: Thomas Morgner Date: Wed, 13 Mar 2019 17:32:19 +0000 Subject: [PATCH 10/24] Clean up, removing obsolete code, reducing the helpers package. --- .../Scenes/Scripts/CharacterBehaviour.cs | 2 +- .../Scripts/Events/LogEventStream.cs | 28 ++++++++++++------- .../NextEventAggregationActivator.cs | 0 .../NextEventAggregationActivator.cs.meta | 0 .../Scripts/UI/Trees/SelectionMode.cs | 9 ------ .../Scripts/UI/Trees/SelectionMode.cs.meta | 11 -------- 6 files changed, 19 insertions(+), 31 deletions(-) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Helpers => Events}/NextEventAggregationActivator.cs (100%) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Helpers => Events}/NextEventAggregationActivator.cs.meta (100%) delete mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/SelectionMode.cs delete mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/SelectionMode.cs.meta diff --git a/Assets/Plugins/UnityTutorialSystem/Scenes/Scripts/CharacterBehaviour.cs b/Assets/Plugins/UnityTutorialSystem/Scenes/Scripts/CharacterBehaviour.cs index a9900a0..a5900bf 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scenes/Scripts/CharacterBehaviour.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scenes/Scripts/CharacterBehaviour.cs @@ -15,9 +15,9 @@ public class CharacterBehaviour : MonoBehaviour [SerializeField] float rotationSpeed; [SerializeField] bool independentHeadMovement; [SerializeField] bool invertHeadLook; - CharacterController characterController; [SerializeField] Transform head; [SerializeField] bool mouseMovement; + CharacterController characterController; public UnityEvent MovementBlocked; public UnityEvent Moving; diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs index 96b338c..7fd1611 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs @@ -1,35 +1,43 @@ -using UnityEngine; +using System; +using UnityEngine; +using UnityEngine.Events; namespace TutorialSystem.Events { - [CreateAssetMenu(menuName = "Event Stream/Logging")] - public class LogEventStream : ScriptableObject + public class LogEventStream : MonoBehaviour { [SerializeField] BasicEventStream stream; [SerializeField] bool enabled; + readonly UnityAction messageHandler; + + public LogEventStream() + { + messageHandler = OnEventReceived; + } void OnDisable() { if (stream != null) { - stream.ReceivedEvent.RemoveListener(OnEventReceived); + stream.ReceivedEvent.RemoveListener(messageHandler); } } - void OnEventReceived(BasicEventStreamMessage message) + void OnEnable() { - if (enabled) + if (stream != null) { - Debug.Log(message); + stream.ReceivedEvent.AddListener(messageHandler); } } - void OnEnable() + void OnEventReceived(BasicEventStreamMessage message) { - if (stream != null) + if (enabled) { - stream.ReceivedEvent.AddListener(OnEventReceived); + Debug.Log(message); } } + } } \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/NextEventAggregationActivator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventAggregationActivator.cs similarity index 100% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/NextEventAggregationActivator.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventAggregationActivator.cs diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/NextEventAggregationActivator.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventAggregationActivator.cs.meta similarity index 100% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/NextEventAggregationActivator.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventAggregationActivator.cs.meta diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/SelectionMode.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/SelectionMode.cs deleted file mode 100644 index d156f68..0000000 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/SelectionMode.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace TutorialSystem.UI.Trees -{ - public enum SelectionMode - { - SingleSelection, - ContinuousSelection, - MultiSelection - } -} \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/SelectionMode.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/SelectionMode.cs.meta deleted file mode 100644 index 2bf8347..0000000 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/SelectionMode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e27ee84c8512fb340a86d4b0b1befc7b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: From cb791d49f07ef254e272d48d88a16428e4d4571f Mon Sep 17 00:00:00 2001 From: Thomas Morgner Date: Wed, 13 Mar 2019 17:47:06 +0000 Subject: [PATCH 11/24] More cleanup. --- .../EventMessageAggregatorStatePublisher.cs} | 16 ++-- ...ntMessageAggregatorStatePublisher.cs.meta} | 0 .../Scripts/Events/LogEventStream.cs | 4 +- .../Scripts/{ => Helpers}/SharedMethods.cs | 0 .../{ => Helpers}/SharedMethods.cs.meta | 0 .../UnityTutorialSystem/Scripts/Tutorial.meta | 3 + .../TutorialEventMessage.cs | 0 .../TutorialEventMessage.cs.meta | 0 .../TutorialEventStateData.cs | 0 .../TutorialEventStateData.cs.meta | 0 .../TutorialEventStream.cs | 0 .../TutorialEventStream.cs.meta | 0 .../TutorialEventStreamManager.cs | 18 +++-- .../TutorialEventStreamManager.cs.meta | 0 .../TutorialEventTreeItemRenderer.cs | 3 +- .../TutorialEventTreeItemRenderer.cs.meta | 0 .../TutorialEventTreeView.cs | 0 .../TutorialEventTreeView.cs.meta | 0 .../Scripts/UI/EventStreamState.cs | 77 ------------------- .../Scripts/UI/EventStreamState.cs.meta | 3 - .../Scripts/UI/VisibleDuringEdit.cs | 1 - 21 files changed, 24 insertions(+), 101 deletions(-) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Helpers/TutorialEventStatePublisher.cs => Events/EventMessageAggregatorStatePublisher.cs} (83%) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Helpers/TutorialEventStatePublisher.cs.meta => Events/EventMessageAggregatorStatePublisher.cs.meta} (100%) rename Assets/Plugins/UnityTutorialSystem/Scripts/{ => Helpers}/SharedMethods.cs (100%) rename Assets/Plugins/UnityTutorialSystem/Scripts/{ => Helpers}/SharedMethods.cs.meta (100%) create mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial.meta rename Assets/Plugins/UnityTutorialSystem/Scripts/{Helpers => Tutorial}/TutorialEventMessage.cs (100%) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Helpers => Tutorial}/TutorialEventMessage.cs.meta (100%) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Helpers => Tutorial}/TutorialEventStateData.cs (100%) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Helpers => Tutorial}/TutorialEventStateData.cs.meta (100%) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Helpers => Tutorial}/TutorialEventStream.cs (100%) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Helpers => Tutorial}/TutorialEventStream.cs.meta (100%) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Helpers => Tutorial}/TutorialEventStreamManager.cs (91%) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Helpers => Tutorial}/TutorialEventStreamManager.cs.meta (100%) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Helpers => Tutorial}/TutorialEventTreeItemRenderer.cs (97%) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Helpers => Tutorial}/TutorialEventTreeItemRenderer.cs.meta (100%) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Helpers => Tutorial}/TutorialEventTreeView.cs (100%) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Helpers => Tutorial}/TutorialEventTreeView.cs.meta (100%) delete mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamState.cs delete mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamState.cs.meta diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStatePublisher.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/EventMessageAggregatorStatePublisher.cs similarity index 83% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStatePublisher.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/EventMessageAggregatorStatePublisher.cs index 49087a7..310ca47 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStatePublisher.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/EventMessageAggregatorStatePublisher.cs @@ -6,22 +6,22 @@ namespace TutorialSystem.Helpers { - public class TutorialProgressEvent : UnityEvent + public class EventMessageAggregatorStatePublisher : StreamEventSource { - } + public class ProgressEvent : UnityEvent + { + } - public class TutorialEventStatePublisher : StreamEventSource - { [SerializeField] EventMessageAggregator stateChain; [SerializeField] BasicEventStreamMessage successMessage; - [SerializeField] TutorialProgressEvent stateChanged; + [SerializeField] ProgressEvent stateChanged; - public TutorialEventStatePublisher() + public EventMessageAggregatorStatePublisher() { - stateChanged = new TutorialProgressEvent(); + stateChanged = new ProgressEvent(); } - public TutorialProgressEvent StateChanged => stateChanged; + public ProgressEvent StateChanged => stateChanged; public BasicEventStreamMessage SuccessMessage => successMessage; public EventMessageMatcherState MatchResult => stateChain.MatchResult; diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStatePublisher.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/EventMessageAggregatorStatePublisher.cs.meta similarity index 100% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStatePublisher.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Events/EventMessageAggregatorStatePublisher.cs.meta diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs index 7fd1611..5287e7e 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs @@ -7,7 +7,7 @@ namespace TutorialSystem.Events public class LogEventStream : MonoBehaviour { [SerializeField] BasicEventStream stream; - [SerializeField] bool enabled; + [SerializeField] bool printMessages; readonly UnityAction messageHandler; public LogEventStream() @@ -33,7 +33,7 @@ void OnEnable() void OnEventReceived(BasicEventStreamMessage message) { - if (enabled) + if (printMessages) { Debug.Log(message); } diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/SharedMethods.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/SharedMethods.cs similarity index 100% rename from Assets/Plugins/UnityTutorialSystem/Scripts/SharedMethods.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/SharedMethods.cs diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/SharedMethods.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/SharedMethods.cs.meta similarity index 100% rename from Assets/Plugins/UnityTutorialSystem/Scripts/SharedMethods.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/SharedMethods.cs.meta diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial.meta new file mode 100644 index 0000000..8c3b056 --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c8b30dd5732040d89851b010738b6251 +timeCreated: 1552498685 \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventMessage.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventMessage.cs similarity index 100% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventMessage.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventMessage.cs diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventMessage.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventMessage.cs.meta similarity index 100% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventMessage.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventMessage.cs.meta diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStateData.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStateData.cs similarity index 100% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStateData.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStateData.cs diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStateData.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStateData.cs.meta similarity index 100% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStateData.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStateData.cs.meta diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStream.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStream.cs similarity index 100% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStream.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStream.cs diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStream.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStream.cs.meta similarity index 100% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStream.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStream.cs.meta diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStreamManager.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs similarity index 91% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStreamManager.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs index af7fd97..8af0c50 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStreamManager.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs @@ -11,10 +11,12 @@ namespace TutorialSystem.Helpers public class TutorialEventStreamManager : MonoBehaviour { readonly List buffer; - [SerializeField] [ReorderableList] List tutorialStateTrackers; + + [SerializeField] [ReorderableList] List tutorialStateTrackers; [SerializeField] TutorialEventTreeView tutorialSteps; [SerializeField] bool debug; - Dictionary nodeMapper; + + Dictionary nodeMapper; TutorialEventStateData rootNode; bool started; @@ -35,7 +37,7 @@ void DebugLog(string message) void Start() { - nodeMapper = new Dictionary(); + nodeMapper = new Dictionary(); started = true; var data = CollectTreeData(); @@ -66,7 +68,7 @@ void OnDisable() } } - void OnTrackerStateChanged(TutorialEventStatePublisher source, BasicEventStreamMessage message = null) + void OnTrackerStateChanged(EventMessageAggregatorStatePublisher source, BasicEventStreamMessage message = null) { if (!started) { @@ -139,7 +141,7 @@ List CollectTreeData() } TutorialEventStateData CreateTreeNodes(List data, - Dictionary nodeMapper) + Dictionary nodeMapper) { var roots = data.Where(s => !s.IsDependency).ToList(); var childStates = new List(); @@ -183,7 +185,7 @@ static TutorialEventMessage Convert(BasicEventStreamMessage msg) } static TutorialEventStateData AddTree(ExpectedStates state, - Dictionary nodeMapper) + Dictionary nodeMapper) { var childStates = new List(); foreach (var s in state.RequiredMessages) @@ -235,12 +237,12 @@ void PrintTree(ExpectedStates state, int indent) class ExpectedStates { public readonly List RequiredMessages; - public readonly TutorialEventStatePublisher MessageSource; + public readonly EventMessageAggregatorStatePublisher MessageSource; public readonly BasicEventStreamMessage SuccessMessage; public readonly HashSet Dependencies; readonly bool debug; - public ExpectedStates(TutorialEventStatePublisher message, + public ExpectedStates(EventMessageAggregatorStatePublisher message, BasicEventStreamMessage successMessage, List requiredMessages, bool debug) diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStreamManager.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs.meta similarity index 100% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventStreamManager.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs.meta diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventTreeItemRenderer.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs similarity index 97% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventTreeItemRenderer.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs index 14caa14..2d6f225 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventTreeItemRenderer.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs @@ -1,5 +1,4 @@ using System; -using NaughtyAttributes; using TMPro; using TutorialSystem.Events; using TutorialSystem.UI.Trees; @@ -184,7 +183,7 @@ void ApplyIndent(RectTransform rt) if (layout != null) { var padding = layout.padding; - layout.padding = new RectOffset((int) indentSpacing, padding.top, padding.right, padding.bottom); + layout.padding = new RectOffset((int)indentSpacing, padding.top, padding.right, padding.bottom); } rt.anchoredPosition = new Vector2(anchor.x + indentSpacing, anchor.y); } diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventTreeItemRenderer.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs.meta similarity index 100% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventTreeItemRenderer.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs.meta diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventTreeView.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs similarity index 100% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventTreeView.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventTreeView.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs.meta similarity index 100% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/TutorialEventTreeView.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs.meta diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamState.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamState.cs deleted file mode 100644 index 87f4c58..0000000 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamState.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System; -using TutorialSystem.Events; - -namespace TutorialSystem.UI -{ - public class EventStreamState : IEquatable - { - public EventStreamState(BasicEventStreamMessage sourceMessage, bool completed) - { - if (sourceMessage == null) - { - throw new ArgumentNullException(nameof(sourceMessage)); - } - - SourceMessage = sourceMessage; - Completed = completed; - } - - public BasicEventStreamMessage SourceMessage { get; } - - public bool Completed { get; } - - public bool Equals(EventStreamState other) - { - if (ReferenceEquals(null, other)) - { - return false; - } - - if (ReferenceEquals(this, other)) - { - return true; - } - - return Equals(SourceMessage, other.SourceMessage) - && (Completed == other.Completed); - } - - public override bool Equals(object obj) - { - if (ReferenceEquals(null, obj)) - { - return false; - } - - if (ReferenceEquals(this, obj)) - { - return true; - } - - if (obj.GetType() != GetType()) - { - return false; - } - - return Equals((EventStreamState) obj); - } - - public override int GetHashCode() - { - unchecked - { - return ((SourceMessage != null ? SourceMessage.GetHashCode() : 0) * 397) ^ Completed.GetHashCode(); - } - } - - public static bool operator ==(EventStreamState left, EventStreamState right) - { - return Equals(left, right); - } - - public static bool operator !=(EventStreamState left, EventStreamState right) - { - return !Equals(left, right); - } - } -} \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamState.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamState.cs.meta deleted file mode 100644 index a8d8b9d..0000000 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamState.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 220e7feaa92744bdb0ddb8eea452a2d8 -timeCreated: 1546534259 \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/VisibleDuringEdit.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/VisibleDuringEdit.cs index 9e0ab08..2e6fc7c 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/VisibleDuringEdit.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/VisibleDuringEdit.cs @@ -7,7 +7,6 @@ namespace TutorialSystem.UI /// Template elements are instantiated via a script, which also takes care of /// setting the newly instantiated game object active. /// - [ExecuteInEditMode] public class VisibleDuringEdit : MonoBehaviour { void Awake() From feb399795571f72834874fb971dd95e82ce8cf30 Mon Sep 17 00:00:00 2001 From: Thomas Morgner Date: Wed, 13 Mar 2019 17:48:42 +0000 Subject: [PATCH 12/24] Fixed namespaces. --- .../Scripts/Aggregators/EventMessageAggregator.cs | 4 ++-- .../Scripts/Aggregators/EventMessageCounter.cs | 4 ++-- .../Scripts/Aggregators/EventSequenceAggregator.cs | 4 ++-- .../Scripts/Aggregators/EventSetAggregator.cs | 4 ++-- .../Scripts/Aggregators/IEventMessageAggregator.cs | 4 ++-- .../Scripts/Aggregators/OneOfEventSetAggregator.cs | 4 ++-- .../Scripts/Events/BasicEventStream.cs | 2 +- .../Scripts/Events/BasicEventStreamEditorSupport.cs | 2 +- .../Scripts/Events/BasicEventStreamMessage.cs | 2 +- .../Events/EventMessageAggregatorStatePublisher.cs | 5 ++--- .../UnityTutorialSystem/Scripts/Events/LogEventStream.cs | 5 ++--- .../Scripts/Events/NextEventAggregationActivator.cs | 5 ++--- .../Scripts/Events/NextEventSelector.cs | 2 +- .../Scripts/Events/NextEventSelectorBase.cs | 5 +++-- .../Scripts/Events/PublishStreamEvent.cs | 2 +- .../Scripts/Events/StaticStreamEventSource.cs | 2 +- .../Scripts/Events/StreamEventSource.cs | 2 +- .../Scripts/Helpers/MouseEventPublisher.cs | 2 +- .../UnityTutorialSystem/Scripts/Helpers/SharedMethods.cs | 2 +- .../Scripts/Tutorial/TutorialEventMessage.cs | 4 ++-- .../Scripts/Tutorial/TutorialEventStateData.cs | 4 ++-- .../Scripts/Tutorial/TutorialEventStream.cs | 6 +++--- .../Scripts/Tutorial/TutorialEventStreamManager.cs | 8 ++++---- .../Scripts/Tutorial/TutorialEventTreeItemRenderer.cs | 6 +++--- .../Scripts/Tutorial/TutorialEventTreeView.cs | 6 +++--- .../UnityTutorialSystem/Scripts/UI/Trees/ITreeModel.cs | 2 +- .../UnityTutorialSystem/Scripts/UI/Trees/ListTreeModel.cs | 2 +- .../Scripts/UI/Trees/TreeItemRenderer.cs | 2 +- .../UnityTutorialSystem/Scripts/UI/Trees/TreeModel.cs | 2 +- .../Scripts/UI/Trees/TreeModelEventArgs.cs | 2 +- .../UnityTutorialSystem/Scripts/UI/Trees/TreePath.cs | 2 +- .../UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs | 2 +- .../UnityTutorialSystem/Scripts/UI/VisibleDuringEdit.cs | 2 +- UnityTutorialSystem.csproj.DotSettings | 3 +++ 34 files changed, 58 insertions(+), 57 deletions(-) create mode 100644 UnityTutorialSystem.csproj.DotSettings diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageAggregator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageAggregator.cs index ff102c1..b87abfe 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageAggregator.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageAggregator.cs @@ -1,10 +1,10 @@ using System.Collections.Generic; using NaughtyAttributes; -using TutorialSystem.Events; using UnityEngine; using UnityEngine.Events; +using UnityTutorialSystem.Events; -namespace TutorialSystem.Aggregators +namespace UnityTutorialSystem.Aggregators { public class MatchProgressEvent : UnityEvent { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageCounter.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageCounter.cs index dc01662..4ea2a8b 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageCounter.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageCounter.cs @@ -1,9 +1,9 @@ using System; using System.Collections.Generic; -using TutorialSystem.Events; using UnityEngine; +using UnityTutorialSystem.Events; -namespace TutorialSystem.Aggregators +namespace UnityTutorialSystem.Aggregators { ///

    /// A simple example of an aggregator function. This behaviour listens for diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSequenceAggregator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSequenceAggregator.cs index 5054aca..4796abd 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSequenceAggregator.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSequenceAggregator.cs @@ -1,11 +1,11 @@ using System; using System.Collections.Generic; using NaughtyAttributes; -using TutorialSystem.Events; using UnityEngine; using UnityEngine.Events; +using UnityTutorialSystem.Events; -namespace TutorialSystem.Aggregators +namespace UnityTutorialSystem.Aggregators { /// /// A event sequence matcher. The matcher checks incoming events against a diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSetAggregator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSetAggregator.cs index a967765..1e70896 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSetAggregator.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSetAggregator.cs @@ -1,10 +1,10 @@ using System; using System.Collections.Generic; -using TutorialSystem.Events; using UnityEngine; using UnityEngine.Events; +using UnityTutorialSystem.Events; -namespace TutorialSystem.Aggregators +namespace UnityTutorialSystem.Aggregators { /// /// A aggregator that waits for all events to occur. The events can diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/IEventMessageAggregator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/IEventMessageAggregator.cs index cf87edd..10eb742 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/IEventMessageAggregator.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/IEventMessageAggregator.cs @@ -1,9 +1,9 @@ using System; using System.Collections.Generic; -using TutorialSystem.Events; using UnityEngine.Events; +using UnityTutorialSystem.Events; -namespace TutorialSystem.Aggregators +namespace UnityTutorialSystem.Aggregators { public enum EventMessageMatcherState { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/OneOfEventSetAggregator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/OneOfEventSetAggregator.cs index 22df8ad..38c773e 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/OneOfEventSetAggregator.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/OneOfEventSetAggregator.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; -using TutorialSystem.Events; +using UnityTutorialSystem.Events; -namespace TutorialSystem.Aggregators +namespace UnityTutorialSystem.Aggregators { /// /// A reactor component that waits for any of the given messages and fires a diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStream.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStream.cs index e063e0d..8756b36 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStream.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStream.cs @@ -5,7 +5,7 @@ using UnityEngine; using UnityEngine.Events; -namespace TutorialSystem.Events +namespace UnityTutorialSystem.Events { /// /// A event stream receives and aggregates preconfigured messages. diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamEditorSupport.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamEditorSupport.cs index ff45815..7b8891a 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamEditorSupport.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamEditorSupport.cs @@ -6,7 +6,7 @@ #endif -namespace TutorialSystem.Events +namespace UnityTutorialSystem.Events { public static class BasicEventStreamEditorSupport { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamMessage.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamMessage.cs index e053b33..6ea540c 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamMessage.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamMessage.cs @@ -1,7 +1,7 @@ using NaughtyAttributes; using UnityEngine; -namespace TutorialSystem.Events +namespace UnityTutorialSystem.Events { public class BasicEventStreamMessage : ScriptableObject { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/EventMessageAggregatorStatePublisher.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/EventMessageAggregatorStatePublisher.cs index 310ca47..bcba665 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/EventMessageAggregatorStatePublisher.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/EventMessageAggregatorStatePublisher.cs @@ -1,10 +1,9 @@ using System.Collections.Generic; -using TutorialSystem.Aggregators; -using TutorialSystem.Events; using UnityEngine; using UnityEngine.Events; +using UnityTutorialSystem.Aggregators; -namespace TutorialSystem.Helpers +namespace UnityTutorialSystem.Events { public class EventMessageAggregatorStatePublisher : StreamEventSource { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs index 5287e7e..c320c44 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs @@ -1,8 +1,7 @@ -using System; -using UnityEngine; +using UnityEngine; using UnityEngine.Events; -namespace TutorialSystem.Events +namespace UnityTutorialSystem.Events { public class LogEventStream : MonoBehaviour { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventAggregationActivator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventAggregationActivator.cs index f43d692..bd08d32 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventAggregationActivator.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventAggregationActivator.cs @@ -1,7 +1,6 @@ -using TutorialSystem.Aggregators; -using TutorialSystem.Events; +using UnityTutorialSystem.Aggregators; -namespace TutorialSystem.Helpers +namespace UnityTutorialSystem.Events { public class NextEventAggregationActivator : NextEventSelectorBase { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelector.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelector.cs index 6fdfa9a..ec62e86 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelector.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelector.cs @@ -1,7 +1,7 @@ using UnityEngine; using UnityEngine.Events; -namespace TutorialSystem.Events +namespace UnityTutorialSystem.Events { public class NextEventSelector : NextEventSelectorBase { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelectorBase.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelectorBase.cs index c5eb51d..2f4b4da 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelectorBase.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelectorBase.cs @@ -1,8 +1,9 @@ using System.Collections.Generic; -using TutorialSystem.Aggregators; using UnityEngine; +using UnityTutorialSystem.Aggregators; +using UnityTutorialSystem.Helpers; -namespace TutorialSystem.Events +namespace UnityTutorialSystem.Events { public abstract class NextEventSelectorBase : MonoBehaviour { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/PublishStreamEvent.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/PublishStreamEvent.cs index 08975fb..98e880c 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/PublishStreamEvent.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/PublishStreamEvent.cs @@ -1,7 +1,7 @@ using JetBrains.Annotations; using UnityEngine; -namespace TutorialSystem.Events +namespace UnityTutorialSystem.Events { /// /// This class exists as an trigger to fire events from UnityEvent bindings. diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StaticStreamEventSource.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StaticStreamEventSource.cs index 191efef..1bf9a1b 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StaticStreamEventSource.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StaticStreamEventSource.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using UnityEngine; -namespace TutorialSystem.Events +namespace UnityTutorialSystem.Events { public class StaticStreamEventSource : StreamEventSource { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StreamEventSource.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StreamEventSource.cs index f3590e2..d5f686e 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StreamEventSource.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StreamEventSource.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace TutorialSystem.Events +namespace UnityTutorialSystem.Events { public abstract class StreamEventSource : MonoBehaviour { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/MouseEventPublisher.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/MouseEventPublisher.cs index b368274..b6f749b 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/MouseEventPublisher.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/MouseEventPublisher.cs @@ -1,7 +1,7 @@ using UnityEngine; using UnityEngine.Events; -namespace TutorialSystem.Helpers +namespace UnityTutorialSystem.Helpers { public class MouseEventPublisher : MonoBehaviour { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/SharedMethods.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/SharedMethods.cs index 982ea8b..44251b4 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/SharedMethods.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/SharedMethods.cs @@ -4,7 +4,7 @@ using UnityEngine; using UnityEngine.SceneManagement; -namespace TutorialSystem +namespace UnityTutorialSystem.Helpers { /// /// Copied from VRTK_SharedMethods class (MIT License). diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventMessage.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventMessage.cs index 722c5e6..8da1122 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventMessage.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventMessage.cs @@ -1,9 +1,9 @@ using System; using NaughtyAttributes; -using TutorialSystem.Events; using UnityEngine; +using UnityTutorialSystem.Events; -namespace TutorialSystem.Helpers +namespace UnityTutorialSystem.Tutorial { public enum TutorialEventState { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStateData.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStateData.cs index 7154bb6..beceab5 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStateData.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStateData.cs @@ -3,9 +3,9 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using TutorialSystem.Events; +using UnityTutorialSystem.Events; -namespace TutorialSystem.Helpers +namespace UnityTutorialSystem.Tutorial { public class TutorialEventStateData : IReadOnlyList, IEquatable diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStream.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStream.cs index 568bbed..5d43443 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStream.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStream.cs @@ -1,7 +1,7 @@ -using TutorialSystem.Events; -using UnityEngine; +using UnityEngine; +using UnityTutorialSystem.Events; -namespace TutorialSystem.Helpers +namespace UnityTutorialSystem.Tutorial { [CreateAssetMenu(menuName = "Event Stream/Tutorial Event Stream")] public class TutorialEventStream : BasicEventStream diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs index 8af0c50..f662d53 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs @@ -1,12 +1,12 @@ using System.Collections.Generic; using System.Linq; using NaughtyAttributes; -using TutorialSystem.Aggregators; -using TutorialSystem.Events; -using TutorialSystem.UI.Trees; using UnityEngine; +using UnityTutorialSystem.Aggregators; +using UnityTutorialSystem.Events; +using UnityTutorialSystem.UI.Trees; -namespace TutorialSystem.Helpers +namespace UnityTutorialSystem.Tutorial { public class TutorialEventStreamManager : MonoBehaviour { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs index 2d6f225..03ea595 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs @@ -1,11 +1,11 @@ using System; using TMPro; -using TutorialSystem.Events; -using TutorialSystem.UI.Trees; using UnityEngine; using UnityEngine.UI; +using UnityTutorialSystem.Events; +using UnityTutorialSystem.UI.Trees; -namespace TutorialSystem.Helpers +namespace UnityTutorialSystem.Tutorial { public class TutorialEventTreeItemRenderer : TreeItemRenderer { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs index 201807d..ca451c3 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs @@ -1,7 +1,7 @@ -using TutorialSystem.UI.Trees; -using UnityEngine; +using UnityEngine; +using UnityTutorialSystem.UI.Trees; -namespace TutorialSystem.Helpers +namespace UnityTutorialSystem.Tutorial { public class TutorialEventTreeView : TreeView { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeModel.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeModel.cs index a17731a..dd8fbc4 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeModel.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeModel.cs @@ -1,6 +1,6 @@ using System; -namespace TutorialSystem.UI.Trees +namespace UnityTutorialSystem.UI.Trees { public interface ITreeModel { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ListTreeModel.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ListTreeModel.cs index f377aff..12c2d15 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ListTreeModel.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ListTreeModel.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; -namespace TutorialSystem.UI.Trees +namespace UnityTutorialSystem.UI.Trees { public class ListTreeModel : TreeModel where TList : class, IReadOnlyList { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeItemRenderer.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeItemRenderer.cs index 9c55176..d9bce09 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeItemRenderer.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeItemRenderer.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace TutorialSystem.UI.Trees +namespace UnityTutorialSystem.UI.Trees { /// /// Abstract because its unity diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModel.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModel.cs index 0052a43..4acc000 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModel.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModel.cs @@ -1,6 +1,6 @@ using System; -namespace TutorialSystem.UI.Trees +namespace UnityTutorialSystem.UI.Trees { public abstract class TreeModel : ITreeModel { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModelEventArgs.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModelEventArgs.cs index 0adbc7e..5110ac0 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModelEventArgs.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModelEventArgs.cs @@ -1,6 +1,6 @@ using System; -namespace TutorialSystem.UI.Trees +namespace UnityTutorialSystem.UI.Trees { public class TreeModelEventArgs : EventArgs { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreePath.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreePath.cs index b8a5524..e3d455a 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreePath.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreePath.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; -namespace TutorialSystem.UI.Trees +namespace UnityTutorialSystem.UI.Trees { public static class TreePath { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs index bf62b91..cc2ed0e 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using UnityEngine; -namespace TutorialSystem.UI.Trees +namespace UnityTutorialSystem.UI.Trees { /// /// abstract because of generics and unity. diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/VisibleDuringEdit.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/VisibleDuringEdit.cs index 2e6fc7c..b5f4c1b 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/VisibleDuringEdit.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/VisibleDuringEdit.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace TutorialSystem.UI +namespace UnityTutorialSystem.UI { /// /// A small helper that deactivates template elements when not in the editor. diff --git a/UnityTutorialSystem.csproj.DotSettings b/UnityTutorialSystem.csproj.DotSettings new file mode 100644 index 0000000..c1244db --- /dev/null +++ b/UnityTutorialSystem.csproj.DotSettings @@ -0,0 +1,3 @@ + + True + True \ No newline at end of file From 1ce867db96bba910fec133cb5de8314e5d0f8321 Mon Sep 17 00:00:00 2001 From: Thomas Morgner Date: Thu, 14 Mar 2019 14:52:52 +0000 Subject: [PATCH 13/24] Clean up: removed explicit binding of model to view and use binding component instead. --- .../Scenes/TutorialAssembly.unity | 41 +++++++++- .../Tutorial/TutorialEventStreamManager.cs | 9 ++- .../Tutorial/TutorialEventTreeBinding.cs | 15 ++++ .../Tutorial/TutorialEventTreeBinding.cs.meta | 3 + .../Scripts/Tutorial/TutorialEventTreeView.cs | 4 +- .../Scripts/UI/SaneHBoxLayout.cs | 74 +++++++++++++++++++ .../Scripts/UI/SaneHBoxLayout.cs.meta | 3 + .../Scripts/UI/Trees/ListTreeModel.cs | 12 ++- .../Scripts/UI/Trees/TreeView.cs | 12 +-- 9 files changed, 154 insertions(+), 19 deletions(-) create mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeBinding.cs create mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeBinding.cs.meta create mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UI/SaneHBoxLayout.cs create mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/UI/SaneHBoxLayout.cs.meta diff --git a/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity b/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity index 741d89b..23e52fa 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity +++ b/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity @@ -3014,6 +3014,31 @@ PrefabInstance: propertyPath: defaultColor.a value: 1 objectReference: {fileID: 0} + - target: {fileID: 114551943447470984, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: m_Interactable + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114551943447470984, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: m_Colors.m_DisabledColor.r + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114551943447470984, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: m_Colors.m_DisabledColor.g + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114551943447470984, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: m_Colors.m_DisabledColor.b + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114551943447470984, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: m_Colors.m_DisabledColor.a + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} --- !u!1 &1299307870 @@ -4492,6 +4517,7 @@ GameObject: m_Component: - component: {fileID: 2005220181} - component: {fileID: 2005220182} + - component: {fileID: 2005220183} m_Layer: 0 m_Name: StateHandlers m_TagString: Untagged @@ -4532,8 +4558,21 @@ MonoBehaviour: - {fileID: 168782042} - {fileID: 1771014852} - {fileID: 121474010} - tutorialSteps: {fileID: 2004723108} debug: 0 +--- !u!114 &2005220183 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2005220180} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bba432f912c64ce291ce3be12de22190, type: 3} + m_Name: + m_EditorClassIdentifier: + modelSource: {fileID: 2005220182} + treeView: {fileID: 2004723108} --- !u!1 &2089696629 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs index f662d53..033f3de 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs @@ -13,9 +13,9 @@ public class TutorialEventStreamManager : MonoBehaviour readonly List buffer; [SerializeField] [ReorderableList] List tutorialStateTrackers; - [SerializeField] TutorialEventTreeView tutorialSteps; [SerializeField] bool debug; + ListTreeModel model; Dictionary nodeMapper; TutorialEventStateData rootNode; bool started; @@ -23,8 +23,11 @@ public class TutorialEventStreamManager : MonoBehaviour public TutorialEventStreamManager() { buffer = new List(); + model = new ListTreeModel(); } + public ITreeModel Model => model; + void DebugLog(string message) { #if DEBUG @@ -44,7 +47,7 @@ void Start() PrintTree(data); rootNode = CreateTreeNodes(data, nodeMapper); DebugLog("Generated tree:\n" + rootNode.AsTextTree()); - tutorialSteps.Model = new ListTreeModel(rootNode); + model.Root = rootNode; foreach (var d in tutorialStateTrackers) { @@ -109,7 +112,7 @@ void OnTrackerStateChanged(EventMessageAggregatorStatePublisher source, BasicEve } } - tutorialSteps.Model.FireStructureChanged(); + model.FireStructureChanged(); } List CollectTreeData() diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeBinding.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeBinding.cs new file mode 100644 index 0000000..7dfbf0d --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeBinding.cs @@ -0,0 +1,15 @@ +using UnityEngine; + +namespace UnityTutorialSystem.Tutorial +{ + public class TutorialEventTreeBinding : MonoBehaviour + { + [SerializeField] TutorialEventStreamManager modelSource; + [SerializeField] TutorialEventTreeView treeView; + + void Awake() + { + treeView.Model = modelSource.Model; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeBinding.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeBinding.cs.meta new file mode 100644 index 0000000..439d101 --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeBinding.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: bba432f912c64ce291ce3be12de22190 +timeCreated: 1552574979 \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs index ca451c3..4c8d69b 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs @@ -8,11 +8,11 @@ public class TutorialEventTreeView : TreeView [SerializeField] TutorialEventTreeItemRenderer template; [SerializeField] bool showAllNodes; [SerializeField] bool hideCompletedSubTrees; - ListTreeModel model; + ITreeModel model; protected override TreeItemRenderer ItemRenderer => template; - public ListTreeModel Model + public ITreeModel Model { get { return model; } set diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/SaneHBoxLayout.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/SaneHBoxLayout.cs new file mode 100644 index 0000000..09e74a8 --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/SaneHBoxLayout.cs @@ -0,0 +1,74 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace VRKitchenSimulator.UI +{ + /// + /// Unity's built in layout components behave rather erratically when asked to deal with + /// flexible layouts. Instead of trying to fix what is not fixable, lets quickly implement + /// a simple and working layout manager. + /// + public class SaneHBoxLayout : LayoutGroup + { + const int AXIS_HORIZONTAL = 0; + const int AXIS_VERTICAL = 1; + + public override void CalculateLayoutInputHorizontal() + { + // Mandatory.. + base.CalculateLayoutInputHorizontal(); + var minSize = (float)padding.horizontal; + var prefSize = (float)padding.horizontal; + var flexSize = (float) padding.horizontal; + foreach (var c in rectChildren) + { + minSize += LayoutUtility.GetMinWidth(c); + prefSize += LayoutUtility.GetPreferredWidth(c); + flexSize += LayoutUtility.GetFlexibleWidth(c); + } + + SetLayoutInputForAxis(minSize, prefSize, flexSize, AXIS_HORIZONTAL); + } + + public override void CalculateLayoutInputVertical() + { + var paddingVertical = (float) padding.vertical; + var minSize = 0f; + var prefSize = 0f; + var flexSize = 0f; + foreach (var c in rectChildren) + { + minSize = Mathf.Max(LayoutUtility.GetMinHeight(c), minSize); + prefSize = Mathf.Max(LayoutUtility.GetPreferredHeight(c), prefSize); + flexSize = Mathf.Max(LayoutUtility.GetFlexibleHeight(c), flexSize); + } + + SetLayoutInputForAxis(minSize + paddingVertical, prefSize + paddingVertical, flexSize + paddingVertical, AXIS_VERTICAL); + } + + public override void SetLayoutHorizontal() + { + var prefSize = 0f; + var space = Mathf.Max(0, rectTransform.rect.size[AXIS_HORIZONTAL] - padding.horizontal); + foreach (var c in rectChildren) + { + var pref = LayoutUtility.GetPreferredWidth(c); + var min = LayoutUtility.GetMinWidth(c); + var availSpace = Mathf.Max(0, space - prefSize); + var allocatedSpace = Mathf.Max(min, Mathf.Min(availSpace, pref)); + + SetChildAlongAxis(c, AXIS_HORIZONTAL, prefSize + padding.left, allocatedSpace); + prefSize += allocatedSpace; + } + } + + public override void SetLayoutVertical() + { + foreach (var c in rectChildren) + { + var min = LayoutUtility.GetPreferredHeight(c); + SetChildAlongAxis(c, AXIS_VERTICAL, padding.top, min); + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/SaneHBoxLayout.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/SaneHBoxLayout.cs.meta new file mode 100644 index 0000000..df5a6a7 --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/SaneHBoxLayout.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ea16d7c66e8746679b5a105ab2458c21 +timeCreated: 1548098687 \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ListTreeModel.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ListTreeModel.cs index 12c2d15..9510653 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ListTreeModel.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ListTreeModel.cs @@ -1,17 +1,15 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; namespace UnityTutorialSystem.UI.Trees { public class ListTreeModel : TreeModel where TList : class, IReadOnlyList { - public ListTreeModel(TList root) + public ListTreeModel() { - if (root == null) - { - throw new ArgumentNullException(nameof(root)); - } + } + public ListTreeModel(TList root) + { Root = root; } diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs index cc2ed0e..cf25520 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs @@ -64,22 +64,22 @@ protected virtual void Awake() } } - void OnStructureChanged(object sender, TreeModelEventArgs e) + protected virtual void OnStructureChanged(object sender, TreeModelEventArgs e) { OnModelUpdated(); } - void OnNodesRemoved(object sender, TreeModelEventArgs e) + protected virtual void OnNodesRemoved(object sender, TreeModelEventArgs e) { OnModelUpdated(); } - void OnNodesInserted(object sender, TreeModelEventArgs e) + protected virtual void OnNodesInserted(object sender, TreeModelEventArgs e) { OnModelUpdated(); } - void OnNodesChanged(object sender, TreeModelEventArgs e) + protected virtual void OnNodesChanged(object sender, TreeModelEventArgs e) { OnModelUpdated(); } @@ -109,7 +109,7 @@ protected virtual void OnModelUpdated() } } - int RefreshNodes(TreePath node, int nextNodeIndexInPool, bool visible) + protected virtual int RefreshNodes(TreePath node, int nextNodeIndexInPool, bool visible) { while (pool.Count <= nextNodeIndexInPool) { @@ -149,7 +149,7 @@ protected virtual bool IsPathVisible(TreePath path) return true; } - TreeItemRenderer InstantiateRenderer() + protected virtual TreeItemRenderer InstantiateRenderer() { var itemRenderer = Instantiate(ItemRenderer); var rtransform = itemRenderer.transform; From 91a40e9de2afab9f3e2c0a6737d984fc42c247cc Mon Sep 17 00:00:00 2001 From: Thomas Morgner Date: Mon, 18 Mar 2019 15:53:25 +0000 Subject: [PATCH 14/24] Updated list to use sane hbox layout so that long, muiltiline text is rendered correctly in the list. Updated item renderer to finish up awake-initialization before calling the parent class, which may ask to set up the rendering. --- .../Scenes/ContentList.prefab | 632 +++++++++--------- .../Scenes/TutorialAssembly.unity | 124 ++-- .../Tutorial/TutorialEventTreeItemRenderer.cs | 3 +- 3 files changed, 405 insertions(+), 354 deletions(-) diff --git a/Assets/Plugins/UnityTutorialSystem/Scenes/ContentList.prefab b/Assets/Plugins/UnityTutorialSystem/Scenes/ContentList.prefab index 25c0b1d..b814a7b 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scenes/ContentList.prefab +++ b/Assets/Plugins/UnityTutorialSystem/Scenes/ContentList.prefab @@ -1,26 +1,17 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1001 &100100000 -Prefab: - m_ObjectHideFlags: 1 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: [] - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 0} - m_RootGameObject: {fileID: 1415598103615636} - m_IsPrefabAsset: 1 --- !u!1 &1119027821575648 GameObject: - m_ObjectHideFlags: 1 + m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 224930166395689530} - component: {fileID: 222869044883501650} - component: {fileID: 114312059845659162} + - component: {fileID: 8556782208736572212} m_Layer: 5 m_Name: Background m_TagString: Untagged @@ -28,27 +19,89 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1316549419527978 -GameObject: - m_ObjectHideFlags: 1 +--- !u!224 &224930166395689530 +RectTransform: + m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224995421561536330} - - component: {fileID: 114551943447470984} - m_Layer: 5 - m_Name: Toggle - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1119027821575648} + 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_Children: + - {fileID: 224554747877605170} + m_Father: {fileID: 224160305383547462} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222869044883501650 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1119027821575648} + m_CullTransparentMesh: 0 +--- !u!114 &114312059845659162 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1119027821575648} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 +--- !u!114 &8556782208736572212 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1119027821575648} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 20 + m_PreferredHeight: 20 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 --- !u!1 &1415598103615636 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 224528275417451060} @@ -61,11 +114,71 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!224 &224528275417451060 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1415598103615636} + 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_Children: + - {fileID: 224160305383547462} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &114821739908165324 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1415598103615636} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 5 + m_Right: 5 + m_Top: 5 + m_Bottom: 5 + m_ChildAlignment: 0 + m_Spacing: 5 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 0 +--- !u!114 &114400973501864318 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1415598103615636} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5dabfd477c564c518af7ad4e2362742a, type: 3} + m_Name: + m_EditorClassIdentifier: + showRootNode: 0 + template: {fileID: 1223395836} + showAllNodes: 0 + hideCompletedSubTrees: 0 --- !u!1 &1472719709801288 GameObject: - m_ObjectHideFlags: 1 + m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 224554747877605170} @@ -78,45 +191,40 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1574653218349702 -GameObject: - m_ObjectHideFlags: 1 +--- !u!224 &224554747877605170 +RectTransform: + m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224432365767571276} - - component: {fileID: 222190762113586452} - - component: {fileID: 114720927400143124} - m_Layer: 5 - m_Name: Label - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1843578962797072 -GameObject: + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1472719709801288} + 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_Children: [] + m_Father: {fileID: 224930166395689530} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222743336091278658 +CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 6 - m_Component: - - component: {fileID: 224160305383547462} - - component: {fileID: 114931892990545888} - m_Layer: 5 - m_Name: _Template - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &114312059845659162 + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1472719709801288} + m_CullTransparentMesh: 0 +--- !u!114 &114741211279708708 MonoBehaviour: - m_ObjectHideFlags: 1 + m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1119027821575648} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1472719709801288} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} @@ -130,78 +238,66 @@ MonoBehaviour: m_Calls: [] m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 ---- !u!114 &114400973501864318 -MonoBehaviour: - m_ObjectHideFlags: 1 + m_UseSpriteMesh: 0 +--- !u!1 &1574653218349702 +GameObject: + m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1415598103615636} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5dabfd477c564c518af7ad4e2362742a, type: 3} - m_Name: - m_EditorClassIdentifier: - showRootNode: 0 - template: {fileID: 114931892990545888} - showAllNodes: 0 ---- !u!114 &114551943447470984 -MonoBehaviour: - m_ObjectHideFlags: 1 + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224432365767571276} + - component: {fileID: 222190762113586452} + - component: {fileID: 114720927400143124} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224432365767571276 +RectTransform: + m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1316549419527978} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Navigation: - m_Mode: 3 - m_SelectOnUp: {fileID: 0} - m_SelectOnDown: {fileID: 0} - m_SelectOnLeft: {fileID: 0} - m_SelectOnRight: {fileID: 0} - m_Transition: 1 - m_Colors: - m_NormalColor: {r: 1, g: 1, b: 1, a: 1} - m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} - m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} - m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} - m_ColorMultiplier: 1 - m_FadeDuration: 0.1 - m_SpriteState: - m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} - m_DisabledSprite: {fileID: 0} - m_AnimationTriggers: - m_NormalTrigger: Normal - m_HighlightedTrigger: Highlighted - m_PressedTrigger: Pressed - m_DisabledTrigger: Disabled - m_Interactable: 1 - m_TargetGraphic: {fileID: 114312059845659162} - toggleTransition: 1 - graphic: {fileID: 114741211279708708} - m_Group: {fileID: 0} - onValueChanged: - m_PersistentCalls: - m_Calls: [] - m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null - m_IsOn: 1 + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574653218349702} + 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_Children: [] + m_Father: {fileID: 224160305383547462} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222190762113586452 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574653218349702} + m_CullTransparentMesh: 0 --- !u!114 &114720927400143124 MonoBehaviour: - m_ObjectHideFlags: 1 + m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1574653218349702} m_Enabled: 1 m_EditorHideFlags: 0 @@ -230,6 +326,7 @@ MonoBehaviour: rgba: 4294967295 m_fontColor: {r: 1, g: 1, b: 1, a: 1} m_enableVertexGradient: 0 + m_colorMode: 3 m_fontColorGradient: topLeft: {r: 1, g: 1, b: 1, a: 1} topRight: {r: 1, g: 1, b: 1, a: 1} @@ -283,7 +380,7 @@ MonoBehaviour: m_firstVisibleCharacter: 0 m_useMaxVisibleDescender: 1 m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} + m_margin: {x: 5, y: 3, z: 0, w: 0} m_textInfo: textComponent: {fileID: 114720927400143124} characterCount: 5 @@ -312,200 +409,129 @@ MonoBehaviour: - {fileID: 0} m_baseMaterial: {fileID: 0} m_maskOffset: {x: 0, y: 0, z: 0, w: 0} ---- !u!114 &114741211279708708 +--- !u!1 &1843578962797072 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224160305383547462} + - component: {fileID: 3591000738502833973} + - component: {fileID: 1223395836} + - component: {fileID: 256921282078287685} + m_Layer: 5 + m_Name: _Template + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224160305383547462 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1843578962797072} + 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_Children: + - {fileID: 224930166395689530} + - {fileID: 224432365767571276} + m_Father: {fileID: 224528275417451060} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 30} + m_Pivot: {x: 0, y: 0} +--- !u!114 &3591000738502833973 MonoBehaviour: - m_ObjectHideFlags: 1 + m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1472719709801288} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1843578962797072} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} m_Name: m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_OnCullStateChanged: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114312059845659162} + toggleTransition: 1 + graphic: {fileID: 114741211279708708} + m_Group: {fileID: 0} + onValueChanged: m_PersistentCalls: m_Calls: [] - m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114821739908165324 + m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_IsOn: 1 +--- !u!114 &1223395836 MonoBehaviour: - m_ObjectHideFlags: 1 + m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1415598103615636} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1843578962797072} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: bcf2b234f7c645128d79667d27a38161, type: 3} m_Name: m_EditorClassIdentifier: - m_Padding: - m_Left: 5 - m_Right: 5 - m_Top: 5 - m_Bottom: 5 - m_ChildAlignment: 0 - m_Spacing: 5 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 0 - m_ChildControlWidth: 1 - m_ChildControlHeight: 0 ---- !u!114 &114931892990545888 + whenNextEventColor: {r: 0.740566, g: 0.79368824, b: 1, a: 1} + whenCompletedColor: {r: 0.7028302, g: 1, b: 0.72236216, a: 1} + defaultColor: {r: 1, g: 1, b: 1, a: 1} + whenNextEventFontStyle: 0 + whenCompletedFontStyle: 0 + defaultFontStyle: 0 + toggle: {fileID: 3591000738502833973} + label: {fileID: 114720927400143124} + indentPerLevel: 20 + ignoreLeadingIndent: 0 +--- !u!114 &256921282078287685 MonoBehaviour: - m_ObjectHideFlags: 1 + m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1843578962797072} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: bcf2b234f7c645128d79667d27a38161, type: 3} + m_Script: {fileID: 11500000, guid: ea16d7c66e8746679b5a105ab2458c21, type: 3} m_Name: m_EditorClassIdentifier: - toggle: {fileID: 114551943447470984} - label: {fileID: 114720927400143124} - indentPerLevel: 20 ---- !u!222 &222190762113586452 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1574653218349702} - m_CullTransparentMesh: 0 ---- !u!222 &222743336091278658 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1472719709801288} - m_CullTransparentMesh: 0 ---- !u!222 &222869044883501650 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1119027821575648} - m_CullTransparentMesh: 0 ---- !u!224 &224160305383547462 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1843578962797072} - 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_Children: - - {fileID: 224995421561536330} - m_Father: {fileID: 224528275417451060} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 30} - m_Pivot: {x: 0, y: 0} ---- !u!224 &224432365767571276 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1574653218349702} - 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_Children: [] - m_Father: {fileID: 224995421561536330} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 2, y: 0} - m_SizeDelta: {x: -44, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224528275417451060 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1415598103615636} - 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_Children: - - {fileID: 224160305383547462} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 1} ---- !u!224 &224554747877605170 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1472719709801288} - 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_Children: [] - m_Father: {fileID: 224930166395689530} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224930166395689530 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1119027821575648} - 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_Children: - - {fileID: 224554747877605170} - m_Father: {fileID: 224995421561536330} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 10, y: -10} - m_SizeDelta: {x: 20, y: 20} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224995421561536330 -RectTransform: - m_ObjectHideFlags: 1 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1316549419527978} - 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_Children: - - {fileID: 224930166395689530} - - {fileID: 224432365767571276} - m_Father: {fileID: 224160305383547462} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0.5} - m_AnchorMax: {x: 1, y: 0.5} - m_AnchoredPosition: {x: 0, y: 10} - m_SizeDelta: {x: 0, y: 20} - m_Pivot: {x: 0, y: 1} + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 diff --git a/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity b/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity index 23e52fa..9b23f58 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity +++ b/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity @@ -612,7 +612,7 @@ MonoBehaviour: m_TargetGraphic: {fileID: 1871891756} m_HandleRect: {fileID: 1871891755} m_Direction: 0 - m_Value: 0 + m_Value: 1 m_Size: 1 m_NumberOfSteps: 0 m_OnValueChanged: @@ -1200,8 +1200,8 @@ MonoBehaviour: m_TargetGraphic: {fileID: 364011011} m_HandleRect: {fileID: 364011010} m_Direction: 2 - m_Value: 1 - m_Size: 0.99999994 + m_Value: 0 + m_Size: 1 m_NumberOfSteps: 0 m_OnValueChanged: m_PersistentCalls: @@ -2819,6 +2819,10 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 491854709} m_Modifications: + - target: {fileID: 1415598103615636, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} + propertyPath: m_Name + value: ContentList + objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} propertyPath: m_LocalPosition.x @@ -2859,6 +2863,21 @@ PrefabInstance: propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} propertyPath: m_AnchoredPosition.x @@ -2912,12 +2931,12 @@ PrefabInstance: - target: {fileID: 114720927400143124, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} propertyPath: m_havePropertiesChanged - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 114720927400143124, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} propertyPath: m_isInputParsingRequired - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 224160305383547462, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} @@ -2947,94 +2966,99 @@ PrefabInstance: - target: {fileID: 224160305383547462, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} propertyPath: m_SizeDelta.y - value: 40 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 224995421561536330, guid: 154207b2fe8edf6469479d563d3e8e59, + - target: {fileID: 114821739908165324, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} - propertyPath: m_SizeDelta.y - value: 25 + propertyPath: m_ChildControlHeight + value: 1 objectReference: {fileID: 0} - - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + - target: {fileID: 114821739908165324, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} - propertyPath: whenNextEventColor.a - value: 1 + propertyPath: m_ChildForceExpandWidth + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224930166395689530, guid: 154207b2fe8edf6469479d563d3e8e59, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + - target: {fileID: 224930166395689530, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} - propertyPath: whenNextEventColor.r - value: 0.740566 + propertyPath: m_AnchorMax.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + - target: {fileID: 224930166395689530, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} - propertyPath: whenNextEventColor.g - value: 0.79368824 + propertyPath: m_AnchoredPosition.x + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + - target: {fileID: 224930166395689530, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} - propertyPath: whenNextEventColor.b - value: 1 + propertyPath: m_AnchoredPosition.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + - target: {fileID: 224930166395689530, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} - propertyPath: whenCompletedColor.r - value: 0.7028302 + propertyPath: m_SizeDelta.x + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + - target: {fileID: 224930166395689530, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} - propertyPath: whenCompletedColor.g - value: 1 + propertyPath: m_SizeDelta.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + - target: {fileID: 224432365767571276, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} - propertyPath: whenCompletedColor.b - value: 0.72236216 + propertyPath: m_AnchorMin.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + - target: {fileID: 224432365767571276, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} - propertyPath: whenCompletedColor.a - value: 1 + propertyPath: m_AnchorMax.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + - target: {fileID: 224432365767571276, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} - propertyPath: defaultColor.r - value: 1 + propertyPath: m_AnchoredPosition.x + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + - target: {fileID: 224432365767571276, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} - propertyPath: defaultColor.g - value: 1 + propertyPath: m_AnchoredPosition.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + - target: {fileID: 224432365767571276, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} - propertyPath: defaultColor.b - value: 1 + propertyPath: m_SizeDelta.x + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114931892990545888, guid: 154207b2fe8edf6469479d563d3e8e59, + - target: {fileID: 224432365767571276, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} - propertyPath: defaultColor.a - value: 1 + propertyPath: m_SizeDelta.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114551943447470984, guid: 154207b2fe8edf6469479d563d3e8e59, + - target: {fileID: 3591000738502833973, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} propertyPath: m_Interactable value: 0 objectReference: {fileID: 0} - - target: {fileID: 114551943447470984, guid: 154207b2fe8edf6469479d563d3e8e59, + - target: {fileID: 3591000738502833973, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} propertyPath: m_Colors.m_DisabledColor.r value: 1 objectReference: {fileID: 0} - - target: {fileID: 114551943447470984, guid: 154207b2fe8edf6469479d563d3e8e59, + - target: {fileID: 3591000738502833973, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} propertyPath: m_Colors.m_DisabledColor.g value: 1 objectReference: {fileID: 0} - - target: {fileID: 114551943447470984, guid: 154207b2fe8edf6469479d563d3e8e59, + - target: {fileID: 3591000738502833973, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} propertyPath: m_Colors.m_DisabledColor.b value: 1 objectReference: {fileID: 0} - - target: {fileID: 114551943447470984, guid: 154207b2fe8edf6469479d563d3e8e59, + - target: {fileID: 3591000738502833973, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} propertyPath: m_Colors.m_DisabledColor.a value: 1 diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs index 03ea595..cec1771 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs @@ -4,6 +4,7 @@ using UnityEngine.UI; using UnityTutorialSystem.Events; using UnityTutorialSystem.UI.Trees; +using VRKitchenSimulator.UI; namespace UnityTutorialSystem.Tutorial { @@ -83,9 +84,9 @@ string GetFailureMessage(BasicEventStreamMessage msg) protected override void Awake() { - base.Awake(); ignoreLeadingIndent = Math.Max(ignoreLeadingIndent, 0); layout = GetComponent(); + base.Awake(); } string GetSuccessMessage(BasicEventStreamMessage msg) From ac6f79909919c05cfca58132b7cda8ba2bec750a Mon Sep 17 00:00:00 2001 From: Thomas Morgner Date: Mon, 18 Mar 2019 15:59:50 +0000 Subject: [PATCH 15/24] Added an explicit license --- LICENSE.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE.txt diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..15bc72f --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 + +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. From c5579dd82ce72b0c1453b704eaf51f1d0c071224 Mon Sep 17 00:00:00 2001 From: Thomas Morgner Date: Tue, 2 Apr 2019 19:20:45 +0100 Subject: [PATCH 16/24] Documentation; Removed unused code. --- Assembly-CSharp-firstpass.csproj.DotSettings | 2 + .../Scenes/Scripts/CharacterBehaviour.cs | 66 ++++-- .../Scenes/TutorialAssembly.unity | 10 +- .../Aggregators/EventMessageAggregator.cs | 214 ++++++++++++++---- .../Aggregators/EventMessageCounter.cs | 44 ++-- .../Aggregators/EventMessageMatcherState.cs | 22 ++ .../EventMessageMatcherState.cs.meta | 3 + .../Aggregators/EventSequenceAggregator.cs | 81 ++++--- .../Scripts/Aggregators/EventSetAggregator.cs | 49 ++-- .../Aggregators/IEventMessageAggregator.cs | 59 ++++- .../Scripts/Aggregators/MatchProgressEvent.cs | 15 ++ .../Aggregators/MatchProgressEvent.cs.meta | 3 + .../Aggregators/OneOfEventSetAggregator.cs | 6 +- .../Scripts/Events/BasicEventStream.cs | 87 +++++-- .../Events/BasicEventStreamEditorSupport.cs | 41 ++-- .../Scripts/Events/BasicEventStreamMessage.cs | 17 +- .../Scripts/Helpers/UnityObjectWrapper.cs | 45 ++++ .../Helpers/UnityObjectWrapper.cs.meta | 3 + .../Scripts/Tutorial/TutorialEventMessage.cs | 34 +-- .../Tutorial/TutorialEventStreamManager.cs | 14 -- ProjectSettings/ProjectSettings.asset | 6 + 21 files changed, 579 insertions(+), 242 deletions(-) create mode 100644 Assembly-CSharp-firstpass.csproj.DotSettings create mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageMatcherState.cs create mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageMatcherState.cs.meta create mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/MatchProgressEvent.cs create mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/MatchProgressEvent.cs.meta create mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/UnityObjectWrapper.cs create mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/UnityObjectWrapper.cs.meta diff --git a/Assembly-CSharp-firstpass.csproj.DotSettings b/Assembly-CSharp-firstpass.csproj.DotSettings new file mode 100644 index 0000000..f3a4b90 --- /dev/null +++ b/Assembly-CSharp-firstpass.csproj.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scenes/Scripts/CharacterBehaviour.cs b/Assets/Plugins/UnityTutorialSystem/Scenes/Scripts/CharacterBehaviour.cs index a5900bf..7a49dac 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scenes/Scripts/CharacterBehaviour.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scenes/Scripts/CharacterBehaviour.cs @@ -1,27 +1,55 @@ -using UnityEngine; +using NaughtyAttributes; +using UnityEngine; using UnityEngine.Events; -namespace TutorialSystem.Scenes.Scripts +namespace UnityTutorialSystem.Scenes.Scripts { + /// + /// A basic character controller that allows WASD movement and mouse look in a single script. + /// [RequireComponent(typeof(CharacterController))] public class CharacterBehaviour : MonoBehaviour { + [BoxGroup("Movement")] + [Tooltip("Modifier Key to enable strafing movement")] [SerializeField] KeyCode strafeKey; + + [BoxGroup("Movement")] + [Tooltip("Alternative modifier Key to enable strafing movement")] [SerializeField] KeyCode strafeKey2; + + [BoxGroup("Movement")] + [SerializeField] bool independentHeadMovement; + + [BoxGroup("Movement")] + [SerializeField] bool invertHeadLook; + [BoxGroup("Movement")] + [SerializeField] bool mouseMovement; + + [BoxGroup("Movement Speed")] [SerializeField] float forwardMovementSpeed; + [BoxGroup("Movement Speed")] [SerializeField] float reverseMovementSpeed; + [BoxGroup("Movement Speed")] [SerializeField] float strafeSpeed; - [SerializeField] float movementThreshold; + [BoxGroup("Movement Speed")] [SerializeField] float rotationSpeed; - [SerializeField] bool independentHeadMovement; - [SerializeField] bool invertHeadLook; + [BoxGroup("Movement Speed")] + [Tooltip("At which velocity does the animation system show an movement animation?")] + [SerializeField] float movementThreshold; + + [BoxGroup("Internal")] [SerializeField] Transform head; - [SerializeField] bool mouseMovement; + CharacterController characterController; - public UnityEvent MovementBlocked; - public UnityEvent Moving; + [SerializeField] UnityEvent movementBlocked; + [SerializeField] UnityEvent moving; - public CollisionFlags MovementResult { get; set; } + public UnityEvent MovementBlocked => movementBlocked; + + public UnityEvent Moving => moving; + + public CollisionFlags MovementResult { get; private set; } void Reset() { @@ -39,14 +67,6 @@ void Awake() characterController = GetComponent(); } - void OnEnable() - { - } - - void OnDisable() - { - } - void FixedUpdate() { var h = Input.GetAxis("Horizontal"); @@ -77,23 +97,23 @@ void FixedUpdate() if (mouseMovement) { - HandleMouseLook(); + head.localRotation = HandleMouseLook(); } MovementResult = characterController.Move(velocity); if (MovementResult != 0) { - MovementBlocked?.Invoke(); + movementBlocked?.Invoke(); } if (characterController.velocity.magnitude > movementThreshold) { - Moving?.Invoke(); + moving?.Invoke(); } } - void HandleMouseLook() + Quaternion HandleMouseLook() { var mouseLookAxisX = independentHeadMovement ? Input.GetAxis("Mouse X") : 0; var mouseLookAxisY = Input.GetAxis("Mouse Y") * (invertHeadLook ? 1 : -1); @@ -103,8 +123,8 @@ void HandleMouseLook() var eulers = head.localRotation.eulerAngles; eulers.y += angleY; eulers.x = Mathf.Clamp(Mathf.DeltaAngle(0, eulers.x + angleX), -45, 45); - - head.localRotation = Quaternion.Euler(eulers.x, eulers.y, 0); + eulers.z = 0; + return Quaternion.Euler(eulers); } } } \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity b/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity index 9b23f58..f86b0d4 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity +++ b/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity @@ -4253,19 +4253,19 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 3} propertyPath: m_LocalRotation.x - value: 0 + value: -0 objectReference: {fileID: 0} - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 3} propertyPath: m_LocalRotation.y - value: 0.9659258 + value: 0.9174745 objectReference: {fileID: 0} - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 3} propertyPath: m_LocalRotation.z - value: 0 + value: -0 objectReference: {fileID: 0} - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 3} propertyPath: m_LocalRotation.w - value: 0.2588191 + value: 0.3977945 objectReference: {fileID: 0} - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 3} propertyPath: m_RootOrder @@ -4273,7 +4273,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4100914089427470, guid: f124838f11137ef4fade04d0ac972bc6, type: 3} propertyPath: m_LocalEulerAnglesHint.y - value: 150 + value: 133.119 objectReference: {fileID: 0} - target: {fileID: 114571473726663984, guid: f124838f11137ef4fade04d0ac972bc6, type: 3} diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageAggregator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageAggregator.cs index b87abfe..5844f47 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageAggregator.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageAggregator.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using JetBrains.Annotations; using NaughtyAttributes; using UnityEngine; using UnityEngine.Events; @@ -6,10 +7,35 @@ namespace UnityTutorialSystem.Aggregators { - public class MatchProgressEvent : UnityEvent - { - } - + /// + /// Aggregates low-level event stream messages into higher level aggregate events. + /// An typical EventMessageAggregator monitors one or more event streams to detect + /// predefined sequences of events in the stream. When an event sequence is fully + /// matched, the built-in events of this class can be used to fire a new event stream + /// message via an associated . + /// + /// + /// + /// An EventMessageAggregator follows a defined lifecycle. + /// + /// + /// During the event the aggregator will collect data from the + /// given configuration (usually a set of objects + /// injected into the property) and will build up any + /// matcher-specific internal data structures during repeated calls to + /// . As part of the initialization, the aggregator + /// will subscribe to the associated event streams of all monitored messages. + /// + /// + /// While the aggregation is active and not in a terminal state (success or failure) + /// this class will react to incoming s. Any + /// internal state change will trigger the event. + /// + /// + /// This implementation assumes that the set of receivable messages does not change + /// during the lifetime of the instance. + /// + /// public abstract class EventMessageAggregator : MonoBehaviour, IEventMessageAggregator { readonly HashSet streams; @@ -26,33 +52,109 @@ protected EventMessageAggregator() matchProgress = new MatchProgressEvent(); } + /// + /// This event is fired when the aggregator is ready to receive messages after this MonoBehaviour became active. + /// public UnityEvent MatchStarting => matchStarting; + + /// + /// This event is fired when the aggregator has successfully finished matching events. Be aware that this event + /// is NOT fired when the matching fails with an error. To receive error information subscribe to the MatchProgress + /// event and check the sender's MatchResult property for failures. + /// public UnityEvent MatchComplete => matchComplete; + + /// + /// This event is fired whenever any progress has been made. Any internal state change will always result in a + /// MatchProgress event. + /// public MatchProgressEvent MatchProgress => matchProgress; + /// + /// Resets the aggregator to the initial state as if no message has been received yet. + /// public abstract void ResetMatch(); + /// + /// Queries the internal state of the message aggregator. The given buffer will be filled with + /// structs containing the expected event in the order they are expected to be seen as well as flags indicating whether + /// the event has been seen or is expected to be seen next. + /// + /// A receive buffer. If null, a new list will be created. If the list is non-empty, the list will be cleared. + /// The buffer provided or a new list if the buffer given is null. public abstract List ListEvents(List buffer); + /// + /// Returns the current state of the matching process. + /// public virtual EventMessageMatcherState MatchResult { get; protected set; } - protected abstract bool OnEventReceived(BasicEventStreamMessage received); - void Awake() { RegisterValidMessages(); } - void DebugLog(string message) + /// + /// Registers all event messages. This method filters out any messages injected that are + /// either null or that have no associated. + /// + /// + /// This default processing of the injected event messages can be disabled by overriding + /// and returning false in that method. + /// + void RegisterValidMessages() { -#if DEBUG - if (debug) + if (OnBeforeRegisterMessages()) { - Debug.Log(name + ": " + message); + DebugLog("Registering .. " + name); + foreach (var m in Messages) + { + if (m == null) + { + continue; + } + + RegisterValidMessage(m); + if (m.Stream != null) + { + streams.Add(m.Stream); + } + else + { + Debug.LogError("Unable to process message that has no publishing stream. " + m); + } + } } -#endif + + OnAfterRegisterMessages(); } + /// + /// An extension point to allow to skip the default message registration. + /// + /// true if the default message processing should commence, false otherwise. + protected virtual bool OnBeforeRegisterMessages() + { + return true; + } + + /// + /// An extension point to allow post-processing of the registered messages and the matcher state. + /// + protected virtual void OnAfterRegisterMessages() + { + } + + /// + /// A service callback to register the given message. The message is guaranteed to be non-null and + /// to have an associated event stream. + /// + /// The message + protected abstract void RegisterValidMessage([NotNull] BasicEventStreamMessage m); + + /// + /// Registers as listener to all known event streams and fires the MatchStarting event. + /// protected virtual void OnEnable() { foreach (var stream in streams) @@ -63,56 +165,88 @@ protected virtual void OnEnable() MatchStarting?.Invoke(); } - void OnEventReceivedWrapper(BasicEventStreamMessage arg0) + /// + /// Unregisters as listener from all known event streams. + /// + protected virtual void OnDisable() + { + foreach (var stream in streams) + { + stream.ReceivedEvent.RemoveListener(OnEventReceivedWrapper); + } + } + + /// + /// Callback that is invoked whenever one of the event streams generated a new message. If the message + /// received is not one of the defined messages for this aggregator or if the aggregator is in a terminal + /// state, the message will be ignored. + /// + /// The message received from the event streams + void OnEventReceivedWrapper(BasicEventStreamMessage message) { if (MatchResult != EventMessageMatcherState.Waiting) { - DebugLog("Not Handling event " + arg0 + " in " + gameObject.name + " -> " + MatchResult); + DebugLog("Not Handling event " + message + " in " + gameObject.name + " -> " + MatchResult); return; } + if (!Messages.Contains(message)) + { + return; + } - if (OnEventReceived(arg0)) + if (OnEventReceived(message)) { - DebugLog("Handling event " + arg0 + " in " + gameObject.name); - MatchProgress?.Invoke(this, arg0); + DebugLog("Handling event " + message + " in " + gameObject.name); + MatchProgress?.Invoke(this, message); } else { - DebugLog("Rejected event " + arg0 + " in " + gameObject.name); + DebugLog("Rejected event " + message + " in " + gameObject.name); } } - protected abstract void RegisterValidMessage(BasicEventStreamMessage m); - - void RegisterValidMessages() + /// + /// A callback used when event messages have been received from one of the underlying s. + /// + /// The message received from the event stream. + /// + protected abstract bool OnEventReceived(BasicEventStreamMessage received); + + /// + /// Filters the log messages by the debug flag. + /// + /// + void DebugLog(string message) { - DebugLog("Registering .. " + name); - foreach (var m in Messages) +#if DEBUG + if (debug) { - if (m == null) - { - continue; - } - - RegisterValidMessage(m); - if (m.Stream != null) - { - streams.Add(m.Stream); - } - else - { - Debug.LogError("Unable to process message that has no publishing stream. " + m); - } + Debug.Log(name + ": " + message, this); } +#endif } - - protected virtual void OnDisable() + + /// + /// Simple helper function that ensures that the buffer used in ListEvents is correctly + /// initialised. If a list is + /// + /// a list buffer, or null to create a new buffer + /// The buffer or a new list. + [NotNull] protected static List EnsureBufferValid([CanBeNull] List buffer, int capacity = 0) { - foreach (var stream in streams) + if (buffer == null) { - stream.ReceivedEvent.RemoveListener(OnEventReceivedWrapper); + buffer = new List(capacity); + } + else + { + buffer.Clear(); + buffer.Capacity = Mathf.Max(buffer.Capacity, capacity); } + + return buffer; } + } } \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageCounter.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageCounter.cs index 4ea2a8b..2b4cc24 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageCounter.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageCounter.cs @@ -2,47 +2,42 @@ using System.Collections.Generic; using UnityEngine; using UnityTutorialSystem.Events; +using UnityTutorialSystem.Helpers; namespace UnityTutorialSystem.Aggregators { /// - /// A simple example of an aggregator function. This behaviour listens for - /// incoming events that match the given message. + /// A simple example of a message aggregator. This class counts the incoming events that match the given message. /// public class EventMessageCounter : EventMessageAggregator { - readonly HashSet messagePool; + readonly HashSet> messagePool; [SerializeField] int targetCount; public EventMessageCounter() { - messagePool = new HashSet(); + messagePool = new HashSet>(); } - public int Count { get; set; } + public int Count { get; private set; } + /// protected override void RegisterValidMessage(BasicEventStreamMessage m) { - messagePool.Add(m); + messagePool.Add(new UnityObjectWrapper(m)); } + /// public override void ResetMatch() { MatchResult = EventMessageMatcherState.Waiting; Count = 0; } + /// public override List ListEvents(List buffer) { - if (buffer == null) - { - buffer = new List(Messages.Count); - } - else - { - buffer.Clear(); - buffer.Capacity = Math.Max(buffer.Capacity, Messages.Count); - } + buffer = EnsureBufferValid(buffer, Messages.Count); var completed = MatchResult == EventMessageMatcherState.Success; var expected = MatchResult == EventMessageMatcherState.Waiting; @@ -56,19 +51,20 @@ public override List ListEvents(List buffe protected override bool OnEventReceived(BasicEventStreamMessage received) { - if (messagePool.Contains(received)) + if (!messagePool.Contains(new UnityObjectWrapper(received))) { - Count += 1; - if (targetCount == Count) - { - MatchResult = EventMessageMatcherState.Success; - MatchComplete?.Invoke(); - } + return false; + } - return true; + Count += 1; + if (targetCount == Count) + { + MatchResult = EventMessageMatcherState.Success; + MatchComplete?.Invoke(); } - return false; + return true; + } } } \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageMatcherState.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageMatcherState.cs new file mode 100644 index 0000000..dc7ce17 --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageMatcherState.cs @@ -0,0 +1,22 @@ +namespace UnityTutorialSystem.Aggregators +{ + /// + /// Indicates the current state of the matching process for a . + /// + /// + public enum EventMessageMatcherState + { + /// + /// Indicates that matching has not yet finished. + /// + Waiting, + /// + /// Indicates that matching has finished successfully. + /// + Success, + /// + /// Signals that matching failed at some point in the process. + /// + Failure + } +} \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageMatcherState.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageMatcherState.cs.meta new file mode 100644 index 0000000..45c45d4 --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventMessageMatcherState.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: eadd0d878bf0412fbd212abfc7686cbf +timeCreated: 1554221904 \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSequenceAggregator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSequenceAggregator.cs index 4796abd..5c51790 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSequenceAggregator.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSequenceAggregator.cs @@ -1,5 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; +using JetBrains.Annotations; using NaughtyAttributes; using UnityEngine; using UnityEngine.Events; @@ -12,16 +12,38 @@ namespace UnityTutorialSystem.Aggregators /// predefined sequence of events. If the matching is strict, any incoming event /// that does not match the expected event will mark the sequence as failed. /// A non-strict matcher will simply ignore events that do not match and will - /// patiently wait until it sees a next suitable event. Non-strict matchers will + /// patiently wait until it sees a suitable next event. Therefore non-strict matchers will /// never fire a match-failed event. /// + /// + /// Acceptable events are stored in the 'validMessages' list. + /// This class tracks each received message in a list of flags, one entry for each + /// accepted message. The success message is fired when all events have been seen at + /// least once. + /// public class EventSequenceAggregator : EventMessageAggregator { + /// + /// Defines the validation mode for this aggregator. + /// public enum ValidationMode { - Lenient, - AllowOutOfOrderEvents, - Strict + /// + /// Requests lenient matching. A lenient matcher will ignore out of order events. + /// + [UsedImplicitly] Lenient = 0, + /// + /// Requests that the matcher accepts events in a relaxed order. Events that form a + /// series of events that all are marked as out-of-order executable will be treated + /// as an event set instead of an event list. Out of order processing will not skip + /// events that are not marked for out of order execution. + /// + AllowOutOfOrderEvents = 1, + /// + /// Requires strict matching. Any event not seen in the correct order will mark the + /// aggregator as failed. + /// + Strict = 2 } readonly List validMessages; @@ -37,12 +59,14 @@ public EventSequenceAggregator() matchState = new List(); } + /// protected override void RegisterValidMessage(BasicEventStreamMessage m) { validMessages.Add(m); matchState.Add(false); } + /// public override void ResetMatch() { nextEvent = 0; @@ -54,17 +78,10 @@ public override void ResetMatch() } } + /// public override List ListEvents(List buffer) { - if (buffer == null) - { - buffer = new List(validMessages.Count); - } - else - { - buffer.Clear(); - buffer.Capacity = Math.Max(buffer.Capacity, Messages.Count); - } + buffer = EnsureBufferValid(buffer, Messages.Count); for (var index = 0; index < validMessages.Count; index++) { @@ -75,6 +92,7 @@ public override List ListEvents(List buffe return buffer; } + /// protected override bool OnEventReceived(BasicEventStreamMessage messageReceived) { if (nextEvent >= validMessages.Count) @@ -96,32 +114,33 @@ protected override bool OnEventReceived(BasicEventStreamMessage messageReceived) return true; } - if (mode == ValidationMode.AllowOutOfOrderEvents) + switch (mode) { - for (var idx = nextEvent + 1; idx < validMessages.Count; idx += 1) + case ValidationMode.AllowOutOfOrderEvents: { - var msg = validMessages[idx]; - if (!msg.AllowOutOfOrderExecution) + for (var idx = nextEvent + 1; idx < validMessages.Count; idx += 1) { - break; - } + var msg = validMessages[idx]; + if (!msg.AllowOutOfOrderExecution) + { + break; + } - if (msg == messageReceived) - { - if (!matchState[idx]) + if (msg == messageReceived && !matchState[idx]) { matchState[idx] = true; return true; } } - } - } - if (mode == ValidationMode.Strict) - { - MatchResult = EventMessageMatcherState.Failure; - matchFailed?.Invoke(); - return true; + break; + } + case ValidationMode.Strict: + { + MatchResult = EventMessageMatcherState.Failure; + matchFailed?.Invoke(); + return true; + } } return false; diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSetAggregator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSetAggregator.cs index 1e70896..395e124 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSetAggregator.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/EventSetAggregator.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using UnityTutorialSystem.Events; @@ -7,17 +6,34 @@ namespace UnityTutorialSystem.Aggregators { /// - /// A aggregator that waits for all events to occur. The events can - /// occur in any order. If strict mode is enabled, a non-matching - /// event will fail this aggregator. + /// + /// An aggregator that waits for all events to occur. The events can + /// occur in any order. If strict mode is enabled, a non-matching + /// event will fail this aggregator. + /// + /// + /// Duplicate declared messages will be collated into a single expected message. + /// To match multiple messages of the same type, use a + /// as a child matcher. + /// /// public class EventSetAggregator : EventMessageAggregator { + /// + /// Defines how strict incoming messages are matched against the set of + /// received messages. + /// public enum MatchMode { - Lenient, - IgnoreDuplicates, - Strict + /// + /// Requests an lenient matching mode. Duplicate messages will be ignored. + /// + Lenient = 0, + /// + /// Requires strict matching. Any duplicate event received will fail the + /// aggregator. + /// + Strict = 2 } readonly Dictionary matchState; @@ -33,6 +49,7 @@ public EventSetAggregator() messages = new List(); } + /// protected override void RegisterValidMessage(BasicEventStreamMessage m) { if (matchState.ContainsKey(m)) @@ -44,6 +61,7 @@ protected override void RegisterValidMessage(BasicEventStreamMessage m) matchState[m] = false; } + /// public override void ResetMatch() { foreach (var k in matchState) @@ -55,6 +73,7 @@ public override void ResetMatch() matchCount = 0; } + /// protected override bool OnEventReceived(BasicEventStreamMessage messageReceived) { if (matchCount == matchState.Count) @@ -93,21 +112,13 @@ protected override bool OnEventReceived(BasicEventStreamMessage messageReceived) return true; } + /// public override List ListEvents(List buffer) { - if (buffer == null) - { - buffer = new List(messages.Count); - } - else - { - buffer.Clear(); - buffer.Capacity = Math.Max(buffer.Capacity, messages.Count); - } + buffer = EnsureBufferValid(buffer, messages.Count); - for (var index = 0; index < messages.Count; index++) + foreach (var m in messages) { - var m = messages[index]; bool matchCompleted; matchState.TryGetValue(m, out matchCompleted); buffer.Add(new EventMessageState(m, matchCompleted, enabled && !matchCompleted)); diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/IEventMessageAggregator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/IEventMessageAggregator.cs index 10eb742..8849fbf 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/IEventMessageAggregator.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/IEventMessageAggregator.cs @@ -5,17 +5,22 @@ namespace UnityTutorialSystem.Aggregators { - public enum EventMessageMatcherState - { - Waiting, - Success, - Failure - } - + /// + /// A struct representing the matching state of an EventMessageAggregator. + /// public struct EventMessageState { + /// + /// The event stream message represented by this state. + /// public readonly BasicEventStreamMessage Message; + /// + /// Has this message been seen by the aggregator? + /// public readonly bool Completed; + /// + /// Is this one of the messages the aggregator expects to receive next? + /// public readonly bool ExpectedNext; public EventMessageState(BasicEventStreamMessage message, bool completed, bool expectedNext) @@ -31,14 +36,48 @@ public EventMessageState(BasicEventStreamMessage message, bool completed, bool e } } + /// + /// Aggregates low-level event stream messages into higher level aggregate events. + /// An typical EventMessageAggregator monitors one or more event streams to detect + /// predefined sequences of events in the stream. When an event sequence is fully + /// matched, the built-in events of this class can be used to fire a new event stream + /// message via an associated . + /// + /// + /// This interface primarily exists for unit testing purposes. + /// public interface IEventMessageAggregator { + /// + /// This event is fired when the aggregator is ready to receive messages after this MonoBehaviour became active. + /// + UnityEvent MatchStarting { get; } + + /// + /// This event is fired when the aggregator has successfully finished matching events. Be aware that this event + /// is NOT fired when the matching fails with an error. To receive error information subscribe to the MatchProgress + /// event and check the sender's MatchResult property for failures. + /// UnityEvent MatchComplete { get; } + + /// + /// This event is fired whenever any progress has been made. Any internal state change will always result in a + /// MatchProgress event. + /// MatchProgressEvent MatchProgress { get; } - EventMessageMatcherState MatchResult { get; } - - List ListEvents(List buffer); + /// + /// Resets the aggregator to the initial state as if no message has been received yet. + /// void ResetMatch(); + + /// + /// Queries the internal state of the message aggregator. The given buffer will be filled with + /// structs containing the expected event in the order they are expected to be seen as well as flags indicating whether + /// the event has been seen or is expected to be seen next. + /// + /// A receive buffer. If null, a new list will be created. If the list is non-empty, the list will be cleared. + /// The buffer provided or a new list if the buffer given is null. + List ListEvents(List buffer); } } \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/MatchProgressEvent.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/MatchProgressEvent.cs new file mode 100644 index 0000000..6ba2e4f --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/MatchProgressEvent.cs @@ -0,0 +1,15 @@ +using UnityEngine.Events; +using UnityTutorialSystem.Events; + +namespace UnityTutorialSystem.Aggregators +{ + /// + /// MatchProgressEvents are fired every time the state of an changes. + /// + /// + /// This is an empty materialization of a generic UnityEvent as Unity cannot handle generics well. + /// + public class MatchProgressEvent : UnityEvent + { + } +} \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/MatchProgressEvent.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/MatchProgressEvent.cs.meta new file mode 100644 index 0000000..69c454e --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/MatchProgressEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 446436bec03f4270a10deca2357c50ad +timeCreated: 1554219269 \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/OneOfEventSetAggregator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/OneOfEventSetAggregator.cs index 38c773e..f648ee6 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/OneOfEventSetAggregator.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Aggregators/OneOfEventSetAggregator.cs @@ -5,7 +5,7 @@ namespace UnityTutorialSystem.Aggregators { /// - /// A reactor component that waits for any of the given messages and fires a + /// An aggregator component that waits for any of the given messages and fires a /// success message if at least one of the listed messages has been encountered. /// public class OneOfEventSetAggregator : EventMessageAggregator @@ -20,6 +20,7 @@ public OneOfEventSetAggregator() messages = new List(); } + /// protected override void RegisterValidMessage(BasicEventStreamMessage m) { if (matchState.Add(m)) @@ -28,12 +29,14 @@ protected override void RegisterValidMessage(BasicEventStreamMessage m) } } + /// public override void ResetMatch() { MatchResult = EventMessageMatcherState.Waiting; matchCount = 0; } + /// protected override bool OnEventReceived(BasicEventStreamMessage messageReceived) { if (matchCount > 0) @@ -53,6 +56,7 @@ protected override bool OnEventReceived(BasicEventStreamMessage messageReceived) return false; } + /// public override List ListEvents(List buffer) { if (buffer == null) diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStream.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStream.cs index 8756b36..ca6917a 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStream.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStream.cs @@ -8,38 +8,53 @@ namespace UnityTutorialSystem.Events { /// - /// A event stream receives and aggregates preconfigured messages. - /// For each message received the object maintains a counter. - /// Messages are normally generated by game objects in response to - /// state changes or events. + /// A event stream publishes preconfigured messages. Both the event stream and the + /// messages are s defined as assets in the Unity editor. + /// Each message defined for an event stream object contains a reference to the event + /// stream that declared it. You can publish the message via its + /// method. /// + /// + /// Publishing messages on an EventStreams is a reentrant operation. Messages are guaranteed + /// to be sent in the order received. If - as an result of an published message - a listener + /// of this stream publishes new messages these messages will be processed after all other pending + /// messages have been finished. This class enforces a hard limit of 250 processed message per + /// message cascade. Any excess message will be dropped. + /// [CreateAssetMenu(menuName = "Event Stream/Event Stream")] public class BasicEventStream : ScriptableObject { - [NonSerialized] readonly List queuedMessages; [SerializeField] bool ignoreForNextEventIndicatorHint; - [SerializeField] [ReorderableList] List messageTypes; + [SerializeField] bool debug; + + [NonSerialized] readonly Queue queuedMessages; [NonSerialized] bool processingMessage; public BasicEventStream() { messageTypes = new List(); receivedEvent = new EventStreamReceivedEvent(); - queuedMessages = new List(); + queuedMessages = new Queue(); processingMessage = false; } + /// + /// A flag defining that messages defined by this event stream should not be used to + /// display visual indicators for actions that generate the next events. Use this + /// for events that represent internal state. Remember that aggregator implementations + /// can track events from multiple sources. + /// public bool IgnoreForNextEventIndicatorHint => ignoreForNextEventIndicatorHint; - bool IsValidMessage(string messageName) - { - return messageTypes.Contains(messageName); - } - - public virtual bool IsValidMessage(BasicEventStreamMessage msg) + /// + /// Checks whether the message given is a valid message that belongs to this event stream. + /// + /// the message being tested + /// + public virtual bool IsValidMessage([CanBeNull] BasicEventStreamMessage msg) { - return IsValidMessage(msg.name); + return msg != null && messageTypes.Contains(msg.name); } void Awake() @@ -47,13 +62,17 @@ void Awake() processingMessage = false; } +#if UNITY_EDITOR + /// + /// An editor function to generate message objects from the list of messages defined in . + /// [Button("Generate Message Handles")] [UsedImplicitly] internal void Regenerate() { var retainedNodes = BasicEventStreamEditorSupport.CleanGraph(this); var generatedNodes = new List(); - Func factoryFn = CreateNode; + foreach (var node in messageTypes) { if (node == null) @@ -68,7 +87,7 @@ internal void Regenerate() continue; } - var msg = factoryFn(); + var msg = CreateNode(); msg.name = node; msg.SetUpStream(this); generatedNodes.Add(msg); @@ -77,11 +96,23 @@ internal void Regenerate() BasicEventStreamEditorSupport.GenerateNodes(this, generatedNodes); } + /// + /// A factory function to create new message event sub-objects. + /// + /// the newly created message object protected virtual BasicEventStreamMessage CreateNode() { return CreateInstance(); } +#endif + /// + /// Publishes the message if the message given is defined by this event stream. + /// Publishing is a reentrant operation and newly generated messages will be + /// processed in the order they are received. This method will not process more than + /// 250 messages in a single cascade. + /// + /// the message being published public void Publish(BasicEventStreamMessage msg) { if (msg.Stream != this) @@ -98,7 +129,7 @@ public void Publish(BasicEventStreamMessage msg) } DebugLog("=== Queue message " + msg); - queuedMessages.Add(msg); + queuedMessages.Enqueue(msg); } else { @@ -109,12 +140,14 @@ public void Publish(BasicEventStreamMessage msg) ReceivedEvent?.Invoke(msg); DebugLog("=== End Publish message " + msg); - for (var m = 0; m < queuedMessages.Count; m += 1) + var cascadeCount = 0; + while (cascadeCount < 250 && queuedMessages.Count > 0) { - var message = queuedMessages[m]; + var message = queuedMessages.Dequeue(); DebugLog("=== Begin Publish queued message " + message); ReceivedEvent?.Invoke(message); DebugLog("=== End Publish queued message " + message); + cascadeCount += 1; } queuedMessages.Clear(); @@ -128,7 +161,12 @@ public void Publish(BasicEventStreamMessage msg) void DebugLog(string message) { - // Debug.Log(message); +#if DEBUG + if (debug) + { + Debug.Log(message, this); + } +#endif } #region ReceivedEvent @@ -138,12 +176,17 @@ void DebugLog(string message) /// we have to derive a concrete (aka non-generic) subclass for it. Oh, well .. /// [UsedImplicitly] - public class EventStreamReceivedEvent : UnityEvent + class EventStreamReceivedEvent : UnityEvent { } [SerializeField] EventStreamReceivedEvent receivedEvent; - public EventStreamReceivedEvent ReceivedEvent => receivedEvent; + + /// + /// Subscribe to the ReceivedEvent event to get notified when a new message has been + /// published. + /// + public UnityEvent ReceivedEvent => receivedEvent; #endregion } diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamEditorSupport.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamEditorSupport.cs index 7b8891a..0ad5796 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamEditorSupport.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamEditorSupport.cs @@ -1,23 +1,25 @@ -using System.Collections.Generic; +#if UNITY_EDITOR +using System.Collections.Generic; using UnityEditor; using UnityEngine; -#if UNITY_EDITOR - -#endif - namespace UnityTutorialSystem.Events { + /// + /// Support code for creating event message sub-objects on BasicEventStream assets. + /// This is an editor-only class containing helper methods used by the BasicEventStream + /// editor callbacks. + /// public static class BasicEventStreamEditorSupport { /// - /// Removes all nodes that are no longer part of the graph's set of defined event types. + /// Removes all nodes that are no longer part of the stream's set of defined event types. /// The list returned contains all retained nodes that continue to be valid. /// - /// - /// + /// The event stream being processed + /// A buffer of retained message nodes keyed by their name /// - public static Dictionary CleanGraph(BasicEventStream graph, + public static Dictionary CleanGraph(BasicEventStream eventStream, Dictionary retainedNodes = null) { if (retainedNodes == null) @@ -25,14 +27,13 @@ public static Dictionary CleanGraph(BasicEventS retainedNodes = new Dictionary(); } -#if UNITY_EDITOR - if (graph == null) + if (eventStream == null) { Debug.Log("Not a graph"); return retainedNodes; } - var assetPath = AssetDatabase.GetAssetPath(graph); + var assetPath = AssetDatabase.GetAssetPath(eventStream); foreach (var asset in AssetDatabase.LoadAllAssetsAtPath(assetPath)) { if (asset == null) @@ -40,7 +41,7 @@ public static Dictionary CleanGraph(BasicEventS continue; } - if (asset == graph) + if (asset == eventStream) { continue; } @@ -49,7 +50,7 @@ public static Dictionary CleanGraph(BasicEventS var node = asset as BasicEventStreamMessage; if (node != null) { - if (graph.IsValidMessage(node)) + if (eventStream.IsValidMessage(node)) { Debug.Log("Retained asset " + asset + " of type " + asset.GetType()); retainedNodes.Add(node.name, node); @@ -66,14 +67,18 @@ public static Dictionary CleanGraph(BasicEventS Object.DestroyImmediate(asset, true); } } -#endif + return retainedNodes; } + /// + /// Adds the given list of generated nodes as sub-objects to the event stream asset. + /// + /// The event stream + /// The nodes that should be added to the stream asset public static void GenerateNodes(BasicEventStream basicEventStream, List generatedNodes) { -#if UNITY_EDITOR foreach (var n in generatedNodes) { EditorUtility.SetDirty(n); @@ -81,7 +86,7 @@ public static void GenerateNodes(BasicEventStream basicEventStream, } EditorUtility.SetDirty(basicEventStream); -#endif } } -} \ No newline at end of file +} +#endif diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamMessage.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamMessage.cs index 6ea540c..6feee13 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamMessage.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamMessage.cs @@ -3,17 +3,30 @@ namespace UnityTutorialSystem.Events { + /// + /// The BasicEventStreamMessage is a generic message emitted by a BasicEventStream. + /// Messages are identified by their asset name. Each message holds a reference to the + /// message stream that can publish it. Use the method to send + /// this event to all subscribers of the message stream. + /// public class BasicEventStreamMessage : ScriptableObject { [SerializeField] [ReadOnly] BasicEventStream stream; [SerializeField] bool allowOutOfOrderExecution; + /// + /// Defines whether this message accepts out-of-order processing of sibling events in the + /// same event message aggregator. + /// public bool AllowOutOfOrderExecution => allowOutOfOrderExecution; + /// + /// The message stream associated with this message. + /// public BasicEventStream Stream { - get { return stream; } - protected internal set { stream = value; } + get => stream; + protected set => stream = value; } internal void SetUpStream(BasicEventStream eventStream) diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/UnityObjectWrapper.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/UnityObjectWrapper.cs new file mode 100644 index 0000000..383f89c --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/UnityObjectWrapper.cs @@ -0,0 +1,45 @@ +using System; +using JetBrains.Annotations; + +namespace UnityTutorialSystem.Helpers +{ + public struct UnityObjectWrapper where T: UnityEngine.Object + { + [NotNull] public readonly UnityEngine.Object Value; + + public UnityObjectWrapper(UnityEngine.Object value) + { + // ReSharper disable once JoinNullCheckWithUsage + if (ReferenceEquals(value, null)) + { + throw new ArgumentNullException(); + } + Value = value; + } + + public bool Equals(UnityObjectWrapper other) + { + return Equals(Value.GetInstanceID(), other.Value.GetInstanceID()); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) + { + return false; + } + + return obj is UnityObjectWrapper other && Equals(other); + } + + public override int GetHashCode() + { + return (Value != null ? Value.GetHashCode() : 0); + } + + public static implicit operator UnityEngine.Object (UnityObjectWrapper w) + { + return w.Value; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/UnityObjectWrapper.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/UnityObjectWrapper.cs.meta new file mode 100644 index 0000000..1a055b6 --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/UnityObjectWrapper.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a56c930883ad40f690e5eafe4535d08f +timeCreated: 1554223107 \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventMessage.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventMessage.cs index 8da1122..66375cb 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventMessage.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventMessage.cs @@ -1,17 +1,9 @@ -using System; -using NaughtyAttributes; +using NaughtyAttributes; using UnityEngine; using UnityTutorialSystem.Events; namespace UnityTutorialSystem.Tutorial { - public enum TutorialEventState - { - Open, - Success, - Failure - } - public class TutorialEventMessage : BasicEventStreamMessage { [SerializeField] [ResizableTextArea] string taskOpenMessage; @@ -23,29 +15,5 @@ public class TutorialEventMessage : BasicEventStreamMessage public string TaskSuccessMessage => taskSuccessMessage; public string TaskFailureMessage => taskFailureMessage; - - public string Message(TutorialEventState msg) - { - switch (msg) - { - case TutorialEventState.Open: - return TaskOpenMessage; - case TutorialEventState.Success: - return TaskSuccessMessage; - case TutorialEventState.Failure: - return TaskFailureMessage; - default: - throw new ArgumentOutOfRangeException(nameof(msg), msg, null); - } - } - - public void CopyFrom(BasicEventStreamMessage msg) - { - Stream = msg.Stream; - taskOpenMessage = msg.name; - taskFailureMessage = msg.name; - taskSuccessMessage = msg.name; - taskOpenMessage = msg.name; - } } } \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs index 033f3de..94c9160 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs @@ -173,20 +173,6 @@ static void AddGeneratedChildItems(List childStates, Tut } } - static TutorialEventMessage Convert(BasicEventStreamMessage msg) - { - var message = msg as TutorialEventMessage; - if (message != null) - { - return message; - } - - Debug.LogError("Old message format encountered"); - var m = ScriptableObject.CreateInstance(); - m.CopyFrom(msg); - return m; - } - static TutorialEventStateData AddTree(ExpectedStates state, Dictionary nodeMapper) { diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 6ce5345..609604b 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -106,6 +106,11 @@ PlayerSettings: xboxOneDisableEsram: 0 xboxOnePresentImmediateThreshold: 0 switchQueueCommandMemory: 0 + switchQueueControlMemory: 16384 + switchQueueComputeMemory: 262144 + switchNVNShaderPoolsGranularity: 33554432 + switchNVNDefaultPoolsGranularity: 16777216 + switchNVNOtherPoolsGranularity: 16777216 vulkanEnableSetSRGBWrite: 0 m_SupportedAspectRatios: 4:3: 1 @@ -420,6 +425,7 @@ PlayerSettings: switchAllowsRuntimeAddOnContentInstall: 0 switchDataLossConfirmation: 0 switchUserAccountLockEnabled: 0 + switchSystemResourceMemory: 16777216 switchSupportedNpadStyles: 3 switchNativeFsCacheSize: 32 switchIsHoldTypeHorizontal: 0 From 8e869887c39bd2a949a7371eb68080772cc93544 Mon Sep 17 00:00:00 2001 From: Thomas Morgner Date: Wed, 3 Apr 2019 12:09:54 +0100 Subject: [PATCH 17/24] Documentation; Removed unused code. --- .../Scenes/TutorialAssembly.unity | 4 +- .../Scripts/Events/BasicEventStreamMessage.cs | 8 ++++ .../EventMessageAggregatorStatePublisher.cs | 45 ++++++++++++++++++- .../Scripts/Events/LogEventStream.cs | 3 ++ .../Scripts/Events/StreamEventSource.cs | 12 +++++ .../Tutorial/TutorialEventTreeBinding.cs | 3 +- .../Tutorial/TutorialEventTreeItemRenderer.cs | 11 ++--- .../Scripts/Tutorial/TutorialEventTreeView.cs | 24 +++------- .../EventStreamTreeModelBuilder.cs} | 40 ++++++++--------- .../EventStreamTreeModelBuilder.cs.meta} | 0 .../EventStreamTreeModelData.cs} | 36 +++++++-------- .../EventStreamTreeModelData.cs.meta} | 0 .../Scripts/UI/Trees/TreeView.cs | 4 +- 13 files changed, 123 insertions(+), 67 deletions(-) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Tutorial/TutorialEventStreamManager.cs => UI/EventStreamTreeModelBuilder.cs} (86%) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Tutorial/TutorialEventStreamManager.cs.meta => UI/EventStreamTreeModelBuilder.cs.meta} (100%) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Tutorial/TutorialEventStateData.cs => UI/EventStreamTreeModelData.cs} (71%) rename Assets/Plugins/UnityTutorialSystem/Scripts/{Tutorial/TutorialEventStateData.cs.meta => UI/EventStreamTreeModelData.cs.meta} (100%) diff --git a/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity b/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity index f86b0d4..b3418b3 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity +++ b/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity @@ -1201,7 +1201,7 @@ MonoBehaviour: m_HandleRect: {fileID: 364011010} m_Direction: 2 m_Value: 0 - m_Size: 1 + m_Size: 0.99999994 m_NumberOfSteps: 0 m_OnValueChanged: m_PersistentCalls: @@ -2886,7 +2886,7 @@ PrefabInstance: - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} propertyPath: m_AnchoredPosition.y - value: 0 + value: 0.000031684416 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamMessage.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamMessage.cs index 6feee13..7c1ca7f 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamMessage.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/BasicEventStreamMessage.cs @@ -29,11 +29,19 @@ public BasicEventStream Stream protected set => stream = value; } + /// + /// A simple non-public entry point so that BasicEventStreams can + /// pass itself to instances of this class at design time. + /// + /// internal void SetUpStream(BasicEventStream eventStream) { stream = eventStream; } + /// + /// Publishes the message to the associated stream. + /// public void Publish() { if (stream != null) diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/EventMessageAggregatorStatePublisher.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/EventMessageAggregatorStatePublisher.cs index bcba665..a3399cf 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/EventMessageAggregatorStatePublisher.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/EventMessageAggregatorStatePublisher.cs @@ -2,11 +2,24 @@ using UnityEngine; using UnityEngine.Events; using UnityTutorialSystem.Aggregators; +using UnityTutorialSystem.UI; namespace UnityTutorialSystem.Events { + /// + /// A companion for instances that monitors the + /// EventMessageAggregator and republishes the events as UnityEvents. The + /// is also used by the to detect parent-child relationships between + /// EventMessageAggregator instances. + /// If no is injected into the field, this + /// class will try to locate a EventMessageAggregator on the same GameObject. + /// + /// public class EventMessageAggregatorStatePublisher : StreamEventSource { + /// + /// Materialization of a generic UnityEvent. + /// public class ProgressEvent : UnityEvent { } @@ -20,11 +33,35 @@ public EventMessageAggregatorStatePublisher() stateChanged = new ProgressEvent(); } + /// + /// Republishes the EventMessageAggregator's matchProgress event. + /// + /// public ProgressEvent StateChanged => stateChanged; + + /// + /// A BasicEventStreamMessage that is fired when the associated EventMessageAggregator successfully + /// finished its matching. The EventStream associated with this message will be considered a parent + /// stream by the EventStreamTreeModelBuilder. + /// public BasicEventStreamMessage SuccessMessage => successMessage; + /// + /// Republishes the associated EventMessageAggregator's current match result state. + /// public EventMessageMatcherState MatchResult => stateChain.MatchResult; + /// + /// Queries the internal state of the associated message aggregator. The given buffer will be filled + /// with structs containing the expected event in the order they are + /// expected to be seen as well as flags indicating whether the event has been seen or is expected to + /// be seen next. + /// + /// + /// A receive buffer. If null, a new list will be created. If the list is non-empty, + /// the list will be cleared. + /// + /// The buffer provided or a new list if the buffer given is null. public List FetchEvents(List buffer) { return stateChain.ListEvents(buffer); @@ -58,6 +95,12 @@ void OnDisable() } } + /// + /// Checks whether the message given matches the success message that is fired when the + /// EventMessageAggregator successfully matches its events received. + /// + /// + /// public override bool WillGenerateMessage(BasicEventStreamMessage msg) { return Equals(SuccessMessage, msg); @@ -79,8 +122,6 @@ void OnMatchComplete() { successMessage.Publish(); } - - Debug.Log("Fired success message " + successMessage); } } } \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs index c320c44..40dc6f9 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/LogEventStream.cs @@ -3,6 +3,9 @@ namespace UnityTutorialSystem.Events { + /// + /// A debug component that prints out all messages received by the given event stream. + /// public class LogEventStream : MonoBehaviour { [SerializeField] BasicEventStream stream; diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StreamEventSource.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StreamEventSource.cs index d5f686e..27489b0 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StreamEventSource.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StreamEventSource.cs @@ -2,8 +2,20 @@ namespace UnityTutorialSystem.Events { + /// + /// A base type for all MonoBehaviours that can activate EventStream messages. + /// StreamEventSources are referenced by the NextEvent-predictor system to + /// simplify the wiring up of event cascades. + /// public abstract class StreamEventSource : MonoBehaviour { + /// + /// Checks whether the message given will be generated by is source. The + /// NextEventSelector implementations will use this method to locate components + /// that could trigger the event in question. + /// + /// The message object to be evaluated + /// true if the source will generate this message, false otherwise. public abstract bool WillGenerateMessage(BasicEventStreamMessage msg); } } \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeBinding.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeBinding.cs index 7dfbf0d..9cf96f0 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeBinding.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeBinding.cs @@ -1,10 +1,11 @@ using UnityEngine; +using UnityTutorialSystem.UI; namespace UnityTutorialSystem.Tutorial { public class TutorialEventTreeBinding : MonoBehaviour { - [SerializeField] TutorialEventStreamManager modelSource; + [SerializeField] EventStreamTreeModelBuilder modelSource; [SerializeField] TutorialEventTreeView treeView; void Awake() diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs index cec1771..2d51ea6 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs @@ -3,12 +3,13 @@ using UnityEngine; using UnityEngine.UI; using UnityTutorialSystem.Events; +using UnityTutorialSystem.UI; using UnityTutorialSystem.UI.Trees; using VRKitchenSimulator.UI; namespace UnityTutorialSystem.Tutorial { - public class TutorialEventTreeItemRenderer : TreeItemRenderer + public class TutorialEventTreeItemRenderer : TreeItemRenderer { [SerializeField] Color whenNextEventColor; [SerializeField] Color whenCompletedColor; @@ -36,7 +37,7 @@ void Reset() label = GetComponentInChildren(); } - bool IsNextEvent(TutorialEventStateData data) + bool IsNextEvent(EventStreamTreeModelData data) { if (data.ExpectedNext == false) { @@ -113,7 +114,7 @@ void MarkLayoutDirty() } } - protected override void OnUpdateValue(TreePath treePath) + protected override void OnUpdateValue(TreePath treePath) { if (treePath == null) { @@ -122,7 +123,7 @@ protected override void OnUpdateValue(TreePath treePath) return; } - TutorialEventStateData data; + EventStreamTreeModelData data; if (treePath.TryGetLastComponent(out data) && (data.SourceMessage != null)) { if (label != null) @@ -169,7 +170,7 @@ void ApplyIndent(RectTransform rt) { if (!anchorStored) { - var tree = gameObject.GetComponentInParent>(); + var tree = gameObject.GetComponentInParent>(); if (tree != null) { indentCorrection = tree.ShowRootNode ? 0 : -1; diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs index 4c8d69b..a0f1892 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs @@ -1,28 +1,17 @@ using UnityEngine; +using UnityTutorialSystem.UI; using UnityTutorialSystem.UI.Trees; namespace UnityTutorialSystem.Tutorial -{ - public class TutorialEventTreeView : TreeView +{ + public class TutorialEventTreeView : TreeView { [SerializeField] TutorialEventTreeItemRenderer template; [SerializeField] bool showAllNodes; [SerializeField] bool hideCompletedSubTrees; - ITreeModel model; + protected override TreeItemRenderer ItemRenderer => template; - protected override TreeItemRenderer ItemRenderer => template; - - public ITreeModel Model - { - get { return model; } - set - { - model = value; - InternalModel = value; - } - } - - protected override bool IsPathVisible(TreePath path) + protected override bool IsPathVisible(TreePath path) { if (hideCompletedSubTrees) { @@ -38,8 +27,7 @@ protected override bool IsPathVisible(TreePath path) if (!showAllNodes) { - TutorialEventStateData stateData; - if (path.TryGetLastComponent(out stateData) && (stateData != null)) + if (path.TryGetLastComponent(out var stateData) && (stateData != null)) { // Debug.Log("Maybe Hiding node " + path); return stateData.Completed || stateData.ExpectedNext; diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamTreeModelBuilder.cs similarity index 86% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamTreeModelBuilder.cs index 94c9160..52e68d9 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamTreeModelBuilder.cs @@ -6,27 +6,27 @@ using UnityTutorialSystem.Events; using UnityTutorialSystem.UI.Trees; -namespace UnityTutorialSystem.Tutorial +namespace UnityTutorialSystem.UI { - public class TutorialEventStreamManager : MonoBehaviour + public class EventStreamTreeModelBuilder : MonoBehaviour { readonly List buffer; + readonly ListTreeModel model; [SerializeField] [ReorderableList] List tutorialStateTrackers; [SerializeField] bool debug; - ListTreeModel model; - Dictionary nodeMapper; - TutorialEventStateData rootNode; + Dictionary nodeMapper; + EventStreamTreeModelData rootNode; bool started; - public TutorialEventStreamManager() + public EventStreamTreeModelBuilder() { buffer = new List(); - model = new ListTreeModel(); + model = new ListTreeModel(); } - public ITreeModel Model => model; + public ITreeModel Model => model; void DebugLog(string message) { @@ -40,7 +40,7 @@ void DebugLog(string message) void Start() { - nodeMapper = new Dictionary(); + nodeMapper = new Dictionary(); started = true; var data = CollectTreeData(); @@ -78,7 +78,7 @@ void OnTrackerStateChanged(EventMessageAggregatorStatePublisher source, BasicEve return; } - TutorialEventStateData data; + EventStreamTreeModelData data; if (!nodeMapper.TryGetValue(source, out data)) { data = rootNode; @@ -143,11 +143,11 @@ List CollectTreeData() return data.Where(d => !d.IsDependency).ToList(); } - TutorialEventStateData CreateTreeNodes(List data, - Dictionary nodeMapper) + EventStreamTreeModelData CreateTreeNodes(List data, + Dictionary nodeMapper) { var roots = data.Where(s => !s.IsDependency).ToList(); - var childStates = new List(); + var childStates = new List(); foreach (var s in roots) { var item = AddTree(s, nodeMapper); @@ -155,10 +155,10 @@ TutorialEventStateData CreateTreeNodes(List data, AddGeneratedChildItems(childStates, item); } - return new TutorialEventStateData(null, false, true, childStates); + return new EventStreamTreeModelData(null, false, true, childStates); } - static void AddGeneratedChildItems(List childStates, TutorialEventStateData item) + static void AddGeneratedChildItems(List childStates, EventStreamTreeModelData item) { if (item.SourceMessage != null) { @@ -173,10 +173,10 @@ static void AddGeneratedChildItems(List childStates, Tut } } - static TutorialEventStateData AddTree(ExpectedStates state, - Dictionary nodeMapper) + static EventStreamTreeModelData AddTree(ExpectedStates state, + Dictionary nodeMapper) { - var childStates = new List(); + var childStates = new List(); foreach (var s in state.RequiredMessages) { ExpectedStates dependency; @@ -189,11 +189,11 @@ static TutorialEventStateData AddTree(ExpectedStates state, else { var message = (s.Message); - childStates.Add(new TutorialEventStateData(message, s.Completed, s.ExpectedNext)); + childStates.Add(new EventStreamTreeModelData(message, s.Completed, s.ExpectedNext)); } } - var stateData = new TutorialEventStateData(state.SuccessMessage, state.Completed, false, childStates); + var stateData = new EventStreamTreeModelData(state.SuccessMessage, state.Completed, false, childStates); nodeMapper[state.MessageSource] = stateData; return stateData; } diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamTreeModelBuilder.cs.meta similarity index 100% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStreamManager.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamTreeModelBuilder.cs.meta diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStateData.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamTreeModelData.cs similarity index 71% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStateData.cs rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamTreeModelData.cs index beceab5..104508e 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStateData.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamTreeModelData.cs @@ -5,29 +5,29 @@ using System.Text; using UnityTutorialSystem.Events; -namespace UnityTutorialSystem.Tutorial +namespace UnityTutorialSystem.UI { - public class TutorialEventStateData : IReadOnlyList, - IEquatable + public class EventStreamTreeModelData : IReadOnlyList, + IEquatable { - readonly List subTasks; + readonly List subTasks; - public TutorialEventStateData(BasicEventStreamMessage sourceMessage, + public EventStreamTreeModelData(BasicEventStreamMessage sourceMessage, bool completed, bool expectedNext, - IReadOnlyList data) + IReadOnlyList data) { SourceMessage = sourceMessage; Completed = completed; ExpectedNext = expectedNext; - subTasks = new List(data); + subTasks = new List(data); } - public TutorialEventStateData(BasicEventStreamMessage sourceMessage, + public EventStreamTreeModelData(BasicEventStreamMessage sourceMessage, bool completed, bool expectedNext, - params TutorialEventStateData[] data) : - this(sourceMessage, completed, expectedNext, (IReadOnlyList)data) + params EventStreamTreeModelData[] data) : + this(sourceMessage, completed, expectedNext, (IReadOnlyList)data) { } @@ -36,7 +36,7 @@ public TutorialEventStateData(BasicEventStreamMessage sourceMessage, public bool Completed { get; set; } public bool ExpectedNext { get; set; } - public bool Equals(TutorialEventStateData other) + public bool Equals(EventStreamTreeModelData other) { if (ReferenceEquals(null, other)) { @@ -61,10 +61,10 @@ public bool Equals(TutorialEventStateData other) return subTasks.SequenceEqual(other.subTasks); } - public TutorialEventStateData this[int idx] => subTasks[idx]; + public EventStreamTreeModelData this[int idx] => subTasks[idx]; public int Count => subTasks.Count; - IEnumerator IEnumerable.GetEnumerator() + IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } @@ -74,7 +74,7 @@ IEnumerator IEnumerable.GetEnumerator() return GetEnumerator(); } - public List.Enumerator GetEnumerator() + public List.Enumerator GetEnumerator() { return subTasks.GetEnumerator(); } @@ -96,7 +96,7 @@ public override bool Equals(object obj) return false; } - return Equals((TutorialEventStateData)obj); + return Equals((EventStreamTreeModelData)obj); } public override int GetHashCode() @@ -125,12 +125,12 @@ public override string ToString() return $"({nameof(SourceMessage)}: {SourceMessage.name}, {nameof(Completed)}: {Completed})"; } - public static bool operator ==(TutorialEventStateData left, TutorialEventStateData right) + public static bool operator ==(EventStreamTreeModelData left, EventStreamTreeModelData right) { return Equals(left, right); } - public static bool operator !=(TutorialEventStateData left, TutorialEventStateData right) + public static bool operator !=(EventStreamTreeModelData left, EventStreamTreeModelData right) { return !Equals(left, right); } @@ -142,7 +142,7 @@ public string AsTextTree() return b.ToString(); } - static void AsTreeText(StringBuilder b, TutorialEventStateData data, int indent) + static void AsTreeText(StringBuilder b, EventStreamTreeModelData data, int indent) { b.Append("".PadLeft(indent * 4)); b.Append(data); diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStateData.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamTreeModelData.cs.meta similarity index 100% rename from Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStateData.cs.meta rename to Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamTreeModelData.cs.meta diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs index cf25520..854b74d 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs @@ -28,7 +28,7 @@ public bool ShowRootNode } } - protected ITreeModel InternalModel + public ITreeModel Model { get { return model; } set @@ -144,6 +144,8 @@ protected virtual int RefreshNodes(TreePath node, int nextNodeIndexInPool, bo return nextNodeIndexInPool; } + + protected virtual bool IsPathVisible(TreePath path) { return true; From d4bb57728f94ebf8209457ebfdc66dca4f82d609 Mon Sep 17 00:00:00 2001 From: Thomas Morgner Date: Thu, 18 Apr 2019 16:35:21 +0100 Subject: [PATCH 18/24] Source code fully documented --- .../Scenes/TutorialAssembly.unity | 165 +++++++++++++++++- .../Events/NextEventAggregationActivator.cs | 17 +- .../Scripts/Events/NextEventSelector.cs | 16 +- .../Scripts/Events/NextEventSelectorBase.cs | 119 +++++++++++-- .../Scripts/Events/PublishStreamEvent.cs | 7 + .../Scripts/Events/StaticStreamEventSource.cs | 5 + .../Scripts/Helpers/DictionaryUtility.cs | 32 ++++ .../Scripts/Helpers/DictionaryUtility.cs.meta | 3 + .../Scripts/Helpers/MouseEventPublisher.cs | 13 ++ .../Scripts/Helpers/SharedMethods.cs | 23 +-- .../Scripts/Helpers/UnityObjectWrapper.cs | 26 ++- .../Scripts/Tutorial/TutorialEventMessage.cs | 5 + .../Scripts/Tutorial/TutorialEventStream.cs | 11 ++ .../Tutorial/TutorialEventTreeBinding.cs | 5 + .../Tutorial/TutorialEventTreeItemRenderer.cs | 18 +- .../Scripts/Tutorial/TutorialEventTreeView.cs | 20 +++ .../Scripts/UI/EventStreamTreeModelBuilder.cs | 136 +++++++++++++-- .../Scripts/UI/EventStreamTreeModelData.cs | 109 ++++++++++-- .../Scripts/UI/SaneHBoxLayout.cs | 7 +- .../Scripts/UI/Trees/ITreeModel.cs | 94 +++++++++- .../Scripts/UI/Trees/ListTreeModel.cs | 36 ++-- .../Scripts/UI/Trees/TreeModel.cs | 84 ++++++++- .../Scripts/UI/Trees/TreeModelEventArgs.cs | 51 +++++- .../Scripts/UI/Trees/TreePath.cs | 105 +++++++++-- .../Scripts/UI/Trees/TreeView.cs | 85 ++++++++- Packages/manifest.json | 2 +- ProjectSettings/ProjectVersion.txt | 2 +- UnityTutorialSystem.csproj.DotSettings | 1 + UnityTutorialSystem.sln.DotSettings | 9 + 29 files changed, 1080 insertions(+), 126 deletions(-) create mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/DictionaryUtility.cs create mode 100644 Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/DictionaryUtility.cs.meta create mode 100644 UnityTutorialSystem.sln.DotSettings diff --git a/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity b/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity index b3418b3..81c241a 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity +++ b/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity @@ -1201,7 +1201,7 @@ MonoBehaviour: m_HandleRect: {fileID: 364011010} m_Direction: 2 m_Value: 0 - m_Size: 0.99999994 + m_Size: 1 m_NumberOfSteps: 0 m_OnValueChanged: m_PersistentCalls: @@ -1967,6 +1967,7 @@ RectTransform: m_LocalScale: {x: 0, y: 0, z: 0} m_Children: - {fileID: 375966259} + - {fileID: 1771506620} m_Father: {fileID: 0} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -2886,7 +2887,7 @@ PrefabInstance: - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} propertyPath: m_AnchoredPosition.y - value: 0.000031684416 + value: 0.000030517578 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} @@ -4065,6 +4066,166 @@ MonoBehaviour: stateChain: {fileID: 1771014851} successMessage: {fileID: 114969602861105628, guid: c01cc92f4088c6e4abcd3830c0002c24, type: 2} +--- !u!1 &1771506619 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1771506620} + - component: {fileID: 1771506622} + - component: {fileID: 1771506621} + m_Layer: 5 + m_Name: TextMeshPro Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1771506620 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1771506619} + 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_Children: [] + m_Father: {fileID: 787784673} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -289, y: 155} + m_SizeDelta: {x: 400, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1771506621 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1771506619} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_text: "Click on the indicated elements to play. \nUse WASD to move around if needed." + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 + m_fontSize: 20 + m_fontSizeBase: 20 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_textAlignment: 257 + m_isAlignmentEnumConverted: 1 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_firstOverflowCharacterIndex: -1 + m_linkedTextComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_firstVisibleCharacter: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 1771506621} + characterCount: 76 + spriteCount: 0 + spaceCount: 14 + wordCount: 14 + linkCount: 0 + lineCount: 2 + pageCount: 1 + materialCount: 1 + m_havePropertiesChanged: 0 + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} + m_isInputParsingRequired: 0 + m_inputSource: 0 + m_hasFontAssetChanged: 0 + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1771506622 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1771506619} + m_CullTransparentMesh: 0 --- !u!1 &1816184697 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventAggregationActivator.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventAggregationActivator.cs index bd08d32..430c702 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventAggregationActivator.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventAggregationActivator.cs @@ -1,15 +1,26 @@ -using UnityTutorialSystem.Aggregators; +using UnityEngine; +using UnityTutorialSystem.Aggregators; namespace UnityTutorialSystem.Events { + /// + /// An low-maintenance event aggregation activator for activating dependent + /// EventMessageAggregator instances. Add this to a child-level aggregator + /// that is paired with a , usually a + /// . This will selectively enable the + /// aggregator while the parent stream expects the aggregator's result event message + /// as one of its next messages. + /// + [RequireComponent(typeof(StreamEventSource))] + [RequireComponent(typeof(EventMessageAggregator))] public class NextEventAggregationActivator : NextEventSelectorBase { EventMessageAggregator target; StreamEventSource nextMessageSource; - public override bool AutoPopulate => true; + protected override bool AutoPopulate => true; - public override StreamEventSource NextMessageSource => nextMessageSource; + protected override StreamEventSource NextMessageSource => nextMessageSource; void Awake() { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelector.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelector.cs index ec62e86..daec1a2 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelector.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelector.cs @@ -1,8 +1,20 @@ using UnityEngine; using UnityEngine.Events; +using UnityTutorialSystem.Aggregators; namespace UnityTutorialSystem.Events { + /// + /// + /// A general purpose next-event selector. Use this to fire events when the event produced + /// by the given StreamEventSource is one of the next + /// expected messages of the collaborating s. + /// + /// + /// One usual use for this class is to activate and deactivate visual indicators that guide + /// the player to the location of the next task that should be done. + /// + /// public class NextEventSelector : NextEventSelectorBase { [SerializeField] StreamEventSource nextMessageSource; @@ -11,9 +23,9 @@ public class NextEventSelector : NextEventSelectorBase [SerializeField] UnityEvent disableForNextMessage; - public override StreamEventSource NextMessageSource => nextMessageSource; + protected override StreamEventSource NextMessageSource => nextMessageSource; - public override bool AutoPopulate => autoPopulate; + protected override bool AutoPopulate => autoPopulate; public UnityEvent EnableForNextMessage => enableForNextMessage; diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelectorBase.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelectorBase.cs index 2f4b4da..8b67e4c 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelectorBase.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/NextEventSelectorBase.cs @@ -5,14 +5,26 @@ namespace UnityTutorialSystem.Events { + /// + /// + /// A base class for components that react to 'next event' changes. + /// Due to the structured nature of the s + /// we can ask them to tell when a given message would be expected next. + /// + /// + /// This class handles all common initialization and maintenance of the + /// event listeners. + /// + /// public abstract class NextEventSelectorBase : MonoBehaviour { - protected readonly HashSet effectiveSources; + readonly HashSet effectiveSources; [SerializeField] List sources; [SerializeField] bool detailedDebugging; List messageBuffer; bool started; + /// protected NextEventSelectorBase() { effectiveSources = new HashSet(); @@ -20,10 +32,31 @@ protected NextEventSelectorBase() sources = new List(); } - public abstract StreamEventSource NextMessageSource { get; } - - public abstract bool AutoPopulate { get; } - + /// + /// Returns the (modifiable) set of effective message aggregator sources. + /// Normally you should not need to modify the collection, but if you do + /// while this behaviour is already enabled, make sure you call + /// to ensure that this behaviour gets notified of state changes. + /// + protected ICollection EffectiveSources => effectiveSources; + + /// + /// Returns the event producer that defines the 'next message' this selector is looking for. This + /// is usually the event source that would fire that message if certain success conditions are met. + /// + protected abstract StreamEventSource NextMessageSource { get; } + + /// + /// Defines whether this source will auto-populate the event message aggregator objects from instances + /// defined in the scene. If set to false, it will only look at the sources defined in the injected + /// collection. + /// + protected abstract bool AutoPopulate { get; } + + /// + /// An internal method called during the initialization that collects the + /// instances referenced in the sources list and scene (if auto-populate is enabled). + /// protected virtual void PopulateSources() { foreach (var s in sources) @@ -37,8 +70,6 @@ protected virtual void PopulateSources() if (AutoPopulate) { DebugLog("Start auto-populating " + name); - - var buffer = new List(); var aggregator = SharedMethods.FindEvenInactiveComponents(true); if (aggregator.Length == 0) { @@ -52,7 +83,7 @@ protected virtual void PopulateSources() continue; } - if (IsValidMessageSource(s, buffer)) + if (IsValidMessageSource(s)) { effectiveSources.Add(s); } @@ -70,7 +101,14 @@ void DebugLog(string message) } } - protected virtual bool IsValidMessageSource(EventMessageAggregator s, List buffer) + /// + /// Validates that the given message aggregator is able to generate the + /// produced by the NextMessageSource. If an aggregator cannot generate that message, there is no point + /// in actually subscribing for update events. + /// + /// the potential message source + /// true if the source can generate the NextMessage, false otherwise + protected virtual bool IsValidMessageSource(EventMessageAggregator source) { if (NextMessageSource == null) { @@ -78,8 +116,8 @@ protected virtual bool IsValidMessageSource(EventMessageAggregator s, List + /// Tests whether this message should be ignored. This default implementation simply checks the + /// property of the + /// . + /// + /// The message. + /// true if the message should be ignored, false otherwise. protected virtual bool FilterMessage(BasicEventStreamMessage msg) { var stream = msg.Stream; @@ -122,10 +167,18 @@ void Start() OnMatchRestart(); } + /// + /// An override point that is called when the next-message is expected next. Use this to enable + /// your dependent behaviours. + /// protected virtual void OnEnableForNextMessage() { } + /// + /// An override point that is called when the next-message is expected next. Use this to disable + /// your dependent behaviours. + /// protected virtual void OnDisableForNextMessage() { } @@ -143,6 +196,8 @@ void OnMatchProgress(EventMessageAggregator source, BasicEventStreamMessage mess return; } + // Find a message source that can generate this message. + // If none is found, then this is not one of the handled messages. messageBuffer = source.ListEvents(messageBuffer); var isMatch = false; foreach (var m in messageBuffer) @@ -166,6 +221,10 @@ void OnMatchProgress(EventMessageAggregator source, BasicEventStreamMessage mess } } + /// + /// Unity callback when the behaviour is enabled. If you override this, make sure + /// you call this base method. + /// protected virtual void OnEnable() { if (!started) @@ -175,22 +234,46 @@ protected virtual void OnEnable() foreach (var s in effectiveSources) { - s.MatchProgress.AddListener(OnMatchProgress); - s.MatchStarting.AddListener(OnMatchRestart); - s.MatchComplete.AddListener(OnMatchRestart); + SubscribeTo(s); } } + /// + /// Unity callback when the behaviour is disabled. If you override this, make sure + /// you call this base method. + /// protected virtual void OnDisable() { foreach (var s in effectiveSources) { - s.MatchProgress.RemoveListener(OnMatchProgress); - s.MatchStarting.RemoveListener(OnMatchRestart); - s.MatchComplete.RemoveListener(OnMatchRestart); + UnsubscribeFrom(s); } } + /// + /// Subscribes to all relevant events on the given . + /// Use this if your own instances in a override. + /// + /// The message aggregator to subscribe to + protected void SubscribeTo(EventMessageAggregator s) + { + s.MatchProgress.AddListener(OnMatchProgress); + s.MatchStarting.AddListener(OnMatchRestart); + s.MatchComplete.AddListener(OnMatchRestart); + } + + /// + /// Unsubscribes from all relevant events on the given . + /// Use this if your own instances in a override. + /// + /// The message aggregator to subscribe to + protected void UnsubscribeFrom(EventMessageAggregator s) + { + s.MatchProgress.RemoveListener(OnMatchProgress); + s.MatchStarting.RemoveListener(OnMatchRestart); + s.MatchComplete.RemoveListener(OnMatchRestart); + } + void OnMatchRestart() { var isMatch = false; diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/PublishStreamEvent.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/PublishStreamEvent.cs index 98e880c..fcc1bfa 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/PublishStreamEvent.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/PublishStreamEvent.cs @@ -20,11 +20,18 @@ public class PublishStreamEvent : StreamEventSource { [SerializeField] BasicEventStreamMessage message; + /// public override bool WillGenerateMessage(BasicEventStreamMessage msg) { return Equals(message, msg); } + /// + /// Fires the associated message to it's stream. This method is indented to be + /// called as part of some form of event handling in your target objects. + /// Trigger it when the success conditions for the task represented by the + /// given message is met. + /// [UsedImplicitly] public void TriggerEvent() { diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StaticStreamEventSource.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StaticStreamEventSource.cs index 1bf9a1b..e901e60 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StaticStreamEventSource.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Events/StaticStreamEventSource.cs @@ -3,6 +3,11 @@ namespace UnityTutorialSystem.Events { + /// + /// A stream event source that checks against a set of messages. Use this + /// if you need to indicate state or trigger common behaviour for more than one + /// message source. + /// public class StaticStreamEventSource : StreamEventSource { [SerializeField] List messages; diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/DictionaryUtility.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/DictionaryUtility.cs new file mode 100644 index 0000000..76c182e --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/DictionaryUtility.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; + +namespace UnityTutorialSystem.Helpers +{ + /// + /// Dictionary helper methods. + /// + public static class DictionaryUtility + { + /// + /// Implements the missing AddRange method found in other collection classes. + /// This implementation preserves the actual type of the dictionary implementation + /// so that we dont end up with boxed or up-casted instances. + /// + /// + /// + /// + /// + /// + /// + public static TDictionary AddRange(this TDictionary target, ICollection> source) + where TDictionary: IDictionary + { + foreach (var s in source) + { + target.Add(s.Key, s.Value); + } + + return target; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/DictionaryUtility.cs.meta b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/DictionaryUtility.cs.meta new file mode 100644 index 0000000..f4ac21a --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/DictionaryUtility.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 53b979b9c1384ca3aa02da3ac040d6d1 +timeCreated: 1555351610 \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/MouseEventPublisher.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/MouseEventPublisher.cs index b6f749b..372fd17 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/MouseEventPublisher.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/MouseEventPublisher.cs @@ -3,10 +3,23 @@ namespace UnityTutorialSystem.Helpers { + /// + /// A basic helper object that republishes incoming Unity event messages as + /// proper s. + /// public class MouseEventPublisher : MonoBehaviour { + /// + /// Republishes framework events received from clicks. + /// public UnityEvent Clicked; + /// + /// Republishes framework events received from MouseEntered events. + /// public UnityEvent MouseEntered; + /// + /// Republishes framework events received from MouseExited events. + /// public UnityEvent MouseExited; void OnMouseUp() diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/SharedMethods.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/SharedMethods.cs index 44251b4..f16df51 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/SharedMethods.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/SharedMethods.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using System.Linq; -using System.Text; using UnityEngine; using UnityEngine.SceneManagement; @@ -93,25 +92,5 @@ static IEnumerable FindEvenInactiveComponentsInScene(Scene scene, bool sto return results; } - - - public static string Path(this GameObject go) - { - var b = new StringBuilder(); - BuildPath(go, b); - return b.ToString(); - } - - static void BuildPath(GameObject go, StringBuilder b) - { - if (go.transform.parent != null) - { - var pgo = go.transform.parent.gameObject; - BuildPath(pgo, b); - b.Append("/"); - } - - b.Append(go.name); - } } -} \ No newline at end of file +} diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/UnityObjectWrapper.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/UnityObjectWrapper.cs index 383f89c..871ef0a 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/UnityObjectWrapper.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Helpers/UnityObjectWrapper.cs @@ -3,6 +3,13 @@ namespace UnityTutorialSystem.Helpers { + /// + /// An object wrapper for UnityObjects that compares objects based on + /// instance-id instead of low level Equals calls. The + /// implementation calls into the native code for no sane reason, which + /// can be performance critical. + /// + /// public struct UnityObjectWrapper where T: UnityEngine.Object { [NotNull] public readonly UnityEngine.Object Value; @@ -34,9 +41,24 @@ public override bool Equals(object obj) public override int GetHashCode() { - return (Value != null ? Value.GetHashCode() : 0); + return Value.GetHashCode(); } - + + /// + /// Implicitly wraps the given UnityObject into an ObjectWrapper. + /// + /// the object to wrap + /// The UnityObjectWrapper for the given Unity-Object. + public static implicit operator UnityObjectWrapper(T w) + { + return new UnityObjectWrapper(w); + } + + /// + /// Implicitly unwraps the wrapper into the contained Unity object. + /// + /// An object wrapper containing a non-null Unity object + /// the unwrapped object public static implicit operator UnityEngine.Object (UnityObjectWrapper w) { return w.Value; diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventMessage.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventMessage.cs index 66375cb..64d3e69 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventMessage.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventMessage.cs @@ -1,9 +1,14 @@ using NaughtyAttributes; using UnityEngine; +using UnityTutorialSystem.Aggregators; using UnityTutorialSystem.Events; namespace UnityTutorialSystem.Tutorial { + /// + /// An extended stream message type that contains separate texts for each + /// state the message can assume in an . + /// public class TutorialEventMessage : BasicEventStreamMessage { [SerializeField] [ResizableTextArea] string taskOpenMessage; diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStream.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStream.cs index 5d43443..596f00b 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStream.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventStream.cs @@ -3,6 +3,10 @@ namespace UnityTutorialSystem.Tutorial { + /// + /// An event stream type that contains instances + /// instead of plain instances. + /// [CreateAssetMenu(menuName = "Event Stream/Tutorial Event Stream")] public class TutorialEventStream : BasicEventStream { @@ -11,6 +15,13 @@ protected override BasicEventStreamMessage CreateNode() return CreateInstance(); } + /// + /// Validates that the message given is valid for this stream. + /// A message is valid if it is both an TutorialEventMessage + /// instance and a registered child of the stream. + /// + /// message to test + /// true, if the message is owned by this stream, false otherwise. public override bool IsValidMessage(BasicEventStreamMessage msg) { return base.IsValidMessage(msg) && msg is TutorialEventMessage; diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeBinding.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeBinding.cs index 9cf96f0..6718db7 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeBinding.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeBinding.cs @@ -3,6 +3,11 @@ namespace UnityTutorialSystem.Tutorial { + /// + /// A basic binding component to decouple presentation (TreeView) from + /// data source (EventStreamTreeModelBuilder). This class simply connects the + /// model created by the EventStreamTreeModelBuilder to the TreeView. + /// public class TutorialEventTreeBinding : MonoBehaviour { [SerializeField] EventStreamTreeModelBuilder modelSource; diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs index 2d51ea6..2d3ae5e 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeItemRenderer.cs @@ -5,10 +5,26 @@ using UnityTutorialSystem.Events; using UnityTutorialSystem.UI; using UnityTutorialSystem.UI.Trees; -using VRKitchenSimulator.UI; namespace UnityTutorialSystem.Tutorial { + /// + /// + /// A TreeItemRenderer for TutorialEventMessage instances. This behaviour must + /// be added on the root object of the tree-item prefab or template object. + /// This class receives a TutorialEventMessage from the TreeView and configures + /// the assigned TextMeshProUGUI instance based on the formatting parameters + /// set in the inspector. + /// + /// + /// This class is lenient in which BasicEventStream messages it consumes + /// (basically to work around Unity's built-in limitations centred around generics + /// and instantiating generic serialized objects in a scene). If the + /// message given is a TutorialEventMessage, this renderer will use the extended + /// texts provided by the message, otherwise it will fall back to use the message + /// object's name as text. + /// + /// public class TutorialEventTreeItemRenderer : TreeItemRenderer { [SerializeField] Color whenNextEventColor; diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs index a0f1892..c4907ac 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/Tutorial/TutorialEventTreeView.cs @@ -4,13 +4,33 @@ namespace UnityTutorialSystem.Tutorial { + /// + /// A TreeView for EventStreamTreeModelData as produced by the + /// EventStreamTreeModelBuilder. This class only works well if it + /// is used in conjunction with a LayoutElement that can auto-arrange + /// the child nodes generated by the view. + /// + /// public class TutorialEventTreeView : TreeView { [SerializeField] TutorialEventTreeItemRenderer template; [SerializeField] bool showAllNodes; [SerializeField] bool hideCompletedSubTrees; + + + /// protected override TreeItemRenderer ItemRenderer => template; + /// + /// Controls the visibility of nodes. This method is depends on the showAllNodes and + /// hideCompletedSubTrees injected variables. + /// If hideCompletedSubTrees is true, it will collapse branches where all nodes have + /// been completed. If this test would make the node visible, a second test based on + /// showAllNodes will selectively only show nodes that are either completed or expected + /// next. + /// + /// The tree path to check + /// true to show the corresponding node, false otherwise. protected override bool IsPathVisible(TreePath path) { if (hideCompletedSubTrees) diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamTreeModelBuilder.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamTreeModelBuilder.cs index 52e68d9..b7b8a79 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamTreeModelBuilder.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamTreeModelBuilder.cs @@ -4,10 +4,38 @@ using UnityEngine; using UnityTutorialSystem.Aggregators; using UnityTutorialSystem.Events; +using UnityTutorialSystem.Helpers; using UnityTutorialSystem.UI.Trees; namespace UnityTutorialSystem.UI { + /// + /// A tree model builder that creates a tree of + /// objects based on the + /// instances given. + /// Each is assumed + /// to be associated with a single + /// . + /// + /// + /// + /// This class attempts to detect hierarchical relationships between + /// the + /// given by + /// trying to match the success message of each + /// with a + /// produced message of any of the associated + /// instances. + /// + /// + /// This TreeModelBuilder manages a single tree model that can be + /// shared between multiple tree view instances. The model will be + /// kept up to date for as long as the associated + /// instances are valid. The + /// class will delay all work until + /// has been called. + /// + /// public class EventStreamTreeModelBuilder : MonoBehaviour { readonly List buffer; @@ -20,14 +48,24 @@ public class EventStreamTreeModelBuilder : MonoBehaviour EventStreamTreeModelData rootNode; bool started; + /// + /// Default constructor. + /// public EventStreamTreeModelBuilder() { buffer = new List(); model = new ListTreeModel(); } + /// + /// The model produced by this builder. + /// public ITreeModel Model => model; + /// + /// Diagnostic method that conditionally logs messages to the debug log. + /// + /// void DebugLog(string message) { #if DEBUG @@ -40,12 +78,11 @@ void DebugLog(string message) void Start() { - nodeMapper = new Dictionary(); started = true; var data = CollectTreeData(); PrintTree(data); - rootNode = CreateTreeNodes(data, nodeMapper); + (rootNode, nodeMapper) = CreateTreeNodes(data); DebugLog("Generated tree:\n" + rootNode.AsTextTree()); model.Root = rootNode; @@ -61,6 +98,14 @@ void OnEnable() { d.StateChanged.AddListener(OnTrackerStateChanged); } + + if (started) + { + foreach (var d in tutorialStateTrackers) + { + OnTrackerStateChanged(d); + } + } } void OnDisable() @@ -71,6 +116,12 @@ void OnDisable() } } + /// + /// Called when the state of the associated EventMessageAggregator has changed. This + /// updates the + /// + /// + /// void OnTrackerStateChanged(EventMessageAggregatorStatePublisher source, BasicEventStreamMessage message = null) { if (!started) @@ -78,9 +129,13 @@ void OnTrackerStateChanged(EventMessageAggregatorStatePublisher source, BasicEve return; } + // Attempt to find the parent EventMessageAggregator that handles the + // success message of that source. The messages tracked by the source + // are represented by child nodes within that parent. EventStreamTreeModelData data; if (!nodeMapper.TryGetValue(source, out data)) { + // only the root itself can be without parent. data = rootNode; } @@ -101,9 +156,9 @@ void OnTrackerStateChanged(EventMessageAggregatorStatePublisher source, BasicEve } } - // Special case handling: child-nodes of root won't ever receive complete events as - // there is no aggregator listening for the completed notification. - + // Special case handling: child-nodes of root won't ever receive completion events as + // there is no aggregator listening for the completed notification. Therefore we + // have to manually poll that state. foreach (var rootChild in rootNode) { if (rootChild == data) @@ -112,9 +167,26 @@ void OnTrackerStateChanged(EventMessageAggregatorStatePublisher source, BasicEve } } + // Nuke the treeview. Right now that is cheaper to write than proper + // targeted event handling. model.FireStructureChanged(); } + /// + /// Creates an list of expected states for the tree. This method blindly + /// gathers all events produced by each + /// and - in a second step - + /// attempts to build a hierarchy by checking the success message of the + /// EventMessageAggratorStatePublisher with all collected messages. + /// + /// + /// This method has O(N^2) complexity, but hopefully you won't ever have + /// so many activities that this actually matters. + /// + /// + /// The list of aggregator message states that have no parent. All other + /// states can be reached from there. + /// List CollectTreeData() { var data = new List(); @@ -143,21 +215,36 @@ List CollectTreeData() return data.Where(d => !d.IsDependency).ToList(); } - EventStreamTreeModelData CreateTreeNodes(List data, - Dictionary nodeMapper) + /// + /// Creates an artificial root node not backed by any success message. Any actual event aggregators + /// that would act as root nodes (because they have no success message on their own) will be flattened + /// into this root node. + /// + /// The list of potential root nodes + /// The created tree node and a mapping of the created node and all its child nodes and their respective sources. + static (EventStreamTreeModelData, Dictionary) CreateTreeNodes(List data) { var roots = data.Where(s => !s.IsDependency).ToList(); + var nodes = new Dictionary(); var childStates = new List(); foreach (var s in roots) { - var item = AddTree(s, nodeMapper); + var (item, subNodes) = AddTree(s); + nodes.AddRange(subNodes); item.ExpectedNext = false; AddGeneratedChildItems(childStates, item); } - return new EventStreamTreeModelData(null, false, true, childStates); + var treeModelData = new EventStreamTreeModelData(null, false, true, childStates); + return (treeModelData, nodes); } + /// + /// Adds all nodes represented by the EventStreamTreeModelData given as item to the list of child states. + /// This method flattens all event message aggregators that generate no success message. + /// + /// The collected child nodes + /// The item to process static void AddGeneratedChildItems(List childStates, EventStreamTreeModelData item) { if (item.SourceMessage != null) @@ -173,31 +260,45 @@ static void AddGeneratedChildItems(List childStates, E } } - static EventStreamTreeModelData AddTree(ExpectedStates state, - Dictionary nodeMapper) + /// + /// Generates a sub-tree for the given ExpectedStates instance that + /// replicates the structure of all known dependencies for that state. + /// + /// The state that is processed. + /// + /// The created tree node and a mapping of the created node and all its + /// child nodes and their respective sources. + /// + static (EventStreamTreeModelData, Dictionary) AddTree(ExpectedStates state) { var childStates = new List(); + var nodeMapper = new Dictionary(); foreach (var s in state.RequiredMessages) { ExpectedStates dependency; if (state.IsProvidedByDependency(s.Message, out dependency)) { - var item = AddTree(dependency, nodeMapper); + var (item, subNodes) = AddTree(dependency); + nodeMapper.AddRange(subNodes); item.ExpectedNext = s.ExpectedNext; childStates.Add(item); } else { - var message = (s.Message); + var message = s.Message; childStates.Add(new EventStreamTreeModelData(message, s.Completed, s.ExpectedNext)); } } var stateData = new EventStreamTreeModelData(state.SuccessMessage, state.Completed, false, childStates); nodeMapper[state.MessageSource] = stateData; - return stateData; + return (stateData, nodeMapper); } + /// + /// A debug helper function that prints the resulting tree into the log. + /// + /// void PrintTree(List states) { if (!debug) @@ -223,6 +324,9 @@ void PrintTree(ExpectedStates state, int indent) } } + /// + /// An internal helper data structure used during the initial tree construction during the Start event. + /// class ExpectedStates { public readonly List RequiredMessages; @@ -292,7 +396,7 @@ public bool IsProvidedByDependency(BasicEventStreamMessage msg, out ExpectedStat } } - dependency = default(ExpectedStates); + dependency = default; return false; } @@ -310,4 +414,4 @@ public bool ExpectsMessage(BasicEventStreamMessage msg) } } } -} \ No newline at end of file +} diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamTreeModelData.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamTreeModelData.cs index 104508e..dde228c 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamTreeModelData.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/EventStreamTreeModelData.cs @@ -3,19 +3,41 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using JetBrains.Annotations; using UnityTutorialSystem.Events; namespace UnityTutorialSystem.UI { + /// + /// A TreeModel data node that represents a + /// and all messages that contribute + /// to state changes of that message. + /// public class EventStreamTreeModelData : IReadOnlyList, - IEquatable + IEquatable { readonly List subTasks; + /// + /// Creates a new EventStreamTreeModelData representing the given source + /// message and all its contributing sub messages. + /// + /// + /// The source message represented by this tree node. + /// + /// + /// A flag indicating whether the message has been seen. + /// + /// + /// A flag indicating whether this message will be seen soon. + /// + /// + /// The messages contributing to the state of the source message. + /// public EventStreamTreeModelData(BasicEventStreamMessage sourceMessage, - bool completed, - bool expectedNext, - IReadOnlyList data) + bool completed, + bool expectedNext, + IReadOnlyList data) { SourceMessage = sourceMessage; Completed = completed; @@ -23,19 +45,52 @@ public EventStreamTreeModelData(BasicEventStreamMessage sourceMessage, subTasks = new List(data); } + /// + /// A lazy constructor implementation to automatically wrap single + /// argument calls of the collection into a + /// . + /// + /// + /// The source message represented by this tree node. + /// + /// + /// A flag indicating whether the message has been seen. + /// + /// + /// A flag indicating whether this message will be seen soon. + /// + /// + /// The messages contributing to the state of the source message. + /// public EventStreamTreeModelData(BasicEventStreamMessage sourceMessage, - bool completed, - bool expectedNext, - params EventStreamTreeModelData[] data) : - this(sourceMessage, completed, expectedNext, (IReadOnlyList)data) + bool completed, + bool expectedNext, + params EventStreamTreeModelData[] data) : + this(sourceMessage, completed, expectedNext, (IReadOnlyList) data) { } + /// + /// The source message represented by this node. + /// public BasicEventStreamMessage SourceMessage { get; } + /// + /// A flag indicating that the message has been received by the EventMessageAggregator. + /// public bool Completed { get; set; } + + /// + /// A flag indicating that the system expects this message to be fired next. + /// public bool ExpectedNext { get; set; } + /// + /// Compares this tree node for structural equality. Required by the ListTreeModel implementation + /// and its GetIndexOf method. + /// + /// the other node to compare + /// true if both nodes represent the same message and submessage set. public bool Equals(EventStreamTreeModelData other) { if (ReferenceEquals(null, other)) @@ -61,7 +116,17 @@ public bool Equals(EventStreamTreeModelData other) return subTasks.SequenceEqual(other.subTasks); } + /// + /// Indexer access, part of the IList interface. + /// + /// the index. + /// the element at the index given + /// If the index is invalid. public EventStreamTreeModelData this[int idx] => subTasks[idx]; + + /// + /// Return the number of sub-elements in this node. + /// public int Count => subTasks.Count; IEnumerator IEnumerable.GetEnumerator() @@ -74,11 +139,16 @@ IEnumerator IEnumerable.GetEnumerator() return GetEnumerator(); } + /// + /// Returns an non-allocating memory efficient list enumerator. + /// + /// An efficient enumerator. public List.Enumerator GetEnumerator() { return subTasks.GetEnumerator(); } + /// public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) @@ -96,9 +166,10 @@ public override bool Equals(object obj) return false; } - return Equals((EventStreamTreeModelData)obj); + return Equals((EventStreamTreeModelData) obj); } + /// public override int GetHashCode() { unchecked @@ -115,6 +186,8 @@ public override int GetHashCode() } } + /// + [NotNull] public override string ToString() { if (SourceMessage == null) @@ -125,16 +198,32 @@ public override string ToString() return $"({nameof(SourceMessage)}: {SourceMessage.name}, {nameof(Completed)}: {Completed})"; } + /// + /// A standard equality operator implementation. + /// + /// + /// + /// true if both objects are structurally equal, false otherwise. public static bool operator ==(EventStreamTreeModelData left, EventStreamTreeModelData right) { return Equals(left, right); } + /// + /// A standard inequality operator implementation. + /// + /// + /// + /// true if both objects are structurally non-equal, false otherwise. public static bool operator !=(EventStreamTreeModelData left, EventStreamTreeModelData right) { return !Equals(left, right); } + /// + /// Prints the tree as indented string, one element per line. Useful for debugging. + /// + /// public string AsTextTree() { var b = new StringBuilder(); @@ -153,4 +242,4 @@ static void AsTreeText(StringBuilder b, EventStreamTreeModelData data, int inden } } } -} \ No newline at end of file +} diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/SaneHBoxLayout.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/SaneHBoxLayout.cs index 09e74a8..5eb3dfc 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/SaneHBoxLayout.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/SaneHBoxLayout.cs @@ -1,18 +1,20 @@ using UnityEngine; using UnityEngine.UI; -namespace VRKitchenSimulator.UI +namespace UnityTutorialSystem.UI { /// /// Unity's built in layout components behave rather erratically when asked to deal with /// flexible layouts. Instead of trying to fix what is not fixable, lets quickly implement /// a simple and working layout manager. /// + /// public class SaneHBoxLayout : LayoutGroup { const int AXIS_HORIZONTAL = 0; const int AXIS_VERTICAL = 1; + /// public override void CalculateLayoutInputHorizontal() { // Mandatory.. @@ -30,6 +32,7 @@ public override void CalculateLayoutInputHorizontal() SetLayoutInputForAxis(minSize, prefSize, flexSize, AXIS_HORIZONTAL); } + /// public override void CalculateLayoutInputVertical() { var paddingVertical = (float) padding.vertical; @@ -46,6 +49,7 @@ public override void CalculateLayoutInputVertical() SetLayoutInputForAxis(minSize + paddingVertical, prefSize + paddingVertical, flexSize + paddingVertical, AXIS_VERTICAL); } + /// public override void SetLayoutHorizontal() { var prefSize = 0f; @@ -62,6 +66,7 @@ public override void SetLayoutHorizontal() } } + /// public override void SetLayoutVertical() { foreach (var c in rectChildren) diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeModel.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeModel.cs index dd8fbc4..2b91456 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeModel.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ITreeModel.cs @@ -2,18 +2,110 @@ namespace UnityTutorialSystem.UI.Trees { + /// + /// A Tree model . This model abstracts away the + /// underlying data structure by forming a facade with all required + /// operations over the data nodes. This is + /// roughly modelled after the excellent design found in Java Swing. + /// + /// The underlying node data type public interface ITreeModel { + /// + /// Checks whether the model has a tree node. + /// bool HasRoot { get; } + + /// + /// If the model has a root tree node, return it. + /// + /// TNode Root { get; } + + /// + /// + /// Tests whether the given is a leaf node. A + /// leaf is any that + /// cannot possibly have children. For example, a file is a leaf + /// in a file system tree, but an empty + /// directory is not. Even though an empty directory currently has no + /// child nodes, there are circumstances that directory can have child + /// nodes in the future. + /// + /// + /// Implementation note: This test is currently only used for + /// presentation purposes. + /// + /// + /// The node to test + /// + /// if the cannot have + /// children, otherwise. + /// bool IsLeaf(TNode node); + + /// + /// Return the child node at the given index. + /// + /// the parent node + /// the index of the child node in the parent node + /// The node at the given index, never null. + /// if the node given does not have a child at that position. + /// + /// TNode GetChildAt(TNode parent, int index); + + /// + /// Returns the number of child nodes this + /// node contains. + /// + /// The parent node + /// + /// a positive integer + /// int ChildCount(TNode parent); + + /// + /// Returns the index of the given node in the + /// node or -1 if this potential + /// node is not a of + /// the parent. + /// + /// The parent node + /// The child node + /// + /// the positive index of the node in the + /// parent, or -1 if the node given as is not a + /// of that parent. + /// + /// + /// int GetIndexOfChild(TNode parent, TNode child); + /// + /// Informs all listeners that the structure of the tree at the given tree path has + /// changed. A structural change indicates that nodes have been added or removed from + /// the tree. If an empty tree path is given it indicates that the root node itself has changed. + /// event EventHandler> StructureChanged; + + /// + /// Informs all listeners that the data inside a tree node has changed. Firing this event + /// does not indicate that nodes have been added or removed, it merely means that one or + /// more properties of the TNode object representing the node have changed in some way. + /// event EventHandler> NodesChanged; + + /// + /// A specialised structural change event that indicates that new nodes have been added + /// at the given location. + /// event EventHandler> NodesInserted; + + /// + /// A specialised structural change event that indicates that old nodes have been removed + /// at the given location. + /// event EventHandler> NodesRemoved; } -} \ No newline at end of file +} diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ListTreeModel.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ListTreeModel.cs index 9510653..ed122b8 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ListTreeModel.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/ListTreeModel.cs @@ -2,47 +2,51 @@ namespace UnityTutorialSystem.UI.Trees { + /// + /// A standard implementation of a tree model for list based tree nodes that maps tree + /// operations to their corresponding list operations on the nodes themselves. + /// + /// A list based data type is required for this class. public class ListTreeModel : TreeModel where TList : class, IReadOnlyList { + /// + /// Creates an empty tree model. + /// public ListTreeModel() { } + /// + /// Initializes the tree model with the given root node. + /// + /// public ListTreeModel(TList root) { Root = root; } - public override bool HasRoot => Root != null; - public override TList Root { get; set; } + /// + public sealed override bool HasRoot => Root != null; + /// + public sealed override TList Root { get; set; } + + /// public override bool IsLeaf(TList node) { return node.Count == 0; } + /// public override TList GetChildAt(TList parent, int index) { return parent[index]; } + /// public override int ChildCount(TList parent) { return parent.Count; } - - public override int GetIndexOfChild(TList parent, TList child) - { - for (var i = 0; i < parent.Count; i++) - { - var c = parent[i]; - if (c == child) - { - return i; - } - } - - return -1; - } } } \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModel.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModel.cs index 4acc000..50eb806 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModel.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModel.cs @@ -1,41 +1,102 @@ using System; +using System.Collections.Generic; namespace UnityTutorialSystem.UI.Trees { + /// + /// An abstract base class for tree model implementations. This class + /// provides default implementations for all events. + /// + /// public abstract class TreeModel : ITreeModel { + /// public abstract bool HasRoot { get; } + /// public abstract TNode Root { get; set; } + /// public abstract bool IsLeaf(TNode node); + /// public abstract TNode GetChildAt(TNode parent, int index); + /// public abstract int ChildCount(TNode parent); - public abstract int GetIndexOfChild(TNode parent, TNode child); + /// + public virtual int GetIndexOfChild(TNode parent, TNode child) + { + if (IsLeaf(parent)) + { + return -1; + } + + var cmp = Comparer.Default; + var count = ChildCount(parent); + for (var c = 0; c < count; c += 1) + { + if (cmp.Compare(child ,GetChildAt(parent, c)) == 0) + { + return c; + } + } + + return -1; + } + /// public event EventHandler> StructureChanged; + /// public event EventHandler> NodesChanged; + /// public event EventHandler> NodesInserted; + /// public event EventHandler> NodesRemoved; + /// + /// Triggers the StructureChanged event for the root node to indicate that something somewhere inside the + /// tree has changed. This usually results in a full rebuild of any UI element or dependent data structure, + /// and thus this is the most expensive event that can be used to inform others of changes. + /// public void FireStructureChanged() { StructureChanged?.Invoke(this, new TreeModelEventArgs(new TreePath(), new[] {0}, new[] {Root})); } + /// + /// Indicates that the child node at the given tree path has changed. + /// + /// + /// The path to the parent node + /// The index of the child node within the parent node + /// The child node that has changed public void FireNodesChanged(TreePath parent, int index, TNode child) { NodesChanged?.Invoke(this, new TreeModelEventArgs(parent, index, child)); } + /// + /// Indicates that the structure at the given tree path has changed. + /// + /// + /// The path to the parent node + /// The index of the child node within the parent node + /// The child node that has changed public void FireStructureChanged(TreePath parent, int index, TNode child) { StructureChanged?.Invoke(this, new TreeModelEventArgs(parent, index, child)); } + /// + /// Indicates that a new node has been inserted into the parent at the given + /// index positions. + /// + /// + /// The parent node + /// The index of the child node within the parent node + /// The child node that has changed public void FireNodeInserted(TreePath parent, int index, TNode child) { if (parent == null) @@ -46,6 +107,14 @@ public void FireNodeInserted(TreePath parent, int index, TNode child) NodesInserted?.Invoke(this, new TreeModelEventArgs(parent, index, child)); } + /// + /// Indicates that an existing node has been removed from the parent at the given + /// index positions. + /// + /// + /// The parent node + /// The index of the child node within the parent node + /// The child node that has changed public void FireNodeRemoved(TreePath parent, int index, TNode child) { if (parent == null) @@ -56,6 +125,11 @@ public void FireNodeRemoved(TreePath parent, int index, TNode child) NodesRemoved?.Invoke(this, new TreeModelEventArgs(parent, index, child)); } + /// + /// Indicates that the given node has changed. + /// + /// The path to the parent node + /// The child node that has changed public void FireNodeChanged(TreePath parentPath, TNode child) { TNode parent; @@ -64,6 +138,12 @@ public void FireNodeChanged(TreePath parentPath, TNode child) FireNodesChanged(parentPath, pos, child); } + /// + /// Indicates that the structure at the given tree path has changed. + /// + /// + /// + /// public void FireStructureChanged(TreePath parentPath, TNode child) { TNode parent; @@ -72,4 +152,4 @@ public void FireStructureChanged(TreePath parentPath, TNode child) FireStructureChanged(parentPath, pos, child); } } -} \ No newline at end of file +} diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModelEventArgs.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModelEventArgs.cs index 5110ac0..c5c68a5 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModelEventArgs.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeModelEventArgs.cs @@ -1,10 +1,21 @@ using System; +using JetBrains.Annotations; namespace UnityTutorialSystem.UI.Trees { + /// + /// An event argument class for tree modification events. + /// + /// public class TreeModelEventArgs : EventArgs { - public TreeModelEventArgs(TreePath path) + /// + /// Constructs an event argument with the given path as context path and + /// no information about changed child nodes. + /// + /// The context path + /// If the given path is null + public TreeModelEventArgs([NotNull] TreePath path) { if (path == null) { @@ -16,11 +27,27 @@ public TreeModelEventArgs(TreePath path) ChildIndices = new int[0]; } - public TreeModelEventArgs(TreePath path, int childIndex, TNode child) : this(path, new[] {childIndex}, new[] {child}) + /// + /// Constructs an event argument for tree modification events caused by a + /// single tree node. Use this constructor for insertion and deletion events. + /// + /// The context path. + /// The index of the child within the parent. + /// The child node. + /// if any of the parameters is null + public TreeModelEventArgs([NotNull] TreePath path, int childIndex, [NotNull] TNode child) : this(path, new[] {childIndex}, new[] {child}) { } - public TreeModelEventArgs(TreePath path, int[] childIndices, TNode[] children) + /// + /// Constructs an event argument for tree modification events caused by a + /// multiple tree nodes within the same parent. + /// + /// The context path. + /// The indices of the child within the parent. + /// The child nodes. + /// if any of the parameters is null + public TreeModelEventArgs([NotNull] TreePath path, [NotNull] int[] childIndices, [NotNull] TNode[] children) { if (path == null) { @@ -42,10 +69,22 @@ public TreeModelEventArgs(TreePath path, int[] childIndices, TNode[] chil Path = path; } - public int[] ChildIndices { get; } - public TNode[] Children { get; } - public TreePath Path { get; } + /// + /// The indices of the position of the child nodes in the node described by the context path. + /// + [NotNull] public int[] ChildIndices { get; } + + /// + /// The children. + /// + [NotNull] public TNode[] Children { get; } + /// + /// The context path. + /// + [NotNull] public TreePath Path { get; } + + /// public override string ToString() { return $"{nameof(Path)}: {Path}, {nameof(ChildIndices)}: {ChildIndices}, {nameof(Children)}: {Children}"; diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreePath.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreePath.cs index e3d455a..9296c92 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreePath.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreePath.cs @@ -2,69 +2,96 @@ using System.Collections; using System.Collections.Generic; using System.Linq; +using JetBrains.Annotations; namespace UnityTutorialSystem.UI.Trees { + /// + /// Factory methods for the TreePath data type. + /// public static class TreePath { public static TreePath Empty() { return new TreePath(); } - + + /// + /// Creates a new, single level tree path from the given node. + /// + /// the node data + /// The TreeNode type + /// A treepath containing the given node as only element. public static TreePath From(TNode n) { return new TreePath(n); } + /// + /// Creates a TreePath from the ordered set ot nodes. + /// + /// The set of nodes making up the path. + /// The TreeNode type + /// the created TreePath public static TreePath From(params TNode[] n) { - return new TreePath(n); + var a = (TNode[]) n.Clone(); + return new TreePath(a, n.Length); } } + /// + /// A TreePath represents a hierarchical address in a tree data structure. + /// Each element represents a node in the tree at the given level so that + /// the element at N+1 is a child of the tree node found at level N. + /// + /// The TreeNode content type public class TreePath : IReadOnlyList, IEquatable> { readonly TNode[] backend; - public TreePath() + internal TreePath() { backend = new TNode[0]; Count = 0; } - public TreePath(TNode component) + internal TreePath(TNode component) { backend = new[] {component}; Count = backend.Length; } - public TreePath(params TNode[] component) - { - backend = (TNode[]) component.Clone(); - Count = backend.Length; - } - - TreePath(TNode[] component, int count) + internal TreePath(TNode[] component, int count) { // not need for defensive cloning, as we trust the implementation. backend = component; Count = count; } - public TreePath(TreePath parent, TNode component) + /// + /// Appends the given component to this tree-path creating a new path from it. + /// + /// The new child component. + /// The new tree path + public TreePath Append(TNode component) { - var tmpArray = new TNode[parent.Count + 1]; - for (var index = 0; index < parent.Count; index++) + var tmpArray = new TNode[Count + 1]; + for (var index = 0; index < Count; index++) { - tmpArray[index] = parent[index]; + tmpArray[index] = this[index]; } - tmpArray[parent.Count] = component; - backend = tmpArray; - Count = backend.Length; + tmpArray[Count] = component; + return new TreePath(backend, Count); } + /// + /// Returns the parent path of this path, which is the path with + /// the last element removed. This method will fail with an + /// ArgumentException if the path is already empty. + /// + /// if the Path is empty public TreePath Parent { get @@ -78,6 +105,7 @@ public TreePath Parent } } + /// public bool Equals(TreePath other) { if (ReferenceEquals(null, other)) @@ -113,10 +141,22 @@ IEnumerator IEnumerable.GetEnumerator() return GetEnumerator(); } + /// + /// Returns the number of segments in this path. Returns zero for the empty path. + /// public int Count { get; } + /// + /// Accesses the path segment at the given index. + /// + /// a zero based index. public TNode this[int index] => backend[index]; + /// + /// Attempts to retrieve the last component of the path. + /// + /// The last component + /// true if the path is non empty, false otherwise. public bool TryGetLastComponent(out TNode c) { if (Count == 0) @@ -129,11 +169,17 @@ public bool TryGetLastComponent(out TNode c) return true; } + /// + /// Returns an struct-based enumerator to support more efficient + /// foreach loops. + /// + /// public Enumerator GetEnumerator() { return new Enumerator(this); } + /// public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) @@ -154,6 +200,7 @@ public override bool Equals(object obj) return Equals((TreePath) obj); } + /// public override int GetHashCode() { unchecked @@ -170,22 +217,39 @@ public override int GetHashCode() } } + /// + [NotNull] public override string ToString() { var payload = string.Join("', '", backend); return $"['{payload}']"; } + /// + /// Compares the two tree paths for structural equality using the Equals operator. + /// + /// The left path + /// The right path + /// true if both paths are structurally equal, false otherwise. public static bool operator ==(TreePath left, TreePath right) { return Equals(left, right); } + /// + /// Compares the two tree paths for structural inequality using the Equals operator. + /// + /// The left path + /// The right path + /// true if both paths are structurally unequal, false otherwise. public static bool operator !=(TreePath left, TreePath right) { return !Equals(left, right); } + /// + /// A enumerator that does not cause heap allocations when used correctly. + /// public struct Enumerator : IEnumerator { readonly TreePath contents; @@ -193,6 +257,7 @@ public struct Enumerator : IEnumerator int index; TNode current; + /// internal Enumerator(TreePath widget) : this() { contents = widget; @@ -200,10 +265,12 @@ internal Enumerator(TreePath widget) : this() current = default(TNode); } + /// public void Dispose() { } + /// public bool MoveNext() { if (index + 1 < contents.Count) @@ -217,6 +284,7 @@ public bool MoveNext() return false; } + /// public void Reset() { index = -1; @@ -225,6 +293,7 @@ public void Reset() object IEnumerator.Current => Current; + /// public TNode Current { get diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs index 854b74d..5b2f2ab 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreeView.cs @@ -4,7 +4,20 @@ namespace UnityTutorialSystem.UI.Trees { /// - /// abstract because of generics and unity. + /// + /// A TreeView component. This class takes a Tree structure represented by the + /// and unrolls it into a rendered structure. + /// This base class does not track the expanded state of nodes, if you want to + /// support this use the method to influence whether + /// collapsed nodes are shown. + /// + /// + /// This class will generate a (pooled) copy of the a template TreeItemRenderer + /// game-object and behaviour and expects that the child nodes of the RectTransform + /// are laid out correctly by an independent LayoutElement behaviour attached to the + /// same GameObject. + /// + /// This class is abstract because it uses generics and unity does not like that. /// /// public abstract class TreeView : MonoBehaviour @@ -13,11 +26,17 @@ public abstract class TreeView : MonoBehaviour [SerializeField] bool showRootNode; ITreeModel model; + /// protected TreeView() { pool = new List>(); } + /// + /// Defines whether the root node of the model will be visible. + /// If set to false, this tree will look as if it is a list of + /// independent sub trees and nodes. + /// public bool ShowRootNode { get { return showRootNode; } @@ -28,6 +47,10 @@ public bool ShowRootNode } } + /// + /// The TreeModel that provides the data for this component. The + /// tree will update in response to the events fired by the model. + /// public ITreeModel Model { get { return model; } @@ -54,8 +77,21 @@ public ITreeModel Model } } + /// + /// A TreeItemRenderer. The renderer will be cloned via + /// + /// for each node in the tree. This TreeView implementation here + /// expects that all calls to this property return the same instance + /// for the lifetime of this object. + /// + /// This property is abstract to work around Unity's Generics limitations. + /// protected abstract TreeItemRenderer ItemRenderer { get; } + /// + /// Called when the script instance is loaded. This simply disables the + /// template item renderer game object. + /// protected virtual void Awake() { if (ItemRenderer != null) @@ -64,26 +100,49 @@ protected virtual void Awake() } } + /// + /// Called when the tree model has changed. + /// + /// The tree model that caused this event. + /// The tree model change event arguments. protected virtual void OnStructureChanged(object sender, TreeModelEventArgs e) { OnModelUpdated(); } + /// + /// Called when the tree model has changed. + /// + /// The tree model that caused this event. + /// The tree model change event arguments. protected virtual void OnNodesRemoved(object sender, TreeModelEventArgs e) { OnModelUpdated(); } + /// + /// Called when the tree model has changed. + /// + /// The tree model that caused this event. + /// The tree model change event arguments. protected virtual void OnNodesInserted(object sender, TreeModelEventArgs e) { OnModelUpdated(); } + /// + /// Called when the tree model has changed. + /// + /// The tree model that caused this event. + /// The tree model change event arguments. protected virtual void OnNodesChanged(object sender, TreeModelEventArgs e) { OnModelUpdated(); } + /// + /// Callback handler that is invoked in response to data changes. + /// protected virtual void OnModelUpdated() { if ((model == null) || (model.HasRoot == false)) @@ -109,6 +168,17 @@ protected virtual void OnModelUpdated() } } + /// + /// Internal method that is called as part of the rebuilding of render nodes after + /// data in the model has changed. Refreshes the tree. + /// + /// The node to refresh + /// The index of the next free node in the ItemRenderer pool + /// a flag indicating whether the current node is visible. + /// Normally we would not process invisible nodes, but the root node can be + /// invisible and still contain visible child nodes if is set to false. + /// + /// A pointer to the next free node in the TreeItemRenderer pool. protected virtual int RefreshNodes(TreePath node, int nextNodeIndexInPool, bool visible) { while (pool.Count <= nextNodeIndexInPool) @@ -137,20 +207,27 @@ protected virtual int RefreshNodes(TreePath node, int nextNodeIndexInPool, bo for (var i = 0; i < count; i += 1) { var child = model.GetChildAt(t, i); - nextNodeIndexInPool = RefreshNodes(new TreePath(node, child), nextNodeIndexInPool, true); + nextNodeIndexInPool = RefreshNodes(node.Append(child), nextNodeIndexInPool, true); } } return nextNodeIndexInPool; } - - + /// + /// Checks whether this tree-path should be visible in the rendered tree. + /// + /// The TreePath to check + /// true, if the node should show, false otherwise. protected virtual bool IsPathVisible(TreePath path) { return true; } + /// + /// A helper method that instantiates a new ItemRenderer. + /// + /// protected virtual TreeItemRenderer InstantiateRenderer() { var itemRenderer = Instantiate(ItemRenderer); diff --git a/Packages/manifest.json b/Packages/manifest.json index 77ed7ff..65d7dd6 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -3,7 +3,7 @@ "com.unity.ads": "2.3.1", "com.unity.analytics": "3.2.2", "com.unity.collab-proxy": "1.2.15", - "com.unity.package-manager-ui": "2.0.3", + "com.unity.package-manager-ui": "2.0.7", "com.unity.purchasing": "2.0.3", "com.unity.textmeshpro": "1.3.0", "com.unity.xr.windowsmr.metro": "1.0.7", diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 6128d74..828e38d 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1 +1 @@ -m_EditorVersion: 2018.3.5f1 +m_EditorVersion: 2018.3.11f1 diff --git a/UnityTutorialSystem.csproj.DotSettings b/UnityTutorialSystem.csproj.DotSettings index c1244db..cb99758 100644 --- a/UnityTutorialSystem.csproj.DotSettings +++ b/UnityTutorialSystem.csproj.DotSettings @@ -1,3 +1,4 @@  + True True True \ No newline at end of file diff --git a/UnityTutorialSystem.sln.DotSettings b/UnityTutorialSystem.sln.DotSettings new file mode 100644 index 0000000..e2387a9 --- /dev/null +++ b/UnityTutorialSystem.sln.DotSettings @@ -0,0 +1,9 @@ + + en-US,en-GB + <data Name="en-GB" CaseSensitive="True" Encoded="True" /> + en-US,en-GB + en-US,en-GB + en-US,en-GB + en-US,en-GB + True + True \ No newline at end of file From 076de69959e7d489f3c10bfe03d386ccbea0707b Mon Sep 17 00:00:00 2001 From: Thomas Morgner Date: Thu, 18 Apr 2019 18:52:25 +0100 Subject: [PATCH 19/24] Added FluentAssertions, NaughtyAttributes update; Demo gif added --- Assets/Plugins/FluentAssertions.meta | 8 + Assets/Plugins/FluentAssertions/Core.meta | 8 + .../FluentAssertions/Core/AndConstraint.cs | 23 + .../Core/AndConstraint.cs.meta | 11 + .../Core/AndWhichConstraint.cs | 77 + .../Core/AndWhichConstraint.cs.meta | 11 + .../FluentAssertions/Core/AssertionOptions.cs | 58 + .../Core/AssertionOptions.cs.meta | 11 + .../FluentAssertions/Core/Collections.meta | 8 + .../Core/Collections/CollectionAssertions.cs | 1373 +++++++++++++++++ .../Collections/CollectionAssertions.cs.meta | 11 + .../GenericCollectionAssertions.cs | 193 +++ .../GenericCollectionAssertions.cs.meta | 11 + .../GenericDictionaryAssertions.cs | 956 ++++++++++++ .../GenericDictionaryAssertions.cs.meta | 11 + .../NonGenericCollectionAssertions.cs | 154 ++ .../NonGenericCollectionAssertions.cs.meta | 11 + .../SelfReferencingCollectionAssertions.cs | 510 ++++++ ...elfReferencingCollectionAssertions.cs.meta | 11 + .../Core/Collections/SortOrder.cs | 8 + .../Core/Collections/SortOrder.cs.meta | 11 + .../Collections/StringCollectionAssertions.cs | 142 ++ .../StringCollectionAssertions.cs.meta | 11 + .../Core/Collections/WhichValueConstraint.cs | 16 + .../Collections/WhichValueConstraint.cs.meta | 11 + .../Plugins/FluentAssertions/Core/Common.meta | 8 + .../Core/Common/CSharpAccessModifier.cs | 12 + .../Core/Common/CSharpAccessModifier.cs.meta | 11 + .../Common/CSharpAccessModifierExtensions.cs | 98 ++ .../CSharpAccessModifierExtensions.cs.meta | 11 + .../Core/Common/Configuration.cs | 99 ++ .../Core/Common/Configuration.cs.meta | 11 + .../Core/Common/DateTimeExtensions.cs | 20 + .../Core/Common/DateTimeExtensions.cs.meta | 11 + .../Core/Common/EnumerableExtensions.cs | 48 + .../Core/Common/EnumerableExtensions.cs.meta | 11 + .../Core/Common/ExpressionExtensions.cs | 158 ++ .../Core/Common/ExpressionExtensions.cs.meta | 11 + .../Core/Common/IAdapterResolver.cs | 15 + .../Core/Common/IAdapterResolver.cs.meta | 11 + .../Core/Common/IConfigurationStore.cs | 7 + .../Core/Common/IConfigurationStore.cs.meta | 11 + .../Core/Common/IProvidePlatformServices.cs | 17 + .../Common/IProvidePlatformServices.cs.meta | 11 + .../Core/Common/IReflector.cs | 11 + .../Core/Common/IReflector.cs.meta | 11 + .../Core/Common/MethodInfoExtensions.cs | 29 + .../Core/Common/MethodInfoExtensions.cs.meta | 11 + .../Core/Common/NullConfigurationStore.cs | 10 + .../Common/NullConfigurationStore.cs.meta | 11 + .../Core/Common/NullReflector.cs | 14 + .../Core/Common/NullReflector.cs.meta | 11 + .../Core/Common/ObjectExtensions.cs | 20 + .../Core/Common/ObjectExtensions.cs.meta | 11 + .../Core/Common/PlatformAdapter.cs | 29 + .../Core/Common/PlatformAdapter.cs.meta | 11 + .../Core/Common/ProbingAdapterResolver.cs | 125 ++ .../Common/ProbingAdapterResolver.cs.meta | 11 + .../Core/Common/PropertyInfoExtensions.cs | 13 + .../Common/PropertyInfoExtensions.cs.meta | 11 + .../FluentAssertions/Core/Common/Services.cs | 97 ++ .../Core/Common/Services.cs.meta | 11 + .../Core/Common/StringExtensions.cs | 84 + .../Core/Common/StringExtensions.cs.meta | 11 + .../Core/Common/TypeExtensions.cs | 350 +++++ .../Core/Common/TypeExtensions.cs.meta | 11 + .../Common/ValueFormatterDetectionMode.cs | 25 + .../ValueFormatterDetectionMode.cs.meta | 11 + .../FluentAssertions/Core/Disposable.cs | 19 + .../FluentAssertions/Core/Disposable.cs.meta | 11 + .../FluentAssertions/Core/Equivalency.meta | 8 + .../Core/Equivalency/AssertionContext.cs | 36 + .../Core/Equivalency/AssertionContext.cs.meta | 11 + .../Core/Equivalency/AssertionResultSet.cs | 62 + .../Equivalency/AssertionResultSet.cs.meta | 11 + .../Core/Equivalency/AssertionRule.cs | 90 ++ .../Core/Equivalency/AssertionRule.cs.meta | 11 + .../AssertionRuleEquivalencyStep.cs | 61 + .../AssertionRuleEquivalencyStep.cs.meta | 11 + .../AssertionRuleEquivalencyStepAdapter.cs | 30 + ...ssertionRuleEquivalencyStepAdapter.cs.meta | 11 + ...llectionMemberAssertionOptionsDecorator.cs | 87 ++ ...ionMemberAssertionOptionsDecorator.cs.meta | 11 + .../CollectionMemberAssertionRuleDecorator.cs | 47 + ...ectionMemberAssertionRuleDecorator.cs.meta | 11 + .../CollectionMemberSubjectInfo.cs | 32 + .../CollectionMemberSubjectInfo.cs.meta | 11 + .../Equivalency/CyclicReferenceHandling.cs | 18 + .../CyclicReferenceHandling.cs.meta | 11 + .../Equivalency/DictionaryEquivalencyStep.cs | 77 + .../DictionaryEquivalencyStep.cs.meta | 11 + .../Core/Equivalency/EnumEqualityStep.cs | 57 + .../Core/Equivalency/EnumEqualityStep.cs.meta | 11 + .../Equivalency/EnumEquivalencyHandling.cs | 8 + .../EnumEquivalencyHandling.cs.meta | 11 + .../Equivalency/EnumerableEquivalencyStep.cs | 74 + .../EnumerableEquivalencyStep.cs.meta | 11 + .../EnumerableEquivalencyValidator.cs | 144 ++ .../EnumerableEquivalencyValidator.cs.meta | 11 + .../EquivalencyAssertionOptions.cs | 98 ++ .../EquivalencyAssertionOptions.cs.meta | 11 + .../EquivalencyAssertionOptionsExtentions.cs | 22 + ...ivalencyAssertionOptionsExtentions.cs.meta | 11 + .../EquivalencyValidationContext.cs | 125 ++ .../EquivalencyValidationContext.cs.meta | 11 + .../EquivalencyValidationContextExtentions.cs | 91 ++ ...valencyValidationContextExtentions.cs.meta | 11 + .../Core/Equivalency/EquivalencyValidator.cs | 108 ++ .../Equivalency/EquivalencyValidator.cs.meta | 11 + .../Equivalency/FieldSelectedMemberInfo.cs | 45 + .../FieldSelectedMemberInfo.cs.meta | 11 + .../GenericDictionaryEquivalencyStep.cs | 223 +++ .../GenericDictionaryEquivalencyStep.cs.meta | 11 + .../GenericEnumerableEquivalencyStep.cs | 114 ++ .../GenericEnumerableEquivalencyStep.cs.meta | 11 + .../Core/Equivalency/IAssertionContext.cs | 36 + .../Equivalency/IAssertionContext.cs.meta | 11 + .../Core/Equivalency/IAssertionRule.cs | 15 + .../Core/Equivalency/IAssertionRule.cs.meta | 11 + .../IEquivalencyAssertionOptions.cs | 78 + .../IEquivalencyAssertionOptions.cs.meta | 11 + .../Core/Equivalency/IEquivalencyStep.cs | 25 + .../Core/Equivalency/IEquivalencyStep.cs.meta | 11 + .../IEquivalencyValidationContext.cs | 69 + .../IEquivalencyValidationContext.cs.meta | 11 + .../Core/Equivalency/IEquivalencyValidator.cs | 7 + .../Equivalency/IEquivalencyValidator.cs.meta | 11 + .../Core/Equivalency/IMemberMatchingRule.cs | 34 + .../Equivalency/IMemberMatchingRule.cs.meta | 11 + .../Core/Equivalency/IMemberSelectionRule.cs | 32 + .../Equivalency/IMemberSelectionRule.cs.meta | 11 + .../Core/Equivalency/IOrderingRule.cs | 13 + .../Core/Equivalency/IOrderingRule.cs.meta | 11 + .../Core/Equivalency/ISubjectInfo.cs | 38 + .../Core/Equivalency/ISubjectInfo.cs.meta | 11 + .../Core/Equivalency/Matching.meta | 8 + .../CollectionMemberMatchingRuleDecorator.cs | 23 + ...lectionMemberMatchingRuleDecorator.cs.meta | 11 + .../Matching/MustMatchByNameRule.cs | 55 + .../Matching/MustMatchByNameRule.cs.meta | 11 + .../Matching/TryMatchByNameRule.cs | 21 + .../Matching/TryMatchByNameRule.cs.meta | 11 + .../MemberInfoSelectedMemberInfo.cs | 58 + .../MemberInfoSelectedMemberInfo.cs.meta | 11 + .../MultiDimensionalArrayEquivalencyStep.cs | 148 ++ ...ltiDimensionalArrayEquivalencyStep.cs.meta | 11 + .../Core/Equivalency/ObjectReference.cs | 65 + .../Core/Equivalency/ObjectReference.cs.meta | 11 + .../Core/Equivalency/ObjectTracker.cs | 72 + .../Core/Equivalency/ObjectTracker.cs.meta | 11 + .../Core/Equivalency/OrderStrictness.cs | 9 + .../Core/Equivalency/OrderStrictness.cs.meta | 11 + .../Core/Equivalency/Ordering.meta | 8 + .../Ordering/ByteArrayOrderingRule.cs | 22 + .../Ordering/ByteArrayOrderingRule.cs.meta | 11 + .../CollectionMemberOrderingRuleDecorator.cs | 22 + ...lectionMemberOrderingRuleDecorator.cs.meta | 11 + .../Ordering/MatchAllOrderingRule.cs | 21 + .../Ordering/MatchAllOrderingRule.cs.meta | 11 + .../Ordering/PathBasedOrderingRule.cs | 66 + .../Ordering/PathBasedOrderingRule.cs.meta | 11 + .../Ordering/PredicateBasedOrderingRule.cs | 39 + .../PredicateBasedOrderingRule.cs.meta | 11 + .../Equivalency/OrderingRuleCollection.cs | 69 + .../OrderingRuleCollection.cs.meta | 11 + .../Equivalency/PropertySelectedMemberInfo.cs | 39 + .../PropertySelectedMemberInfo.cs.meta | 11 + .../ReferenceEqualityEquivalencyStep.cs | 28 + .../ReferenceEqualityEquivalencyStep.cs.meta | 11 + .../RunAllUserStepsEquivalencyStep.cs | 24 + .../RunAllUserStepsEquivalencyStep.cs.meta | 11 + .../Core/Equivalency/SelectedMemberInfo.cs | 62 + .../Equivalency/SelectedMemberInfo.cs.meta | 11 + .../Core/Equivalency/Selection.meta | 8 + .../Selection/AllPublicFieldsSelectionRule.cs | 36 + .../AllPublicFieldsSelectionRule.cs.meta | 11 + .../AllPublicPropertiesSelectionRule.cs | 36 + .../AllPublicPropertiesSelectionRule.cs.meta | 11 + .../CollectionMemberSelectionRuleDecorator.cs | 30 + ...ectionMemberSelectionRuleDecorator.cs.meta | 11 + .../ExcludeMemberByPathSelectionRule.cs | 30 + .../ExcludeMemberByPathSelectionRule.cs.meta | 11 + .../ExcludeMemberByPredicateSelectionRule.cs | 38 + ...ludeMemberByPredicateSelectionRule.cs.meta | 11 + .../IncludeMemberByPathSelectionRule.cs | 37 + .../IncludeMemberByPathSelectionRule.cs.meta | 11 + .../IncludeMemberByPredicateSelectionRule.cs | 52 + ...ludeMemberByPredicateSelectionRule.cs.meta | 11 + .../Core/Equivalency/Selection/MemberPath.cs | 41 + .../Equivalency/Selection/MemberPath.cs.meta | 11 + .../Selection/NestedSelectionContext.cs | 38 + .../Selection/NestedSelectionContext.cs.meta | 11 + .../SelectMemberByPathSelectionRule.cs | 55 + .../SelectMemberByPathSelectionRule.cs.meta | 11 + ...elfReferenceEquivalencyAssertionOptions.cs | 628 ++++++++ ...ferenceEquivalencyAssertionOptions.cs.meta | 11 + .../SimpleEqualityEquivalencyStep.cs | 30 + .../SimpleEqualityEquivalencyStep.cs.meta | 11 + .../StringEqualityEquivalencyStep.cs | 100 ++ .../StringEqualityEquivalencyStep.cs.meta | 11 + .../StructuralEqualityEquivalencyStep.cs | 89 ++ .../StructuralEqualityEquivalencyStep.cs.meta | 11 + .../Core/Equivalency/SubjectInfoExtensions.cs | 51 + .../Equivalency/SubjectInfoExtensions.cs.meta | 11 + .../TryConversionEquivalencyStep.cs | 70 + .../TryConversionEquivalencyStep.cs.meta | 11 + .../Equivalency/ValueTypeEquivalencyStep.cs | 48 + .../ValueTypeEquivalencyStep.cs.meta | 11 + .../Core/EquivalencyStepCollection.cs | 123 ++ .../Core/EquivalencyStepCollection.cs.meta | 11 + .../Plugins/FluentAssertions/Core/Events.meta | 8 + .../Core/Events/EventMonitor.cs | 28 + .../Core/Events/EventMonitor.cs.meta | 11 + .../Core/Events/EventRecorder.cs | 88 ++ .../Core/Events/EventRecorder.cs.meta | 11 + .../Core/Events/EventRecordersMap.cs | 79 + .../Core/Events/EventRecordersMap.cs.meta | 11 + .../Core/Events/IEventRecorder.cs | 31 + .../Core/Events/IEventRecorder.cs.meta | 11 + .../Core/Events/RecordedEvent.cs | 41 + .../Core/Events/RecordedEvent.cs.meta | 11 + .../FluentAssertions/Core/Execution.meta | 8 + .../Core/Execution/AssertionScope.cs | 264 ++++ .../Core/Execution/AssertionScope.cs.meta | 11 + .../Execution/CollectingAssertionStrategy.cs | 62 + .../CollectingAssertionStrategy.cs.meta | 11 + .../Core/Execution/ContextDataItems.cs | 93 ++ .../Core/Execution/ContextDataItems.cs.meta | 11 + .../Core/Execution/Continuation.cs | 42 + .../Core/Execution/Continuation.cs.meta | 11 + .../Core/Execution/ContinuationOfGiven.cs | 37 + .../Execution/ContinuationOfGiven.cs.meta | 11 + .../Execution/DefaultAssertionStrategy.cs | 44 + .../DefaultAssertionStrategy.cs.meta | 11 + .../Core/Execution/Execute.cs | 23 + .../Core/Execution/Execute.cs.meta | 11 + .../Core/Execution/GivenSelector.cs | 129 ++ .../Core/Execution/GivenSelector.cs.meta | 11 + .../Core/Execution/GivenSelectorExtensions.cs | 84 + .../Execution/GivenSelectorExtensions.cs.meta | 11 + .../Core/Execution/IAssertionStrategy.cs | 30 + .../Core/Execution/IAssertionStrategy.cs.meta | 11 + .../Core/Execution/ICloneable2.cs | 17 + .../Core/Execution/ICloneable2.cs.meta | 11 + .../Core/Execution/MessageBuilder.cs | 107 ++ .../Core/Execution/MessageBuilder.cs.meta | 11 + .../Core/Execution/Reportability.cs | 11 + .../Core/Execution/Reportability.cs.meta | 11 + .../Core/FluentDateTimeExtensions.cs | 194 +++ .../Core/FluentDateTimeExtensions.cs.meta | 11 + .../FluentAssertions/Core/Formatting.meta | 8 + .../AggregateExceptionValueFormatter.cs | 59 + .../AggregateExceptionValueFormatter.cs.meta | 11 + .../Formatting/AttributeBasedFormatter.cs | 109 ++ .../AttributeBasedFormatter.cs.meta | 11 + .../Core/Formatting/ByteValueFormatter.cs | 40 + .../Formatting/ByteValueFormatter.cs.meta | 11 + .../DateTimeOffsetValueFormatter.cs | 104 ++ .../DateTimeOffsetValueFormatter.cs.meta | 11 + .../Core/Formatting/DecimalValueFormatter.cs | 40 + .../Formatting/DecimalValueFormatter.cs.meta | 11 + .../Core/Formatting/DefaultValueFormatter.cs | 128 ++ .../Formatting/DefaultValueFormatter.cs.meta | 11 + .../Core/Formatting/DoubleValueFormatter.cs | 62 + .../Formatting/DoubleValueFormatter.cs.meta | 11 + .../Formatting/EnumerableValueFormatter.cs | 58 + .../EnumerableValueFormatter.cs.meta | 11 + .../Formatting/ExceptionValueFormatter.cs | 54 + .../ExceptionValueFormatter.cs.meta | 11 + .../Formatting/ExpressionValueFormatter.cs | 42 + .../ExpressionValueFormatter.cs.meta | 11 + .../Core/Formatting/Formatter.cs | 123 ++ .../Core/Formatting/Formatter.cs.meta | 11 + .../Core/Formatting/GuidValueFormatter.cs | 40 + .../Formatting/GuidValueFormatter.cs.meta | 11 + .../Core/Formatting/IValueFormatter.cs | 33 + .../Core/Formatting/IValueFormatter.cs.meta | 11 + .../Core/Formatting/Int16ValueFormatter.cs | 40 + .../Formatting/Int16ValueFormatter.cs.meta | 11 + .../Core/Formatting/Int32ValueFormatter.cs | 40 + .../Formatting/Int32ValueFormatter.cs.meta | 11 + .../Core/Formatting/Int64ValueFormatter.cs | 40 + .../Formatting/Int64ValueFormatter.cs.meta | 11 + .../Core/Formatting/NullValueFormatter.cs | 39 + .../Formatting/NullValueFormatter.cs.meta | 11 + .../Core/Formatting/PropertyInfoFormatter.cs | 40 + .../Formatting/PropertyInfoFormatter.cs.meta | 11 + .../Core/Formatting/SByteValueFormatter.cs | 40 + .../Formatting/SByteValueFormatter.cs.meta | 11 + .../Core/Formatting/SingleValueFormatter.cs | 57 + .../Formatting/SingleValueFormatter.cs.meta | 11 + .../Core/Formatting/StringValueFormatter.cs | 41 + .../Formatting/StringValueFormatter.cs.meta | 11 + .../Core/Formatting/TimeSpanValueFormatter.cs | 142 ++ .../Formatting/TimeSpanValueFormatter.cs.meta | 11 + .../Core/Formatting/UInt16ValueFormatter.cs | 40 + .../Formatting/UInt16ValueFormatter.cs.meta | 11 + .../Core/Formatting/UInt32ValueFormatter.cs | 40 + .../Formatting/UInt32ValueFormatter.cs.meta | 11 + .../Core/Formatting/UInt64ValueFormatter.cs | 40 + .../Formatting/UInt64ValueFormatter.cs.meta | 11 + .../Formatting/ValueFormatterAttribute.cs | 13 + .../ValueFormatterAttribute.cs.meta | 11 + .../Core/InternalAssertionExtensions.cs | 478 ++++++ .../Core/InternalAssertionExtensions.cs.meta | 11 + .../FluentAssertions/Core/Numeric.meta | 8 + .../Core/Numeric/ComparableTypeAssertions.cs | 198 +++ .../Numeric/ComparableTypeAssertions.cs.meta | 11 + .../Core/Numeric/NullableNumericAssertions.cs | 83 + .../Numeric/NullableNumericAssertions.cs.meta | 11 + .../Core/Numeric/NumericAssertions.cs | 356 +++++ .../Core/Numeric/NumericAssertions.cs.meta | 11 + .../Core/NumericAssertionsExtensions.cs | 204 +++ .../Core/NumericAssertionsExtensions.cs.meta | 11 + .../FluentAssertions/Core/Primitives.meta | 8 + .../Core/Primitives/BooleanAssertions.cs | 84 + .../Core/Primitives/BooleanAssertions.cs.meta | 11 + .../Core/Primitives/DateTimeAssertions.cs | 831 ++++++++++ .../Primitives/DateTimeAssertions.cs.meta | 11 + .../Primitives/DateTimeOffsetAssertions.cs | 862 +++++++++++ .../DateTimeOffsetAssertions.cs.meta | 11 + .../DateTimeOffsetRangeAssertions.cs | 131 ++ .../DateTimeOffsetRangeAssertions.cs.meta | 11 + .../Primitives/DateTimeRangeAssertions.cs | 131 ++ .../DateTimeRangeAssertions.cs.meta | 11 + .../Core/Primitives/GuidAssertions.cs | 130 ++ .../Core/Primitives/GuidAssertions.cs.meta | 11 + .../Primitives/NegatedStringStartValidator.cs | 44 + .../NegatedStringStartValidator.cs.meta | 11 + .../Primitives/NullableBooleanAssertions.cs | 149 ++ .../NullableBooleanAssertions.cs.meta | 11 + .../Primitives/NullableDateTimeAssertions.cs | 112 ++ .../NullableDateTimeAssertions.cs.meta | 11 + .../NullableDateTimeOffsetAssertions.cs | 115 ++ .../NullableDateTimeOffsetAssertions.cs.meta | 11 + .../Core/Primitives/NullableGuidAssertions.cs | 109 ++ .../Primitives/NullableGuidAssertions.cs.meta | 11 + .../NullableSimpleTimeSpanAssertions.cs | 114 ++ .../NullableSimpleTimeSpanAssertions.cs.meta | 11 + .../Core/Primitives/ObjectAssertions.cs | 131 ++ .../Core/Primitives/ObjectAssertions.cs.meta | 11 + .../Primitives/ReferenceTypeAssertions.cs | 286 ++++ .../ReferenceTypeAssertions.cs.meta | 11 + .../Primitives/SimpleTimeSpanAssertions.cs | 236 +++ .../SimpleTimeSpanAssertions.cs.meta | 11 + .../Core/Primitives/StringAssertions.cs | 888 +++++++++++ .../Core/Primitives/StringAssertions.cs.meta | 11 + .../Primitives/StringEqualityValidator.cs | 68 + .../StringEqualityValidator.cs.meta | 11 + .../Core/Primitives/StringStartValidator.cs | 56 + .../Primitives/StringStartValidator.cs.meta | 11 + .../Core/Primitives/StringValidator.cs | 80 + .../Core/Primitives/StringValidator.cs.meta | 11 + .../StringWildcardMatchingValidator.cs | 82 + .../StringWildcardMatchingValidator.cs.meta | 11 + .../Core/Primitives/TimeSpanCondition.cs | 11 + .../Core/Primitives/TimeSpanCondition.cs.meta | 11 + .../Core/Primitives/TimeSpanPredicate.cs | 29 + .../Core/Primitives/TimeSpanPredicate.cs.meta | 11 + .../FluentAssertions/Core/Specialized.meta | 8 + .../Core/Specialized/ActionAssertions.cs | 129 ++ .../Core/Specialized/ActionAssertions.cs.meta | 11 + .../Specialized/AsyncFunctionAssertions.cs | 158 ++ .../AsyncFunctionAssertions.cs.meta | 11 + .../Core/Specialized/ExceptionAssertions.cs | 277 ++++ .../Specialized/ExceptionAssertions.cs.meta | 11 + .../Core/Specialized/IExtractExceptions.cs | 10 + .../Specialized/IExtractExceptions.cs.meta | 11 + .../Core/TimeSpanConversionExtensions.cs | 120 ++ .../Core/TimeSpanConversionExtensions.cs.meta | 11 + .../FluentAssertions/Core/Tracing.meta | 8 + .../Core/Tracing/ITraceWriter.cs | 14 + .../Core/Tracing/ITraceWriter.cs.meta | 11 + .../Core/Tracing/StringBuilderTraceWriter.cs | 42 + .../Tracing/StringBuilderTraceWriter.cs.meta | 11 + .../Core/TypeEnumerableExtensions.cs | 53 + .../Core/TypeEnumerableExtensions.cs.meta | 11 + .../FluentAssertions/Core/TypeExtensions.cs | 56 + .../Core/TypeExtensions.cs.meta | 11 + .../Plugins/FluentAssertions/Core/Types.meta | 8 + .../FluentAssertions/Core/Types/AllTypes.cs | 26 + .../Core/Types/AllTypes.cs.meta | 11 + .../Core/Types/ConstructorInfoAssertions.cs | 38 + .../Types/ConstructorInfoAssertions.cs.meta | 11 + .../Core/Types/MemberInfoAssertions.cs | 134 ++ .../Core/Types/MemberInfoAssertions.cs.meta | 11 + .../Core/Types/MethodBaseAssertions.cs | 54 + .../Core/Types/MethodBaseAssertions.cs.meta | 11 + .../Core/Types/MethodInfoAssertions.cs | 142 ++ .../Core/Types/MethodInfoAssertions.cs.meta | 11 + .../Core/Types/MethodInfoSelector.cs | 118 ++ .../Core/Types/MethodInfoSelector.cs.meta | 11 + .../Types/MethodInfoSelectorAssertions.cs | 136 ++ .../MethodInfoSelectorAssertions.cs.meta | 11 + .../Core/Types/PropertyInfoAssertions.cs | 232 +++ .../Core/Types/PropertyInfoAssertions.cs.meta | 11 + .../Core/Types/PropertyInfoSelector.cs | 102 ++ .../Core/Types/PropertyInfoSelector.cs.meta | 11 + .../Types/PropertyInfoSelectorAssertions.cs | 144 ++ .../PropertyInfoSelectorAssertions.cs.meta | 11 + .../Core/Types/TypeAssertions.cs | 709 +++++++++ .../Core/Types/TypeAssertions.cs.meta | 11 + .../Core/Types/TypeSelector.cs | 108 ++ .../Core/Types/TypeSelector.cs.meta | 11 + .../Core/Types/TypeSelectorAssertions.cs | 101 ++ .../Core/Types/TypeSelectorAssertions.cs.meta | 11 + .../FluentAssertions.Core.meta | 8 + .../ReflectionExtensions.cs | 50 + .../ReflectionExtensions.cs.meta | 11 + .../FluentAssertions.Net40.meta | 8 + .../FluentAssertions.Net40/Common.meta | 8 + .../Common/DefaultReflectionProvider.cs | 46 + .../Common/DefaultReflectionProvider.cs.meta | 11 + .../Common/ProvidePlatformServices.cs | 41 + .../Common/ProvidePlatformServices.cs.meta | 11 + .../FluentAssertions.Net40/Execution.meta | 8 + .../Execution/GallioTestFramework.cs | 110 ++ .../Execution/GallioTestFramework.cs.meta | 11 + .../Execution/MSTestFramework.cs | 15 + .../Execution/MSTestFramework.cs.meta | 11 + .../Execution/MSTestFrameworkV2.cs | 15 + .../Execution/MSTestFrameworkV2.cs.meta | 11 + .../Execution/MSpecFramework.cs | 15 + .../Execution/MSpecFramework.cs.meta | 11 + .../Execution/MbUnitTestFramework.cs | 15 + .../Execution/MbUnitTestFramework.cs.meta | 11 + .../Execution/NUnitTestFramework.cs | 15 + .../Execution/NUnitTestFramework.cs.meta | 11 + .../Execution/TestFrameworkProvider.cs | 100 ++ .../Execution/TestFrameworkProvider.cs.meta | 11 + .../Execution/XUnitTestFramework.cs | 15 + .../Execution/XUnitTestFramework.cs.meta | 11 + .../ObjectAssertionsExtensions.cs | 183 +++ .../ObjectAssertionsExtensions.cs.meta | 11 + .../FluentAssertions.Net40/Properties.meta | 8 + .../Properties/AssemblyInfo.cs | 14 + .../Properties/AssemblyInfo.cs.meta | 11 + .../FluentAssertions.Net40/Xml.meta | 8 + .../Xml/XmlAssertionExtensions.cs | 25 + .../Xml/XmlAssertionExtensions.cs.meta | 11 + .../Xml/XmlElementAssertions.cs | 226 +++ .../Xml/XmlElementAssertions.cs.meta | 11 + .../Xml/XmlNodeAssertions.cs | 20 + .../Xml/XmlNodeAssertions.cs.meta | 11 + .../XmlNodeAssertionsofTSubjectTAssertions.cs | 97 ++ ...odeAssertionsofTSubjectTAssertions.cs.meta | 11 + .../Xml/XmlNodeFormatter.cs | 33 + .../Xml/XmlNodeFormatter.cs.meta | 11 + .../FluentAssertions/FluentAssertions.asmdef | 10 + .../FluentAssertions.asmdef.meta | 7 + Assets/Plugins/FluentAssertions/LICENSE | 191 +++ Assets/Plugins/FluentAssertions/LICENSE.meta | 7 + Assets/Plugins/FluentAssertions/README.md | 15 + .../Plugins/FluentAssertions/README.md.meta | 7 + Assets/Plugins/FluentAssertions/Shared.meta | 8 + .../Shared/AssertionExtensions.Actions.cs | 222 +++ .../AssertionExtensions.Actions.cs.meta | 11 + .../Shared/AssertionExtensions.cs | 762 +++++++++ .../Shared/AssertionExtensions.cs.meta | 11 + .../FluentAssertions/Shared/Execution.meta | 8 + .../Execution/AssertionFailedException.cs | 31 + .../AssertionFailedException.cs.meta | 11 + .../Shared/Execution/FallbackTestFramework.cs | 24 + .../Execution/FallbackTestFramework.cs.meta | 11 + .../Shared/Execution/ITestFramework.cs | 18 + .../Shared/Execution/ITestFramework.cs.meta | 11 + .../Execution/LateBoundTestFramework.cs | 152 ++ .../Execution/LateBoundTestFramework.cs.meta | 11 + .../FluentAssertions/Shared/Formatting.meta | 8 + .../Formatting/XAttributeValueFormatter.cs | 41 + .../XAttributeValueFormatter.cs.meta | 11 + .../Formatting/XDocumentValueFormatter.cs | 48 + .../XDocumentValueFormatter.cs.meta | 11 + .../Formatting/XElementValueFormatter.cs | 73 + .../Formatting/XElementValueFormatter.cs.meta | 11 + .../FluentAssertions/Shared/SolutionInfo.cs | 9 + .../Shared/SolutionInfo.cs.meta | 11 + .../FluentAssertions/Shared/Specialized.meta | 8 + .../Shared/Specialized/AssemblyAssertions.cs | 122 ++ .../Specialized/AssemblyAssertions.cs.meta | 11 + .../Specialized/ExecutionTimeAssertions.cs | 77 + .../ExecutionTimeAssertions.cs.meta | 11 + .../Plugins/FluentAssertions/Shared/Xml.meta | 8 + .../Shared/Xml/XAttributeAssertions.cs | 124 ++ .../Shared/Xml/XAttributeAssertions.cs.meta | 11 + .../Shared/Xml/XDocumentAssertions.cs | 338 ++++ .../Shared/Xml/XDocumentAssertions.cs.meta | 11 + .../Shared/Xml/XElementAssertions.cs | 334 ++++ .../Shared/Xml/XElementAssertions.cs.meta | 11 + .../Shared/Xml/XmlReaderValidator.cs | 243 +++ .../Shared/Xml/XmlReaderValidator.cs.meta | 11 + Assets/Plugins/FluentAssertions/VERSION.md | 1 + .../Plugins/FluentAssertions/VERSION.md.meta | 7 + .../DrawerAttributes/EnumFlagAttribute.cs | 10 + .../EnumFlagAttribute.cs.meta | 3 + .../CodeGeneration/PropertyDrawerDatabase.cs | 25 +- .../Scripts/Editor/Editors/InspectorEditor.cs | 7 +- .../ShowNonSerializedFieldFieldDrawer.cs | 2 +- .../ShowNativePropertyNativePropertyDrawer.cs | 2 +- .../PropertyDrawers/EnumFlagPropertyDrawer.cs | 20 + .../EnumFlagPropertyDrawer.cs.meta | 3 + .../Editor/PropertyDrawers/PropertyDrawer.cs | 13 +- .../ReorderableListPropertyDrawer.cs | 11 +- .../RequiredPropertyValidator.cs | 15 +- .../Scenes/TutorialAssembly.unity | 8 +- .../Scripts/UI/Trees/TreePath.cs | 2 +- Assets/Plugins/UnityTutorialSystem/Tests.meta | 8 + .../UnityTutorialSystem/Tests/Tests.asmdef | 19 + .../Tests/Tests.asmdef.meta | 7 + .../UnityTutorialSystem/Tests/TreePathTest.cs | 29 + .../Tests/TreePathTest.cs.meta | 11 + Packages/manifest.json | 5 - README.md | 2 + unity-tutorial-system-demo.gif | Bin 0 -> 3973070 bytes 514 files changed, 27785 insertions(+), 40 deletions(-) create mode 100644 Assets/Plugins/FluentAssertions.meta create mode 100644 Assets/Plugins/FluentAssertions/Core.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/AndConstraint.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/AndConstraint.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/AndWhichConstraint.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/AndWhichConstraint.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/AssertionOptions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/AssertionOptions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Collections.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Collections/CollectionAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Collections/CollectionAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Collections/GenericCollectionAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Collections/GenericCollectionAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Collections/GenericDictionaryAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Collections/GenericDictionaryAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Collections/NonGenericCollectionAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Collections/NonGenericCollectionAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Collections/SelfReferencingCollectionAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Collections/SelfReferencingCollectionAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Collections/SortOrder.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Collections/SortOrder.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Collections/StringCollectionAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Collections/StringCollectionAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Collections/WhichValueConstraint.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Collections/WhichValueConstraint.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/CSharpAccessModifier.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/CSharpAccessModifier.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/CSharpAccessModifierExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/CSharpAccessModifierExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/Configuration.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/Configuration.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/DateTimeExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/DateTimeExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/EnumerableExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/EnumerableExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/ExpressionExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/ExpressionExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/IAdapterResolver.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/IAdapterResolver.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/IConfigurationStore.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/IConfigurationStore.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/IProvidePlatformServices.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/IProvidePlatformServices.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/IReflector.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/IReflector.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/MethodInfoExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/MethodInfoExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/NullConfigurationStore.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/NullConfigurationStore.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/NullReflector.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/NullReflector.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/ObjectExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/ObjectExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/PlatformAdapter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/PlatformAdapter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/ProbingAdapterResolver.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/ProbingAdapterResolver.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/PropertyInfoExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/PropertyInfoExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/Services.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/Services.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/StringExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/StringExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/TypeExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/TypeExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/ValueFormatterDetectionMode.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Common/ValueFormatterDetectionMode.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Disposable.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Disposable.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionContext.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionContext.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionResultSet.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionResultSet.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRule.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRule.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRuleEquivalencyStep.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRuleEquivalencyStep.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRuleEquivalencyStepAdapter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRuleEquivalencyStepAdapter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberAssertionOptionsDecorator.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberAssertionOptionsDecorator.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberAssertionRuleDecorator.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberAssertionRuleDecorator.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberSubjectInfo.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberSubjectInfo.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/CyclicReferenceHandling.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/CyclicReferenceHandling.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/DictionaryEquivalencyStep.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/DictionaryEquivalencyStep.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/EnumEqualityStep.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/EnumEqualityStep.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/EnumEquivalencyHandling.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/EnumEquivalencyHandling.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/EnumerableEquivalencyStep.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/EnumerableEquivalencyStep.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/EnumerableEquivalencyValidator.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/EnumerableEquivalencyValidator.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyAssertionOptions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyAssertionOptions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyAssertionOptionsExtentions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyAssertionOptionsExtentions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidationContext.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidationContext.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidationContextExtentions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidationContextExtentions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidator.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidator.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/FieldSelectedMemberInfo.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/FieldSelectedMemberInfo.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/GenericDictionaryEquivalencyStep.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/GenericDictionaryEquivalencyStep.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/GenericEnumerableEquivalencyStep.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/GenericEnumerableEquivalencyStep.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/IAssertionContext.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/IAssertionContext.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/IAssertionRule.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/IAssertionRule.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyAssertionOptions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyAssertionOptions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyStep.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyStep.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyValidationContext.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyValidationContext.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyValidator.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyValidator.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/IMemberMatchingRule.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/IMemberMatchingRule.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/IMemberSelectionRule.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/IMemberSelectionRule.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/IOrderingRule.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/IOrderingRule.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/ISubjectInfo.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/ISubjectInfo.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Matching.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/CollectionMemberMatchingRuleDecorator.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/CollectionMemberMatchingRuleDecorator.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/MustMatchByNameRule.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/MustMatchByNameRule.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/TryMatchByNameRule.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/TryMatchByNameRule.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/MemberInfoSelectedMemberInfo.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/MemberInfoSelectedMemberInfo.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/MultiDimensionalArrayEquivalencyStep.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/MultiDimensionalArrayEquivalencyStep.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/ObjectReference.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/ObjectReference.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/ObjectTracker.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/ObjectTracker.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/OrderStrictness.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/OrderStrictness.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/ByteArrayOrderingRule.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/ByteArrayOrderingRule.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/CollectionMemberOrderingRuleDecorator.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/CollectionMemberOrderingRuleDecorator.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/MatchAllOrderingRule.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/MatchAllOrderingRule.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/PathBasedOrderingRule.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/PathBasedOrderingRule.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/PredicateBasedOrderingRule.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/PredicateBasedOrderingRule.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/OrderingRuleCollection.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/OrderingRuleCollection.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/PropertySelectedMemberInfo.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/PropertySelectedMemberInfo.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/ReferenceEqualityEquivalencyStep.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/ReferenceEqualityEquivalencyStep.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/RunAllUserStepsEquivalencyStep.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/RunAllUserStepsEquivalencyStep.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/SelectedMemberInfo.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/SelectedMemberInfo.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/AllPublicFieldsSelectionRule.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/AllPublicFieldsSelectionRule.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/AllPublicPropertiesSelectionRule.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/AllPublicPropertiesSelectionRule.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/CollectionMemberSelectionRuleDecorator.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/CollectionMemberSelectionRuleDecorator.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/ExcludeMemberByPathSelectionRule.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/ExcludeMemberByPathSelectionRule.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/ExcludeMemberByPredicateSelectionRule.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/ExcludeMemberByPredicateSelectionRule.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/IncludeMemberByPathSelectionRule.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/IncludeMemberByPathSelectionRule.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/IncludeMemberByPredicateSelectionRule.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/IncludeMemberByPredicateSelectionRule.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/MemberPath.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/MemberPath.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/NestedSelectionContext.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/NestedSelectionContext.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/SelectMemberByPathSelectionRule.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/SelectMemberByPathSelectionRule.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/SelfReferenceEquivalencyAssertionOptions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/SelfReferenceEquivalencyAssertionOptions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/SimpleEqualityEquivalencyStep.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/SimpleEqualityEquivalencyStep.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/StringEqualityEquivalencyStep.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/StringEqualityEquivalencyStep.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/StructuralEqualityEquivalencyStep.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/StructuralEqualityEquivalencyStep.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/SubjectInfoExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/SubjectInfoExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/TryConversionEquivalencyStep.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/TryConversionEquivalencyStep.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/ValueTypeEquivalencyStep.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Equivalency/ValueTypeEquivalencyStep.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/EquivalencyStepCollection.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/EquivalencyStepCollection.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Events.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Events/EventMonitor.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Events/EventMonitor.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Events/EventRecorder.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Events/EventRecorder.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Events/EventRecordersMap.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Events/EventRecordersMap.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Events/IEventRecorder.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Events/IEventRecorder.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Events/RecordedEvent.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Events/RecordedEvent.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/AssertionScope.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/AssertionScope.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/CollectingAssertionStrategy.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/CollectingAssertionStrategy.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/ContextDataItems.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/ContextDataItems.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/Continuation.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/Continuation.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/ContinuationOfGiven.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/ContinuationOfGiven.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/DefaultAssertionStrategy.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/DefaultAssertionStrategy.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/Execute.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/Execute.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/GivenSelector.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/GivenSelector.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/GivenSelectorExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/GivenSelectorExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/IAssertionStrategy.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/IAssertionStrategy.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/ICloneable2.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/ICloneable2.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/MessageBuilder.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/MessageBuilder.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/Reportability.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Execution/Reportability.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/FluentDateTimeExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/FluentDateTimeExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/AggregateExceptionValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/AggregateExceptionValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/AttributeBasedFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/AttributeBasedFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/ByteValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/ByteValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/DateTimeOffsetValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/DateTimeOffsetValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/DecimalValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/DecimalValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/DefaultValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/DefaultValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/DoubleValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/DoubleValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/EnumerableValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/EnumerableValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/ExceptionValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/ExceptionValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/ExpressionValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/ExpressionValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/Formatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/Formatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/GuidValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/GuidValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/IValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/IValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/Int16ValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/Int16ValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/Int32ValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/Int32ValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/Int64ValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/Int64ValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/NullValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/NullValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/PropertyInfoFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/PropertyInfoFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/SByteValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/SByteValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/SingleValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/SingleValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/StringValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/StringValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/TimeSpanValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/TimeSpanValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/UInt16ValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/UInt16ValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/UInt32ValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/UInt32ValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/UInt64ValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/UInt64ValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/ValueFormatterAttribute.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Formatting/ValueFormatterAttribute.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/InternalAssertionExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/InternalAssertionExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Numeric.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Numeric/ComparableTypeAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Numeric/ComparableTypeAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Numeric/NullableNumericAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Numeric/NullableNumericAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Numeric/NumericAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Numeric/NumericAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/NumericAssertionsExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/NumericAssertionsExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/BooleanAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/BooleanAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeOffsetAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeOffsetAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeOffsetRangeAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeOffsetRangeAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeRangeAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeRangeAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/GuidAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/GuidAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/NegatedStringStartValidator.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/NegatedStringStartValidator.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/NullableBooleanAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/NullableBooleanAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/NullableDateTimeAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/NullableDateTimeAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/NullableDateTimeOffsetAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/NullableDateTimeOffsetAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/NullableGuidAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/NullableGuidAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/NullableSimpleTimeSpanAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/NullableSimpleTimeSpanAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/ObjectAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/ObjectAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/ReferenceTypeAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/ReferenceTypeAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/SimpleTimeSpanAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/SimpleTimeSpanAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/StringAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/StringAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/StringEqualityValidator.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/StringEqualityValidator.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/StringStartValidator.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/StringStartValidator.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/StringValidator.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/StringValidator.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/StringWildcardMatchingValidator.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/StringWildcardMatchingValidator.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/TimeSpanCondition.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/TimeSpanCondition.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/TimeSpanPredicate.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Primitives/TimeSpanPredicate.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Specialized.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Specialized/ActionAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Specialized/ActionAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Specialized/AsyncFunctionAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Specialized/AsyncFunctionAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Specialized/ExceptionAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Specialized/ExceptionAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Specialized/IExtractExceptions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Specialized/IExtractExceptions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/TimeSpanConversionExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/TimeSpanConversionExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Tracing.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Tracing/ITraceWriter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Tracing/ITraceWriter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Tracing/StringBuilderTraceWriter.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Tracing/StringBuilderTraceWriter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/TypeEnumerableExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/TypeEnumerableExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/TypeExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/TypeExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Types.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/AllTypes.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/AllTypes.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/ConstructorInfoAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/ConstructorInfoAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/MemberInfoAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/MemberInfoAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/MethodBaseAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/MethodBaseAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/MethodInfoAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/MethodInfoAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/MethodInfoSelector.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/MethodInfoSelector.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/MethodInfoSelectorAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/MethodInfoSelectorAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoSelector.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoSelector.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoSelectorAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoSelectorAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/TypeAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/TypeAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/TypeSelector.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/TypeSelector.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/TypeSelectorAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Core/Types/TypeSelectorAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Core.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Core/ReflectionExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Core/ReflectionExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common/DefaultReflectionProvider.cs create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common/DefaultReflectionProvider.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common/ProvidePlatformServices.cs create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common/ProvidePlatformServices.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/GallioTestFramework.cs create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/GallioTestFramework.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSTestFramework.cs create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSTestFramework.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSTestFrameworkV2.cs create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSTestFrameworkV2.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSpecFramework.cs create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSpecFramework.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MbUnitTestFramework.cs create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MbUnitTestFramework.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/NUnitTestFramework.cs create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/NUnitTestFramework.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/TestFrameworkProvider.cs create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/TestFrameworkProvider.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/XUnitTestFramework.cs create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/XUnitTestFramework.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/ObjectAssertionsExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/ObjectAssertionsExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Properties.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Properties/AssemblyInfo.cs create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Properties/AssemblyInfo.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlAssertionExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlAssertionExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlElementAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlElementAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeAssertionsofTSubjectTAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeAssertionsofTSubjectTAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.asmdef create mode 100644 Assets/Plugins/FluentAssertions/FluentAssertions.asmdef.meta create mode 100644 Assets/Plugins/FluentAssertions/LICENSE create mode 100644 Assets/Plugins/FluentAssertions/LICENSE.meta create mode 100644 Assets/Plugins/FluentAssertions/README.md create mode 100644 Assets/Plugins/FluentAssertions/README.md.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/AssertionExtensions.Actions.cs create mode 100644 Assets/Plugins/FluentAssertions/Shared/AssertionExtensions.Actions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/AssertionExtensions.cs create mode 100644 Assets/Plugins/FluentAssertions/Shared/AssertionExtensions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/Execution.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/Execution/AssertionFailedException.cs create mode 100644 Assets/Plugins/FluentAssertions/Shared/Execution/AssertionFailedException.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/Execution/FallbackTestFramework.cs create mode 100644 Assets/Plugins/FluentAssertions/Shared/Execution/FallbackTestFramework.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/Execution/ITestFramework.cs create mode 100644 Assets/Plugins/FluentAssertions/Shared/Execution/ITestFramework.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/Execution/LateBoundTestFramework.cs create mode 100644 Assets/Plugins/FluentAssertions/Shared/Execution/LateBoundTestFramework.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/Formatting.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/Formatting/XAttributeValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Shared/Formatting/XAttributeValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/Formatting/XDocumentValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Shared/Formatting/XDocumentValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/Formatting/XElementValueFormatter.cs create mode 100644 Assets/Plugins/FluentAssertions/Shared/Formatting/XElementValueFormatter.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/SolutionInfo.cs create mode 100644 Assets/Plugins/FluentAssertions/Shared/SolutionInfo.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/Specialized.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/Specialized/AssemblyAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Shared/Specialized/AssemblyAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/Specialized/ExecutionTimeAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Shared/Specialized/ExecutionTimeAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/Xml.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/Xml/XAttributeAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Shared/Xml/XAttributeAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/Xml/XDocumentAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Shared/Xml/XDocumentAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/Xml/XElementAssertions.cs create mode 100644 Assets/Plugins/FluentAssertions/Shared/Xml/XElementAssertions.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/Shared/Xml/XmlReaderValidator.cs create mode 100644 Assets/Plugins/FluentAssertions/Shared/Xml/XmlReaderValidator.cs.meta create mode 100644 Assets/Plugins/FluentAssertions/VERSION.md create mode 100644 Assets/Plugins/FluentAssertions/VERSION.md.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnumFlagAttribute.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnumFlagAttribute.cs.meta create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnumFlagPropertyDrawer.cs create mode 100644 Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnumFlagPropertyDrawer.cs.meta create mode 100644 Assets/Plugins/UnityTutorialSystem/Tests.meta create mode 100644 Assets/Plugins/UnityTutorialSystem/Tests/Tests.asmdef create mode 100644 Assets/Plugins/UnityTutorialSystem/Tests/Tests.asmdef.meta create mode 100644 Assets/Plugins/UnityTutorialSystem/Tests/TreePathTest.cs create mode 100644 Assets/Plugins/UnityTutorialSystem/Tests/TreePathTest.cs.meta create mode 100644 unity-tutorial-system-demo.gif diff --git a/Assets/Plugins/FluentAssertions.meta b/Assets/Plugins/FluentAssertions.meta new file mode 100644 index 0000000..f323f7c --- /dev/null +++ b/Assets/Plugins/FluentAssertions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ca263302667a4bf4cb87fe0aa1a77aec +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core.meta b/Assets/Plugins/FluentAssertions/Core.meta new file mode 100644 index 0000000..53d4248 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b221e90a28450b04f8aec26231827895 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/AndConstraint.cs b/Assets/Plugins/FluentAssertions/Core/AndConstraint.cs new file mode 100644 index 0000000..06b21cc --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/AndConstraint.cs @@ -0,0 +1,23 @@ +using System.Diagnostics; + +namespace FluentAssertions +{ + [DebuggerNonUserCode] + public class AndConstraint + { + private readonly T parentConstraint; + + /// + /// Initializes a new instance of the class. + /// + public AndConstraint(T parentConstraint) + { + this.parentConstraint = parentConstraint; + } + + public T And + { + get { return parentConstraint; } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/AndConstraint.cs.meta b/Assets/Plugins/FluentAssertions/Core/AndConstraint.cs.meta new file mode 100644 index 0000000..aa99ceb --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/AndConstraint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8e6a47299cda6a04f886f40d493bb813 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/AndWhichConstraint.cs b/Assets/Plugins/FluentAssertions/Core/AndWhichConstraint.cs new file mode 100644 index 0000000..1fb2093 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/AndWhichConstraint.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +using FluentAssertions.Common; +using FluentAssertions.Formatting; + +namespace FluentAssertions +{ + /// + /// Constraint which can be returned from an assertion which matches a condition and which will allow + /// further matches to be performed on the matched condition as well as the parent constraint. + /// + /// The type of the original constraint that was matched + /// The type of the matched object which the parent constraint matched + public class AndWhichConstraint : AndConstraint + { + private readonly Lazy matchedConstraint; + + public AndWhichConstraint(TParentConstraint parentConstraint, TMatchedElement matchedConstraint) + : base(parentConstraint) + { + this.matchedConstraint = + new Lazy(() => matchedConstraint); + } + + public AndWhichConstraint(TParentConstraint parentConstraint, IEnumerable matchedConstraint) + : base(parentConstraint) + { + this.matchedConstraint = + new Lazy( + () => SingleOrDefault(matchedConstraint)); + } + + private static TMatchedElement SingleOrDefault( + IEnumerable matchedConstraint) + { + TMatchedElement[] matchedElements = matchedConstraint.ToArray(); + + if (matchedElements.Count() > 1) + { + string foundObjects = string.Join(Environment.NewLine, + matchedElements.Select( + ele => "\t" + Formatter.ToString(ele))); + + string message = string.Format( + "More than one object found. FluentAssertions cannot determine which object is meant. Found objects:{0}{1}", + Environment.NewLine, + foundObjects); + + Services.ThrowException(message); + } + + return matchedElements.Single(); + } + + /// + /// Returns the single result of a prior assertion that is used to select a nested or collection item. + /// + public TMatchedElement Which + { + get { return matchedConstraint.Value; } + } + + /// + /// Returns the single result of a prior assertion that is used to select a nested or collection item. + /// + /// + /// Just a convenience property that returns the same value as . + /// + public TMatchedElement Subject + { + get { return Which; } + } + } +} + diff --git a/Assets/Plugins/FluentAssertions/Core/AndWhichConstraint.cs.meta b/Assets/Plugins/FluentAssertions/Core/AndWhichConstraint.cs.meta new file mode 100644 index 0000000..98a177f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/AndWhichConstraint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c8307fb9bef0c0a4d865164b701628c3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/AssertionOptions.cs b/Assets/Plugins/FluentAssertions/Core/AssertionOptions.cs new file mode 100644 index 0000000..481e32a --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/AssertionOptions.cs @@ -0,0 +1,58 @@ +#region + +using System; +using FluentAssertions.Common; +using FluentAssertions.Equivalency; + +#endregion + +namespace FluentAssertions +{ + /// + /// Holds any global options that control the behavior of FluentAssertions. + /// + public static class AssertionOptions + { + private static EquivalencyAssertionOptions defaults = new EquivalencyAssertionOptions(); + + static AssertionOptions() + { + EquivalencySteps = new EquivalencyStepCollection(); + } + + public static EquivalencyAssertionOptions CloneDefaults() + { + return new EquivalencyAssertionOptions(defaults); + } + + /// + /// Defines a predicate with which the determines if it should process + /// an object's properties or not. + /// + /// + /// Returns true if the object should be treated as a value type and its + /// must be used during a structural equivalency check. + /// + public static Func IsValueType = type => + (type.Namespace == typeof (int).Namespace) && + !type.IsSameOrInherits(typeof(Exception)); + + /// + /// Allows configuring the defaults used during a structural equivalency assertion. + /// + /// + /// An action that is used to configure the defaults. + /// + public static void AssertEquivalencyUsing( + Func defaultsConfigurer) + { + defaults = defaultsConfigurer(defaults); + } + + /// + /// Represents a mutable collection of steps that are executed while asserting a (collection of) object(s) + /// is structurally equivalent to another (collection of) object(s). + /// + public static EquivalencyStepCollection EquivalencySteps { get; private set; } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/AssertionOptions.cs.meta b/Assets/Plugins/FluentAssertions/Core/AssertionOptions.cs.meta new file mode 100644 index 0000000..c442954 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/AssertionOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 673bfff1b81f6c6468c0957ecf933787 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Collections.meta b/Assets/Plugins/FluentAssertions/Core/Collections.meta new file mode 100644 index 0000000..cb7d8f6 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Collections.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c5b22091f289dd74bbe255baa5f43351 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Collections/CollectionAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Collections/CollectionAssertions.cs new file mode 100644 index 0000000..c8e4165 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Collections/CollectionAssertions.cs @@ -0,0 +1,1373 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using FluentAssertions.Common; +using FluentAssertions.Execution; +using FluentAssertions.Primitives; + +namespace FluentAssertions.Collections +{ + /// + /// Contains a number of methods to assert that an is in the expected state. + /// + public abstract class CollectionAssertions : ReferenceTypeAssertions + where TAssertions : CollectionAssertions + where TSubject : IEnumerable + { + /// + /// Asserts that the collection does not contain any items. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeEmpty(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .WithExpectation("Expected {context:collection} to be empty{reason}, ") + .ForCondition(!ReferenceEquals(Subject, null)) + .FailWith("but found {0}.", Subject) + .Then + .Given(() => Subject.Cast()) + .ForCondition(collection => !collection.Any()) + .FailWith("but found {0}.", collection => collection); + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the collection contains at least 1 item. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeEmpty(string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} not to be empty{reason}, but found {0}.", Subject); + } + + IEnumerable enumerable = Subject.Cast(); + + Execute.Assertion + .ForCondition(enumerable.Any()) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} not to be empty{reason}."); + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the collection is null or does not contain any items. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeNullOrEmpty(string because = "", params object[] becauseArgs) + { + var nullOrEmpty = ReferenceEquals(Subject, null) || !Subject.Cast().Any(); + + Execute.Assertion.ForCondition(nullOrEmpty) + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected {context:collection} to be null or empty{reason}, but found {0}.", + Subject); + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the collection is not null and contains at least 1 item. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeNullOrEmpty(string because = "", params object[] becauseArgs) + { + return NotBeNull(because, becauseArgs) + .And.NotBeEmpty(because, becauseArgs); + } + + /// + /// Asserts that the collection does not contain any duplicate items. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint OnlyHaveUniqueItems(string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to only have unique items{reason}, but found {0}.", Subject); + } + + IGrouping groupWithMultipleItems = Subject.Cast() + .GroupBy(o => o) + .FirstOrDefault(g => g.Count() > 1); + + if (groupWithMultipleItems != null) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to only have unique items{reason}, but item {0} is not unique.", + groupWithMultipleItems.Key); + } + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the collection does not contain any null items. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotContainNulls(string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} not to contain nulls{reason}, but collection is ."); + } + + object[] values = Subject.Cast().ToArray(); + for (int index = 0; index < values.Length; index++) + { + if (ReferenceEquals(values[index], null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} not to contain nulls{reason}, but found one at index {0}.", index); + } + } + + return new AndConstraint((TAssertions)this); + } + + /// + /// Expects the current collection to contain all the same elements in the same order as the collection identified by + /// . Elements are compared using their . + /// + /// A params array with the expected elements. + public AndConstraint Equal(params object[] elements) + { + return Equal(elements, String.Empty); + } + + /// + /// Expects the current collection to contain all the same elements in the same order as the collection identified by + /// . Elements are compared using their . + /// + /// An with the expected elements. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Equal(IEnumerable expected, string because = "", params object[] becauseArgs) + { + AssertSubjectEquality(expected, (s, e) => s.IsSameOrEqualTo(e), because, becauseArgs); + + return new AndConstraint((TAssertions)this); + } + + protected void AssertSubjectEquality(IEnumerable expectation, Func equalityComparison, + string because = "", params object[] becauseArgs) + { + + bool subjectIsNull = ReferenceEquals(Subject, null); + bool expectationIsNull = ReferenceEquals(expectation, null); + if (subjectIsNull && expectationIsNull) + { + return; + } + + if (expectation == null) + { + throw new ArgumentNullException("expectation", "Cannot compare collection with ."); + } + + TExpected[] expectedItems = expectation.Cast().ToArray(); + + AssertionScope assertion = Execute.Assertion.BecauseOf(because, becauseArgs); + if (subjectIsNull) + { + assertion.FailWith("Expected {context:collection} to be equal to {0}{reason}, but found .", expectedItems); + } + + assertion + .WithExpectation("Expected {context:collection} to be equal to {0}{reason}, ", expectedItems) + .Given(() => Subject.Cast().ToList().AsEnumerable()) + .AssertCollectionsHaveSameCount(expectedItems.Length) + .Then + .AssertCollectionsHaveSameItems(expectedItems, (a, e) => a.IndexOfFirstDifferenceWith(e, equalityComparison)); + } + + /// + /// Expects the current collection not to contain all the same elements in the same order as the collection identified by + /// . Elements are compared using their . + /// + /// An with the elements that are not expected. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotEqual(IEnumerable unexpected, string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected collections not to be equal{reason}, but found ."); + } + + if (unexpected == null) + { + throw new ArgumentNullException("unexpected", "Cannot compare collection with ."); + } + + List actualitems = Subject.Cast().ToList(); + + if (actualitems.SequenceEqual(unexpected.Cast())) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect collections {0} and {1} to be equal{reason}.", unexpected, actualitems); + } + + return new AndConstraint((TAssertions)this); + } + + /// + /// Expects the current collection to contain all elements of the collection identified by , + /// regardless of the order. Elements are compared using their . + /// + /// A params array with the expected elements. + public AndConstraint BeEquivalentTo(params object[] elements) + { + return BeEquivalentTo(elements, String.Empty); + } + + /// + /// Expects the current collection to contain all elements of the collection identified by , + /// regardless of the order. Elements are compared using their . + /// + /// An with the expected elements. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeEquivalentTo(IEnumerable expected, string because = "", params object[] becauseArgs) + { + if (expected == null) + { + throw new NullReferenceException("Cannot verify equivalence against a collection."); + } + + Execute.Assertion + .ForCondition(!ReferenceEquals(Subject, null)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to be equivalent to {0}{reason}, but found .", expected); + + List expectedItems = expected.Cast().ToList(); + List actualItems = Subject.Cast().ToList(); + + bool haveSameLength = Execute.Assertion + .ForCondition(actualItems.Count <= expectedItems.Count) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} {0} to be equivalent to {1}{reason}, but it contains too many items.", + actualItems, expectedItems); + + if (haveSameLength) + { + object[] missingItems = GetMissingItems(expectedItems, actualItems); + + Execute.Assertion + .ForCondition(missingItems.Length == 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} {0} to be equivalent to {1}{reason}, but it misses {2}.", + actualItems, expectedItems, missingItems); + } + return new AndConstraint((TAssertions)this); + } + + public AndConstraint BeEquivalentTo(IEnumerable expected, string because = "", params object[] becauseArgs) + { + if (expected == null) + { + throw new NullReferenceException("Cannot verify equivalence against a collection."); + } + + Execute.Assertion + .ForCondition(!ReferenceEquals(Subject, null)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to be equivalent to {0}{reason}, but found .", expected); + + List expectedItems = expected.ToList(); + List actualItems = Subject.Cast().ToList(); + + bool haveSameLength = Execute.Assertion + .ForCondition(actualItems.Count <= expectedItems.Count) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} {0} to be equivalent to {1}{reason}, but it contains too many items.", + actualItems, expectedItems); + + if (haveSameLength) + { + T[] missingItems = GetMissingItems(expectedItems, actualItems); + + Execute.Assertion + .ForCondition(missingItems.Length == 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} {0} to be equivalent to {1}{reason}, but it misses {2}.", + actualItems, expectedItems, missingItems); + } + return new AndConstraint((TAssertions)this); + } + + /// + /// Expects the current collection not to contain all elements of the collection identified by , + /// regardless of the order. Elements are compared using their . + /// + /// An with the unexpected elements. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeEquivalentTo(IEnumerable unexpected, string because = "", + params object[] becauseArgs) + { + if (unexpected == null) + { + throw new NullReferenceException("Cannot verify inequivalence against a collection."); + } + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} not to be equivalent{reason}, but found ."); + } + + IEnumerable actualItems = Subject.Cast(); + IEnumerable unexpectedItems = unexpected.Cast(); + + if (actualItems.Count() == unexpectedItems.Count()) + { + object[] missingItems = GetMissingItems(unexpectedItems, actualItems); + + Execute.Assertion + .ForCondition(missingItems.Length > 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} {0} not be equivalent with collection {1}{reason}.", Subject, + unexpected); + } + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the current collection only contains items that are assignable to the type . + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint ContainItemsAssignableTo(string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to contain element assignable to type {0}{reason}, but found .", + typeof(T)); + } + + int index = 0; + foreach (object item in Subject) + { + if (!(item is T)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected {context:collection} to contain only items of type {0}{reason}, but item {1} at index {2} is of type {3}.", + typeof(T), item, index, item.GetType()); + } + + ++index; + } + + return new AndConstraint((TAssertions)this); + } + + private static T[] GetMissingItems(IEnumerable expectedItems, IEnumerable actualItems) + { + List missingItems = new List(); + List subject = actualItems.ToList(); + + while (expectedItems.Any()) + { + T expectation = expectedItems.First(); + if (subject.Contains(expectation)) + { + subject.Remove(expectation); + } + else + { + missingItems.Add(expectation); + } + + expectedItems = expectedItems.Skip(1).ToArray(); + } + + return missingItems.ToArray(); + } + + /// + /// Expects the current collection to contain the specified elements in any order. Elements are compared + /// using their implementation. + /// + /// An with the expected elements. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Contain(IEnumerable expected, string because = "", params object[] becauseArgs) + { + if (expected == null) + { + throw new NullReferenceException("Cannot verify containment against a collection"); + } + + IEnumerable expectedObjects = expected.Cast().ToArray(); + if (!expectedObjects.Any()) + { + throw new ArgumentException("Cannot verify containment against an empty collection"); + } + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to contain {0}{reason}, but found .", expected); + } + + if (expected is string) + { + if (!Subject.Cast().Contains(expected)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} {0} to contain {1}{reason}.", Subject, expected); + } + } + else + { + IEnumerable missingItems = expectedObjects.Except(Subject.Cast()); + if (missingItems.Any()) + { + if (expectedObjects.Count() > 1) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} {0} to contain {1}{reason}, but could not find {2}.", Subject, + expected, missingItems); + } + else + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} {0} to contain {1}{reason}.", Subject, + expected.Cast().First()); + } + } + } + + return new AndConstraint((TAssertions)this); + } + + /// + /// Expects the current collection to contain the specified elements in the exact same order, not necessarily consecutive. + /// using their implementation. + /// + /// An with the expected elements. + public AndConstraint ContainInOrder(params object[] expected) + { + return ContainInOrder(expected, ""); + } + + /// + /// Expects the current collection to contain the specified elements in the exact same order, not necessarily consecutive. + /// + /// + /// Elements are compared using their implementation. + /// + /// An with the expected elements. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint ContainInOrder(IEnumerable expected, string because = "", + params object[] becauseArgs) + { + if (expected == null) + { + throw new NullReferenceException("Cannot verify ordered containment against a collection."); + } + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to contain {0} in order{reason}, but found .", expected); + } + + object[] expectedItems = expected.Cast().ToArray(); + object[] actualItems = Subject.Cast().ToArray(); + + for (int index = 0; index < expectedItems.Length; index++) + { + object expectedItem = expectedItems[index]; + actualItems = actualItems.SkipWhile(actualItem => !actualItem.IsSameOrEqualTo(expectedItem)).ToArray(); + if (actualItems.Any()) + { + actualItems = actualItems.Skip(1).ToArray(); + } + else + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected {context:collection} {0} to contain items {1} in order{reason}, but {2} (index {3}) did not appear (in the right order).", + Subject, expected, expectedItem, index); + } + } + + return new AndConstraint((TAssertions)this); + } + + /// + /// Expects the current collection to have all elements in ascending order. Elements are compared + /// using their implementation. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeInAscendingOrder(string because = "", params object[] becauseArgs) + { + return BeInAscendingOrder(Comparer.Default, because, becauseArgs); + } + + /// + /// Expects the current collection to have all elements in ascending order. Elements are compared + /// using the given implementation. + /// + /// + /// The object that should be used to determine the expected ordering. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeInAscendingOrder(IComparer comparer, string because = "", params object[] becauseArgs) + { + return BeInOrder(comparer, SortOrder.Ascending, because, becauseArgs); + } + + /// + /// Expects the current collection to have all elements in descending order. Elements are compared + /// using their implementation. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeInDescendingOrder(string because = "", params object[] becauseArgs) + { + return BeInDescendingOrder(Comparer.Default, because, becauseArgs); + } + + /// + /// Expects the current collection to have all elements in descending order. Elements are compared + /// using the given implementation. + /// + /// + /// The object that should be used to determine the expected ordering. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeInDescendingOrder(IComparer comparer, string because = "", params object[] becauseArgs) + { + return BeInOrder(comparer, SortOrder.Descending, because, becauseArgs); + } + + /// + /// Expects the current collection to have all elements in the specified . + /// Elements are compared using their implementation. + /// + private AndConstraint BeInOrder( + IComparer comparer, SortOrder expectedOrder, string because = "", params object[] becauseArgs) + { + string sortOrder = (expectedOrder == SortOrder.Ascending) ? "ascending" : "descending"; + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to contain items in " + sortOrder + " order{reason}, but found {1}.", + Subject); + } + + object[] actualItems = Subject.Cast().ToArray(); + + object[] orderedItems = (expectedOrder == SortOrder.Ascending) + ? actualItems.OrderBy(item => item, comparer).ToArray() + : actualItems.OrderByDescending(item => item, comparer).ToArray(); + + for (int index = 0; index < orderedItems.Length; index++) + { + Execute.Assertion + .ForCondition(actualItems[index].IsSameOrEqualTo(orderedItems[index])) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to contain items in " + sortOrder + + " order{reason}, but found {0} where item at index {1} is in wrong order.", + Subject, index); + } + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts the current collection does not have all elements in ascending order. Elements are compared + /// using their implementation. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeAscendingInOrder(string because = "", params object[] becauseArgs) + { + return NotBeAscendingInOrder(Comparer.Default, because, becauseArgs); + } + + /// + /// Asserts the current collection does not have all elements in ascending order. Elements are compared + /// using their implementation. + /// + /// + /// The object that should be used to determine the expected ordering. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeAscendingInOrder(IComparer comparer, string because = "", params object[] becauseArgs) + { + return NotBeInOrder(comparer, SortOrder.Ascending, because, becauseArgs); + } + + /// + /// Asserts the current collection does not have all elements in descending order. Elements are compared + /// using their implementation. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeDescendingInOrder(string because = "", params object[] becauseArgs) + { + return NotBeDescendingInOrder(Comparer.Default, because, becauseArgs); + } + + /// + /// Asserts the current collection does not have all elements in descending order. Elements are compared + /// using their implementation. + /// + /// + /// The object that should be used to determine the expected ordering. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeDescendingInOrder(IComparer comparer, string because = "", params object[] becauseArgs) + { + return NotBeInOrder(comparer, SortOrder.Descending, because, becauseArgs); + } + + /// + /// Asserts the current collection does not have all elements in ascending order. Elements are compared + /// using their implementation. + /// + private AndConstraint NotBeInOrder(IComparer comparer, SortOrder order, string because = "", params object[] becauseArgs) + { + string sortOrder = (order == SortOrder.Ascending) ? "ascending" : "descending"; + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith( + "Did not expect {context:collection} to contain items in " + sortOrder + " order{reason}, but found {1}.", + Subject); + } + + object[] orderedItems = (order == SortOrder.Ascending) + ? Subject.Cast().OrderBy(item => item, comparer).ToArray() + : Subject.Cast().OrderByDescending(item => item, comparer).ToArray(); + + object[] actualItems = Subject.Cast().ToArray(); + + bool itemsAreUnordered = actualItems + .Where((actualItem, index) => !actualItem.IsSameOrEqualTo(orderedItems[index])) + .Any(); + + if (!itemsAreUnordered) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith( + "Did not expect {context:collection} to contain items in " + sortOrder + " order{reason}, but found {0}.", + Subject); + } + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the collection is a subset of the . + /// + /// An with the expected superset. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeSubsetOf(IEnumerable expectedSuperset, string because = "", + params object[] becauseArgs) + { + if (expectedSuperset == null) + { + throw new NullReferenceException("Cannot verify a subset against a collection."); + } + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to be a subset of {0}{reason}, but found {1}.", expectedSuperset, + Subject); + } + + IEnumerable expectedItems = expectedSuperset.Cast(); + IEnumerable actualItems = Subject.Cast(); + + IEnumerable excessItems = actualItems.Except(expectedItems); + + if (excessItems.Any()) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected {context:collection} to be a subset of {0}{reason}, but items {1} are not part of the superset.", + expectedSuperset, excessItems); + } + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the collection is not a subset of the . + /// + /// An with the unexpected superset. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeSubsetOf(IEnumerable unexpectedSuperset, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!ReferenceEquals(Subject, null)) + .BecauseOf(because, becauseArgs) + .FailWith("Cannot assert a collection against a subset."); + + IEnumerable expectedItems = unexpectedSuperset.Cast(); + object[] actualItems = Subject.Cast().ToArray(); + + if (actualItems.Intersect(expectedItems).Count() == actualItems.Count()) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect {context:collection} {0} to be a subset of {1}{reason}.", actualItems, expectedItems); + } + + return new AndConstraint((TAssertions)this); + } + + /// + /// Assert that the current collection has the same number of elements as . + /// + /// The other collection with the same expected number of elements + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveSameCount(IEnumerable otherCollection, string because = "", + params object[] becauseArgs) + { + if (otherCollection == null) + { + throw new NullReferenceException("Cannot verify count against a collection."); + } + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to have the same count as {0}{reason}, but found {1}.", + otherCollection, + Subject); + } + + IEnumerable enumerable = Subject.Cast(); + + int actualCount = enumerable.Count(); + int expectedCount = otherCollection.Cast().Count(); + + Execute.Assertion + .ForCondition(actualCount == expectedCount) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to have {0} item(s){reason}, but found {1}.", expectedCount, actualCount); + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the current collection has the supplied at the + /// supplied . + /// + /// The index where the element is expected + /// The expected element + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndWhichConstraint HaveElementAt(int index, object element, string because = "", + params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to have element at index {0}{reason}, but found {1}.", index, Subject); + } + + IEnumerable enumerable = Subject.Cast(); + + object actual = null; + if (index < enumerable.Count()) + { + actual = Subject.Cast().ElementAt(index); + + Execute.Assertion + .ForCondition(actual.IsSameOrEqualTo(element)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {0} at index {1}{reason}, but found {2}.", element, index, actual); + } + else + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {0} at index {1}{reason}, but found no element.", element, index); + } + + return new AndWhichConstraint((TAssertions)this, actual); + } + + /// + /// Asserts that the current collection does not contain the supplied items. Elements are compared + /// using their implementation. + /// + /// An with the unexpected elements. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotContain(IEnumerable unexpected, string because = "", params object[] becauseArgs) + { + if (unexpected == null) + { + throw new NullReferenceException("Cannot verify non-containment against a collection"); + } + + IEnumerable unexpectedObjects = unexpected.Cast().ToArray(); + if (!unexpectedObjects.Any()) + { + throw new ArgumentException("Cannot verify non-containment against an empty collection"); + } + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to not contain {0}{reason}, but found .", unexpected); + } + + if (unexpected is string) + { + if (Subject.Cast().Contains(unexpected)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} {0} to not contain {1}{reason}.", Subject, unexpected); + } + } + else + { + IEnumerable foundItems = unexpectedObjects.Intersect(Subject.Cast()); + if (foundItems.Any()) + { + if (unexpectedObjects.Count() > 1) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} {0} to not contain {1}{reason}, but found {2}.", Subject, + unexpected, foundItems); + } + else + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} {0} to not contain element {1}{reason}.", Subject, + unexpectedObjects.First()); + } + } + } + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the collection shares one or more items with the specified . + /// + /// The with the expected shared items. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint IntersectWith(IEnumerable otherCollection, string because = "", + params object[] becauseArgs) + { + if (otherCollection == null) + { + throw new NullReferenceException("Cannot verify intersection against a collection."); + } + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to intersect with {0}{reason}, but found {1}.", otherCollection, + Subject); + } + + IEnumerable otherItems = otherCollection.Cast(); + IEnumerable sharedItems = Subject.Cast().Intersect(otherItems); + + if (!sharedItems.Any()) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected {context:collection} to intersect with {0}{reason}, but {1} does not contain any shared items.", + otherCollection, Subject); + } + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the collection does not share any items with the specified . + /// + /// The to compare to. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotIntersectWith(IEnumerable otherCollection, string because = "", + params object[] becauseArgs) + { + if (otherCollection == null) + { + throw new NullReferenceException("Cannot verify intersection against a collection."); + } + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect {context:collection} to intersect with {0}{reason}, but found {1}.", otherCollection, + Subject); + } + + IEnumerable otherItems = otherCollection.Cast(); + IEnumerable sharedItems = Subject.Cast().Intersect(otherItems); + + if (sharedItems.Any()) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith( + "Did not expect {context:collection} to intersect with {0}{reason}, but found the following shared items {1}.", + otherCollection, sharedItems); + } + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the collection starts with the specified . + /// + /// + /// The element that is expected to appear at the start of the collection. The object's + /// is used to compare the element. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint StartWith(object element, string because = "", params object[] becauseArgs) + { + AssertCollectionStartsWith(Subject?.Cast(), new[] { element }, ObjectExtensions.IsSameOrEqualTo, because, becauseArgs); + return new AndConstraint((TAssertions) this); + } + + protected void AssertCollectionStartsWith(IEnumerable actualItems, TExpected[] expected, Func equalityComparison, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .WithExpectation("Expected {context:collection} to start with {0}{reason}, ", expected) + .Given(() => actualItems) + .AssertCollectionIsNotNullOrEmpty(expected.Length) + .Then + .AssertCollectionHasEnoughItems(expected.Length) + .Then + .AssertCollectionsHaveSameItems(expected, (a, e) => a.Take(e.Length).IndexOfFirstDifferenceWith(e, equalityComparison)); + } + + /// + /// Asserts that the collection ends with the specified . + /// + /// + /// The element that is expected to appear at the end of the collection. The object's + /// is used to compare the element. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint EndWith(object element, string because = "", params object[] becauseArgs) + { + AssertCollectionEndsWith(Subject?.Cast(), new[] { element }, ObjectExtensions.IsSameOrEqualTo, because, becauseArgs); + return new AndConstraint((TAssertions) this); + } + + protected void AssertCollectionEndsWith(IEnumerable actual, TExpected[] expected, Func equalityComparison, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .WithExpectation("Expected {context:collection} to end with {0}{reason}, ", expected) + .Given(() => actual) + .AssertCollectionIsNotNullOrEmpty(expected.Length) + .Then + .AssertCollectionHasEnoughItems(expected.Length) + .Then + .AssertCollectionsHaveSameItems(expected, (a, e) => + { + int firstIndexToCompare = a.Length - e.Length; + int index = a.Skip(firstIndexToCompare).IndexOfFirstDifferenceWith(e, equalityComparison); + return index >= 0 ? index + firstIndexToCompare : index; + }); + } + + /// + /// Asserts that the element directly precedes the . + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveElementPreceding(object successor, object expectation, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .WithExpectation("Expected {context:collection} to have {0} precede {1}{reason}, ", expectation, successor) + .Given(() => Subject.Cast()) + .ForCondition(subject => subject.Any()) + .FailWith("but the collection is empty.") + .Then + .ForCondition(subject => HasPredecessor(successor, subject)) + .FailWith("but found nothing.") + .Then + .Given(subject => PredecessorOf(successor, subject)) + .ForCondition(predecessor => predecessor.IsSameOrEqualTo(expectation)) + .FailWith("but found {0}.", predecessor => predecessor); + + return new AndConstraint((TAssertions)this); + } + + private bool HasPredecessor(object successor, IEnumerable subject) + { + return !ReferenceEquals(subject.First(), successor); + } + + private object PredecessorOf(object succesor, IEnumerable subject) + { + object[] collection = subject.ToArray(); + int index = Array.IndexOf(collection, succesor); + return (index > 0) ? collection[index - 1] : null; + } + + /// + /// Asserts that the element directly succeeds the . + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveElementSucceeding(object predecessor, object expectation, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .WithExpectation("Expected {context:collection} to have {0} succeed {1}{reason}, ", expectation, predecessor) + .Given(() => Subject.Cast()) + .ForCondition(subject => subject.Any()) + .FailWith("but the collection is empty.") + .Then + .ForCondition(subject => HasSuccessor(predecessor, subject)) + .FailWith("but found nothing.") + .Then + .Given(subject => SuccessorOf(predecessor, subject)) + .ForCondition(successor => successor.IsSameOrEqualTo(expectation)) + .FailWith("but found {0}.", successor => successor); + + return new AndConstraint((TAssertions)this); + } + + private bool HasSuccessor(object predecessor, IEnumerable subject) + { + return !ReferenceEquals(subject.Last(), predecessor); + } + + private object SuccessorOf(object predecessor, IEnumerable subject) + { + object[] collection = subject.ToArray(); + int index = Array.IndexOf(collection, predecessor); + return (index < (collection.Length - 1)) ? collection[index + 1] : null; + } + + /// + /// Asserts that all items in the collection are of the specified type + /// + /// The expected type of the objects + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint AllBeAssignableTo(string because = "", params object[] becauseArgs) + { + return AllBeAssignableTo(typeof(T), because, becauseArgs); + } + + /// + /// Asserts that all items in the collection are of the specified type + /// + /// The expected type of the objects + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint AllBeAssignableTo(Type expectedType, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .WithExpectation("Expected type to be {0}{reason}, ", expectedType.FullName) + .Given(() => Subject.Cast()) + .ForCondition(subject => subject.All(x => x != null)) + .FailWith("but found a null element.") + .Then + .ForCondition(subject => subject.All(x => expectedType.IsAssignableFrom(x.GetType()))) + .FailWith("but found {0}.", subject => $"[{string.Join(", ", subject.Select(x => x.GetType().FullName))}]"); + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that all items in the collection are of the exact specified type + /// + /// The expected type of the objects + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint AllBeOfType(string because = "", params object[] becauseArgs) + { + return AllBeOfType(typeof(T), because, becauseArgs); + } + + /// + /// Asserts that all items in the collection are of the exact specified type + /// + /// The expected type of the objects + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint AllBeOfType(Type expectedType, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .WithExpectation("Expected type to be {0}{reason}, ", expectedType.FullName) + .Given(() => Subject.Cast()) + .ForCondition(subject => subject.All(x => x != null)) + .FailWith("but found a null element.") + .Then + .ForCondition(subject => subject.All(x => expectedType == x.GetType())) + .FailWith("but found {0}.", subject => $"[{string.Join(", ", subject.Select(x => x.GetType().FullName))}]"); + + return new AndConstraint((TAssertions)this); + } + + /// + /// Returns the type of the subject the assertion applies on. + /// + protected override string Context + { + get { return "collection"; } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Collections/CollectionAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Collections/CollectionAssertions.cs.meta new file mode 100644 index 0000000..32d4dfc --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Collections/CollectionAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d72028d05593d846a250498229e282d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Collections/GenericCollectionAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Collections/GenericCollectionAssertions.cs new file mode 100644 index 0000000..6fb9ae9 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Collections/GenericCollectionAssertions.cs @@ -0,0 +1,193 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Linq.Expressions; + +using FluentAssertions.Common; +using FluentAssertions.Execution; + +namespace FluentAssertions.Collections +{ + [DebuggerNonUserCode] + public class GenericCollectionAssertions : + SelfReferencingCollectionAssertions> + { + public GenericCollectionAssertions(IEnumerable actualValue) : base(actualValue) + { + } + + /// + /// Asserts that a collection is ordered in ascending order according to the value of the specified + /// . + /// + /// + /// A lambda expression that references the property that should be used to determine the expected ordering. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeInAscendingOrder( + Expression> propertyExpression, string because = "", params object[] args) + { + return BeInAscendingOrder(propertyExpression, Comparer.Default, because, args); + } + + /// + /// Asserts that a collection is ordered in ascending order according to the value of the specified + /// implementation. + /// + /// + /// The object that should be used to determine the expected ordering. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeInAscendingOrder( + IComparer comparer, string because = "", params object[] args) + { + return BeInAscendingOrder(item => item, comparer, because, args); + } + + /// + /// Asserts that a collection is ordered in ascending order according to the value of the specified + /// and implementation. + /// + /// + /// A lambda expression that references the property that should be used to determine the expected ordering. + /// + /// + /// The object that should be used to determine the expected ordering. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeInAscendingOrder( + Expression> propertyExpression, IComparer comparer, string because = "", params object[] args) + { + return BeOrderedBy(propertyExpression, comparer, SortOrder.Ascending, because, args); + } + + /// + /// Asserts that a collection is ordered in descending order according to the value of the specified + /// . + /// + /// + /// A lambda expression that references the property that should be used to determine the expected ordering. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeInDescendingOrder( + Expression> propertyExpression, string because = "", params object[] args) + { + return BeInDescendingOrder(propertyExpression, Comparer.Default, because, args); + } + + /// + /// Asserts that a collection is ordered in descending order according to the value of the specified + /// implementation. + /// + /// + /// The object that should be used to determine the expected ordering. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeInDescendingOrder( + IComparer comparer, string because = "", params object[] args) + { + return BeInDescendingOrder(item => item, comparer, because, args); + } + + /// + /// Asserts that a collection is ordered in descending order according to the value of the specified + /// and implementation. + /// + /// + /// A lambda expression that references the property that should be used to determine the expected ordering. + /// + /// + /// The object that should be used to determine the expected ordering. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeInDescendingOrder( + Expression> propertyExpression, IComparer comparer, string because = "", params object[] args) + { + return BeOrderedBy(propertyExpression, comparer, SortOrder.Descending, because, args); + } + + private AndConstraint> BeOrderedBy( + Expression> propertyExpression, IComparer comparer, SortOrder direction, string because, object[] args) + { + if (comparer == null) + { + throw new ArgumentNullException("comparer", + "Cannot assert collection ordering without specifying a comparer."); + } + + if (IsValidProperty(propertyExpression, because, args)) + { + IList unordered = (Subject as IList) ?? Subject.ToList(); + + Func keySelector = propertyExpression.Compile(); + + IOrderedEnumerable expectation = (direction == SortOrder.Ascending) + ? unordered.OrderBy(keySelector, comparer) + : unordered.OrderByDescending(keySelector, comparer); + + var orderString = propertyExpression.GetMemberPath(); + orderString = orderString == "\"\"" ? string.Empty : " by " + orderString; + + Execute.Assertion + .ForCondition(unordered.SequenceEqual(expectation)) + .BecauseOf(because, args) + .FailWith("Expected collection {0} to be ordered{1}{reason} and result in {2}.", + Subject, orderString, expectation); + } + + return new AndConstraint>(this); + } + + private bool IsValidProperty(Expression> propertyExpression, string because, object[] args) + { + if (propertyExpression == null) + { + throw new ArgumentNullException("propertyExpression", + "Cannot assert collection ordering without specifying a property."); + } + + return Execute.Assertion + .ForCondition(!ReferenceEquals(Subject, null)) + .BecauseOf(because, args) + .FailWith("Expected collection to be ordered by {0}{reason} but found .", + propertyExpression.GetMemberPath()); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Collections/GenericCollectionAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Collections/GenericCollectionAssertions.cs.meta new file mode 100644 index 0000000..1f9a4d9 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Collections/GenericCollectionAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c74836f9ce5f05409b98f2fe139288e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Collections/GenericDictionaryAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Collections/GenericDictionaryAssertions.cs new file mode 100644 index 0000000..94d2654 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Collections/GenericDictionaryAssertions.cs @@ -0,0 +1,956 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Linq.Expressions; +using FluentAssertions.Common; +using FluentAssertions.Execution; +using FluentAssertions.Primitives; + +namespace FluentAssertions.Collections +{ + /// + /// Contains a number of methods to assert that an is in the expected state. + /// + [DebuggerNonUserCode] + public class GenericDictionaryAssertions : + ReferenceTypeAssertions, GenericDictionaryAssertions> + { + public GenericDictionaryAssertions(IDictionary dictionary) + { + if (dictionary != null) + { + Subject = dictionary; + } + } + + #region HaveCount + + /// + /// Asserts that the number of items in the dictionary matches the supplied amount. + /// + /// The expected number of items. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> HaveCount(int expected, + string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {0} item(s){reason}, but found {1}.", expected, Subject); + } + + int actualCount = Subject.Count; + + Execute.Assertion + .ForCondition((actualCount == expected)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} {0} to have {1} item(s){reason}, but found {2}.", Subject, expected, actualCount); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the number of items in the dictionary matches a condition stated by a predicate. + /// + /// The predicate which must be satisfied by the amount of items. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> HaveCount(Expression> countPredicate, + string because = "", params object[] becauseArgs) + { + if (countPredicate == null) + { + throw new NullReferenceException("Cannot compare dictionary count against a predicate."); + } + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to have {0} items{reason}, but found {1}.", countPredicate.Body, Subject); + } + + Func compiledPredicate = countPredicate.Compile(); + + int actualCount = Subject.Count; + + if (!compiledPredicate(actualCount)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} {0} to have a count {1}{reason}, but count is {2}.", + Subject, countPredicate.Body, actualCount); + } + + return new AndConstraint>(this); + } + + #endregion + + #region BeEmpty + + /// + /// Asserts that the dictionary does not contain any items. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeEmpty(string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to be empty{reason}, but found {0}.", Subject); + } + + Execute.Assertion + .ForCondition(!Subject.Any()) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to not have any items{reason}, but found {0}.", Subject.Count); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the dictionary contains at least 1 item. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> NotBeEmpty(string because = "", + params object [] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} not to be empty{reason}, but found {0}.", Subject); + } + + Execute.Assertion + .ForCondition(Subject.Any()) + .BecauseOf(because, becauseArgs) + .FailWith("Expected one or more items{reason}, but found none."); + + return new AndConstraint>(this); + } + + #endregion + + #region Equal + + /// + /// Asserts that the current dictionary contains all the same key-value pairs as the + /// specified dictionary. Keys and values are compared using + /// their implementation. + /// + /// The expected dictionary + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> Equal(IDictionary expected, + string because = "", params object [] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to be equal to {0}{reason}, but found {1}.", expected, Subject); + } + + if (expected == null) + { + throw new ArgumentNullException("expected", "Cannot compare dictionary with ."); + } + + IEnumerable missingKeys = expected.Keys.Except(Subject.Keys); + IEnumerable additionalKeys = Subject.Keys.Except(expected.Keys); + + if (missingKeys.Any()) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to be equal to {0}{reason}, but could not find keys {1}.", expected, + missingKeys); + } + + if (additionalKeys.Any()) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to be equal to {0}{reason}, but found additional keys {1}.", expected, + additionalKeys); + } + + foreach (var key in expected.Keys) + { + Execute.Assertion + .ForCondition(Subject[key].IsSameOrEqualTo(expected[key])) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to be equal to {0}{reason}, but {1} differs at key {2}.", + expected, Subject, key); + } + + return new AndConstraint>(this); + } + + /// + /// Asserts the current dictionary not to contain all the same key-value pairs as the + /// specified dictionary. Keys and values are compared using + /// their implementation. + /// + /// The unexpected dictionary + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> NotEqual(IDictionary unexpected, + string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected dictionaries not to be equal{reason}, but found {0}.", Subject); + } + + if (unexpected == null) + { + throw new ArgumentNullException("unexpected", "Cannot compare dictionary with ."); + } + + IEnumerable missingKeys = unexpected.Keys.Except(Subject.Keys); + IEnumerable additionalKeys = Subject.Keys.Except(unexpected.Keys); + + bool foundDifference = missingKeys.Any() + || additionalKeys.Any() + || (Subject.Keys.Any(key => !Subject[key].IsSameOrEqualTo(unexpected[key]))); + + if (!foundDifference) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect dictionaries {0} and {1} to be equal{reason}.", unexpected, Subject); + } + + return new AndConstraint>(this); + } + + #endregion + + #region ContainKey + + /// + /// Asserts that the dictionary contains the specified key. Keys are compared using + /// their implementation. + /// + /// The expected key + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public WhichValueConstraint ContainKey(TKey expected, + string because = "", params object [] becauseArgs) + { + AndConstraint> andConstraint = ContainKeys(new [] { expected }, because, becauseArgs); + + return new WhichValueConstraint(andConstraint.And, Subject[expected]); + } + + /// + /// Asserts that the dictionary contains all of the specified keys. Keys are compared using + /// their implementation. + /// + /// The expected keys + public AndConstraint> ContainKeys(params TKey[] expected) + { + return ContainKeys(expected, String.Empty); + } + + /// + /// Asserts that the dictionary contains all of the specified keys. Keys are compared using + /// their implementation. + /// + /// The expected keys + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> ContainKeys(IEnumerable expected, + string because = "", params object[] becauseArgs) + { + if (expected == null) + { + throw new NullReferenceException("Cannot verify key containment against a collection of keys"); + } + + TKey [] expectedKeys = expected.ToArray(); + + if (!expectedKeys.Any()) + { + throw new ArgumentException("Cannot verify key containment against an empty sequence"); + } + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to contain keys {0}{reason}, but found {1}.", expected, Subject); + } + + var missingKeys = expectedKeys.Where(key => !Subject.ContainsKey(key)); + + if (missingKeys.Any()) + { + if (expectedKeys.Count() > 1) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} {0} to contain key {1}{reason}, but could not find {2}.", Subject, + expected, missingKeys); + } + else + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} {0} to contain key {1}{reason}.", Subject, + expected.Cast().First()); + } + } + + return new AndConstraint>(this); + } + + #endregion + + #region NotContainKey + + /// + /// Asserts that the current dictionary does not contain the specified key. + /// Keys are compared using their implementation. + /// + /// The unexpected key + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> NotContainKey(TKey unexpected, + string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} not to contain key {0}{reason}, but found {1}.", unexpected, Subject); + } + + if (Subject.ContainsKey(unexpected)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("{context:Dictionary} {0} should not contain key {1}{reason}, but found it anyhow.", Subject, unexpected); + } + + return new AndConstraint>(this); + } + + /// + /// Asserts that the dictionary does not contain any of the specified keys. Keys are compared using + /// their implementation. + /// + /// The unexpected keys + public AndConstraint> NotContainKeys(params TKey[] unexpected) + { + return NotContainKeys(unexpected, String.Empty); + } + + /// + /// Asserts that the dictionary does not contain any of the specified keys. Keys are compared using + /// their implementation. + /// + /// The unexpected keys + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> NotContainKeys(IEnumerable unexpected, + string because = "", params object[] becauseArgs) + { + if (unexpected == null) + { + throw new NullReferenceException("Cannot verify key containment against a collection of keys"); + } + + TKey[] unexpectedKeys = unexpected.ToArray(); + + if (!unexpectedKeys.Any()) + { + throw new ArgumentException("Cannot verify key containment against an empty sequence"); + } + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to contain keys {0}{reason}, but found {1}.", unexpected, Subject); + } + + var foundKeys = unexpectedKeys.Intersect(Subject.Keys); + + if (foundKeys.Any()) + { + if (unexpectedKeys.Count() > 1) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} {0} to not contain key {1}{reason}, but found {2}.", Subject, + unexpected, foundKeys); + } + else + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} {0} to not contain key {1}{reason}.", Subject, + unexpected.Cast().First()); + } + } + + return new AndConstraint>(this); + } + + #endregion + + #region ContainValue + + /// + /// Asserts that the dictionary contains the specified value. Values are compared using + /// their implementation. + /// + /// The expected value + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndWhichConstraint, TValue> ContainValue(TValue expected, + string because = "", params object[] becauseArgs) + { + AndWhichConstraint, IEnumerable> innerConstraint = + ContainValuesAndWhich(new[] {expected}, because, becauseArgs); + + return + new AndWhichConstraint + , TValue>( + innerConstraint.And, innerConstraint.Which); + } + + /// + /// Asserts that the dictionary contains all of the specified values. Values are compared using + /// their implementation. + /// + /// The expected values + public AndConstraint> ContainValues(params TValue[] expected) + { + return ContainValues(expected, String.Empty); + } + + /// + /// Asserts that the dictionary contains all of the specified values. Values are compared using + /// their implementation. + /// + /// The expected values + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> ContainValues(IEnumerable expected, + string because = "", params object[] becauseArgs) + { + return ContainValuesAndWhich(expected, because, becauseArgs); + } + + private AndWhichConstraint, IEnumerable> ContainValuesAndWhich(IEnumerable expected, string because = "", + params object[] becauseArgs) + { + if (expected == null) + { + throw new NullReferenceException("Cannot verify value containment against a collection of values"); + } + + TValue [] expectedValues = expected.ToArray(); + + if (!expectedValues.Any()) + { + throw new ArgumentException("Cannot verify value containment with an empty sequence"); + } + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to contain value {0}{reason}, but found {1}.", expected, Subject); + } + + var missingValues = expectedValues.Except(Subject.Values); + if (missingValues.Any()) + { + if (expectedValues.Length > 1) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} {0} to contain value {1}{reason}, but could not find {2}.", Subject, + expected, missingValues); + } + else + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} {0} to contain value {1}{reason}.", Subject, + expected.Cast().First()); + } + } + + return + new AndWhichConstraint + , + IEnumerable>(this, + RepetitionPreservingIntersect(Subject.Values, expectedValues)); + } + + /// + /// Returns an enumerable consisting of all items in the first collection also appearing in the second. + /// + /// Enumerable.Intersect is not suitable because it drops any repeated elements. + private IEnumerable RepetitionPreservingIntersect( + IEnumerable first, IEnumerable second) + { + var secondSet = new HashSet(second); + return first.Where(secondSet.Contains); + } + + #endregion + + #region NotContainValue + + /// + /// Asserts that the current dictionary does not contain the specified value. + /// Values are compared using their implementation. + /// + /// The unexpected value + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> NotContainValue(TValue unexpected, + string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} not to contain value {0}{reason}, but found {1}.", unexpected, Subject); + } + + if (Subject.Values.Contains(unexpected)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("{context:Dictionary} {0} should not contain value {1}{reason}, but found it anyhow.", Subject, unexpected); + } + + return new AndConstraint>(this); + } + + /// + /// Asserts that the dictionary does not contain any of the specified values. Values are compared using + /// their implementation. + /// + /// The unexpected values + public AndConstraint> NotContainValues(params TValue[] unexpected) + { + return NotContainValues(unexpected, String.Empty); + } + + /// + /// Asserts that the dictionary does not contain any of the specified values. Values are compared using + /// their implementation. + /// + /// The unexpected values + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> NotContainValues(IEnumerable unexpected, + string because = "", params object[] becauseArgs) + { + if (unexpected == null) + { + throw new NullReferenceException("Cannot verify value containment against a collection of values"); + } + + var unexpectedValues = unexpected.ToArray(); + + if (!unexpectedValues.Any()) + { + throw new ArgumentException("Cannot verify value containment with an empty sequence"); + } + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to not contain value {0}{reason}, but found {1}.", unexpected, Subject); + } + + var foundValues = unexpectedValues.Intersect(Subject.Values); + if (foundValues.Any()) + { + if (unexpectedValues.Length > 1) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} {0} to not contain value {1}{reason}, but found {2}.", Subject, + unexpected, foundValues); + } + else + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} {0} to not contain value {1}{reason}.", Subject, + unexpected.Cast().First()); + } + } + + return new AndConstraint>(this); + } + + #endregion + + #region Contain + + /// + /// Asserts that the current dictionary contains the specified . + /// Keys and values are compared using their implementation. + /// + /// The expected key/value pairs. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> Contain(IEnumerable> expected, + string because = "", params object[] becauseArgs) + { + if (expected == null) + { + throw new ArgumentNullException("expected", "Cannot compare dictionary with ."); + } + + KeyValuePair[] expectedKeyValuePairs = expected.ToArray(); + + if (!expectedKeyValuePairs.Any()) + { + throw new ArgumentException("Cannot verify key containment against an empty collection of key/value pairs"); + } + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to contain key/value pairs {0}{reason}, but dictionary is {1}.", expected, Subject); + } + + var expectedKeys = expectedKeyValuePairs.Select(keyValuePair => keyValuePair.Key).ToArray(); + var missingKeys = expectedKeys.Where(key => !Subject.ContainsKey(key)); + + if (missingKeys.Any()) + { + if (expectedKeyValuePairs.Count() > 1) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} {0} to contain key(s) {1}{reason}, but could not find keys {2}.", Subject, + expectedKeys, missingKeys); + } + else + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} {0} to contain key {1}{reason}.", Subject, + expectedKeys.Cast().First()); + } + } + + KeyValuePair[] keyValuePairsNotSameOrEqualInSubject = expectedKeyValuePairs.Where(keyValuePair => !Subject[keyValuePair.Key].IsSameOrEqualTo(keyValuePair.Value)).ToArray(); + + if (keyValuePairsNotSameOrEqualInSubject.Any()) + { + if (keyValuePairsNotSameOrEqualInSubject.Count() > 1) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to contain {0}{reason}, but {context:dictionary} differs at keys {1}.", + expectedKeyValuePairs, keyValuePairsNotSameOrEqualInSubject.Select(keyValuePair => keyValuePair.Key)); + } + else + { + var expectedKeyValuePair = keyValuePairsNotSameOrEqualInSubject.First(); + TValue actual = Subject[expectedKeyValuePair.Key]; + + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to contain value {0} at key {1}{reason}, but found {2}.", expectedKeyValuePair.Value, expectedKeyValuePair.Key, actual); + } + } + + return new AndConstraint>(this); + } + + /// + /// Asserts that the current dictionary contains the specified . + /// Keys and values are compared using their implementation. + /// + /// The expected + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> Contain(KeyValuePair expected, + string because = "", params object[] becauseArgs) + { + return Contain(expected.Key, expected.Value, because, becauseArgs); + } + + /// + /// Asserts that the current dictionary contains the specified for the supplied . Values are compared using their implementation. + /// + /// The key for which to validate the value + /// The value to validate + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> Contain(TKey key, TValue value, + string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to contain value {0} at key {1}{reason}, but dictionary is {2}.", value, key, + Subject); + } + + if (Subject.ContainsKey(key)) + { + TValue actual = Subject[key]; + + Execute.Assertion + .ForCondition(actual.IsSameOrEqualTo(value)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to contain value {0} at key {1}{reason}, but found {2}.", value, key, actual); + } + else + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to contain value {0} at key {1}{reason}, but the key was not found.", value, + key); + } + + return new AndConstraint>(this); + } + + #endregion + + #region NotContain + + /// + /// Asserts that the current dictionary does not contain the specified . + /// Keys and values are compared using their implementation. + /// + /// The unexpected key/value pairs + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> NotContain(IEnumerable> items, + string because = "", params object[] becauseArgs) + { + if (items == null) + { + throw new ArgumentNullException("items", "Cannot compare dictionary with ."); + } + + KeyValuePair[] keyValuePairs = items.ToArray(); + + if (!keyValuePairs.Any()) + { + throw new ArgumentException("Cannot verify key containment against an empty collection of key/value pairs"); + } + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to not contain key/value pairs {0}{reason}, but dictionary is {1}.", items, Subject); + } + + var keyValuePairsFound = keyValuePairs.Where(keyValuePair => Subject.ContainsKey(keyValuePair.Key)).ToArray(); + + if (keyValuePairsFound.Any()) + { + var keyValuePairsSameOrEqualInSubject = keyValuePairsFound.Where(keyValuePair => Subject[keyValuePair.Key].IsSameOrEqualTo(keyValuePair.Value)).ToArray(); + + if (keyValuePairsSameOrEqualInSubject.Any()) + { + if (keyValuePairsSameOrEqualInSubject.Count() > 1) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to not contain key/value pairs {0}{reason}, but found them anyhow.", keyValuePairs); + } + else + { + var keyValuePair = keyValuePairsSameOrEqualInSubject.First(); + + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} to not contain value {0} at key {1}{reason}, but found it anyhow.", keyValuePair.Value, keyValuePair.Key); + } + } + } + + return new AndConstraint>(this); + } + + /// + /// Asserts that the current dictionary does not contain the specified . + /// Keys and values are compared using their implementation. + /// + /// The unexpected + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> NotContain(KeyValuePair item, + string because = "", params object[] becauseArgs) + { + return NotContain(item.Key, item.Value, because, becauseArgs); + } + + /// + /// Asserts that the current dictionary does not contain the specified for the + /// supplied . Values are compared using their implementation. + /// + /// The key for which to validate the value + /// The value to validate + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> NotContain(TKey key, TValue value, + string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} not to contain value {0} at key {1}{reason}, but dictionary is {2}.", value, + key, Subject); + } + + if (Subject.ContainsKey(key)) + { + TValue actual = Subject[key]; + + Execute.Assertion + .ForCondition(!actual.IsSameOrEqualTo(value)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:dictionary} not to contain value {0} at key {1}{reason}, but found it anyhow.", value, key); + } + + return new AndConstraint>(this); + } + + #endregion + + /// + /// Returns the type of the subject the assertion applies on. + /// + protected override string Context + { + get { return "dictionary"; } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Collections/GenericDictionaryAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Collections/GenericDictionaryAssertions.cs.meta new file mode 100644 index 0000000..81b23b8 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Collections/GenericDictionaryAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a2d83e910d6c7d94f93246e77c9aa885 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Collections/NonGenericCollectionAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Collections/NonGenericCollectionAssertions.cs new file mode 100644 index 0000000..4ecea8e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Collections/NonGenericCollectionAssertions.cs @@ -0,0 +1,154 @@ +using System; +using System.Collections; +using System.Diagnostics; +using System.Linq; +using System.Linq.Expressions; +using FluentAssertions.Execution; + +namespace FluentAssertions.Collections +{ + /// + /// Contains a number of methods to assert that an is in the expected state. + /// + [DebuggerNonUserCode] + public class NonGenericCollectionAssertions : CollectionAssertions + { + public NonGenericCollectionAssertions(IEnumerable collection) + { + if (collection != null) + { + Subject = collection; + } + } + + /// + /// Asserts that the number of items in the collection matches the supplied amount. + /// + /// The expected number of items in the collection. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveCount(int expected, string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to contain {0} item(s){reason}, but found .", expected); + } + + int actualCount = GetMostLocalCount(); + + Execute.Assertion + .ForCondition(actualCount == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to contain {0} item(s){reason}, but found {1}.", expected, actualCount); + + return new AndConstraint(this); + } + + /// + /// Asserts that the number of items in the collection matches a condition stated by the . + /// + /// A predicate that yields the number of items that is expected to be in the collection. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveCount(Expression> countPredicate, string because = "", + params object[] becauseArgs) + { + if (countPredicate == null) + { + throw new NullReferenceException("Cannot compare collection count against a predicate."); + } + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to contain {0} items{reason}, but found {1}.", countPredicate.Body, Subject); + } + + Func compiledPredicate = countPredicate.Compile(); + + int actualCount = GetMostLocalCount(); + + if (!compiledPredicate(actualCount)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} {0} to have a count {1}{reason}, but count is {2}.", + Subject, countPredicate.Body, actualCount); + } + + return new AndConstraint(this); + } + + private int GetMostLocalCount() + { + ICollection castSubject = Subject as ICollection; + if (castSubject != null) + { + return castSubject.Count; + } + else + { + return Subject.Cast().Count(); + } + } + + /// + /// Asserts that the current collection contains the specified object. Elements are compared + /// using their implementation. + /// + /// An object, or of objects that are expected to be in the collection. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Contain(object expected, string because = "", + params object [] becauseArgs) + { + if (expected is IEnumerable) + { + return base.Contain((IEnumerable) expected, because, becauseArgs); + } + + return base.Contain(new [] { expected }, because, becauseArgs); + } + + /// + /// Asserts that the current collection does not contain the supplied item. + /// Elements are compared using their implementation. + /// + /// The element that is not expected to be in the collection + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotContain(object unexpected, string because = "", + params object[] becauseArgs) + { + if (unexpected is IEnumerable) + { + return base.NotContain((IEnumerable)unexpected, because, becauseArgs); + } + + return base.NotContain(new[] { unexpected }, because, becauseArgs); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Collections/NonGenericCollectionAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Collections/NonGenericCollectionAssertions.cs.meta new file mode 100644 index 0000000..2a680f6 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Collections/NonGenericCollectionAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de22e71c6e18c5943918af14af5a1e85 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Collections/SelfReferencingCollectionAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Collections/SelfReferencingCollectionAssertions.cs new file mode 100644 index 0000000..2e2cc62 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Collections/SelfReferencingCollectionAssertions.cs @@ -0,0 +1,510 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Linq.Expressions; +using FluentAssertions.Common; +using FluentAssertions.Execution; + +namespace FluentAssertions.Collections +{ + /// + /// Contains a number of methods to assert that an is in the expectation state. + /// + public class SelfReferencingCollectionAssertions : CollectionAssertions, TAssertions> + where TAssertions : SelfReferencingCollectionAssertions + { + public SelfReferencingCollectionAssertions(IEnumerable actualValue) + { + if (actualValue != null) + { + Subject = actualValue; + } + } + + /// + /// Asserts that the number of items in the collection matches the supplied amount. + /// + /// The expected number of items in the collection. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveCount(int expected, string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to contain {0} item(s){reason}, but found .", expected); + } + + int actualCount = Subject.Count(); + + Execute.Assertion + .ForCondition(actualCount == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to contain {0} item(s){reason}, but found {1}.", expected, actualCount); + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the number of items in the collection matches a condition stated by the . + /// + /// A predicate that yields the number of items that is expected to be in the collection. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveCount(Expression> countPredicate, string because = "", + params object[] becauseArgs) + { + if (countPredicate == null) + { + throw new NullReferenceException("Cannot compare collection count against a predicate."); + } + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to contain {0} items{reason}, but found {1}.", countPredicate.Body, Subject); + } + + Func compiledPredicate = countPredicate.Compile(); + + int actualCount = Subject.Count(); + + if (!compiledPredicate(actualCount)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} {0} to have a count {1}{reason}, but count is {2}.", + Subject, countPredicate.Body, actualCount); + } + + return new AndConstraint((TAssertions)this); + } + + /// + /// Expects the current collection to contain all the same elements in the same order as the collection identified by + /// . Elements are compared using their method. + /// + /// A params array with the expected elements. + public AndConstraint Equal(params T[] elements) + { + return Equal(elements, String.Empty); + } + + /// + /// Asserts that two collections contain the same items in the same order, where equality is determined using a + /// . + /// + /// + /// The collection to compare the subject with. + /// + /// + /// A equality comparison the is used to determine whether two objects should be treated as equal. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Equal( + IEnumerable expectation, Func equalityComparison, string because = "", params object[] becauseArgs) + { + AssertSubjectEquality(expectation, equalityComparison, because, becauseArgs); + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the current collection starts with same elements in the same order as the collection identified by + /// . Elements are compared using their . + /// + /// + /// A collection of expected elements. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint StartWith(IEnumerable expectation, string because = "", params object[] becauseArgs) + { + if (expectation == null) + { + return base.StartWith(null, because, becauseArgs); + } + + AssertCollectionStartsWith(Subject, expectation.ToArray(), EqualityComparer.Default.Equals, because, becauseArgs); + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the current collection starts with same elements in the same order as the collection identified by + /// . Elements are compared using . + /// + /// + /// A collection of expected elements. + /// + /// + /// A equality comparison the is used to determine whether two objects should be treated as equal. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint StartWith( + IEnumerable expectation, Func equalityComparison, string because = "", params object[] becauseArgs) + { + if (expectation == null) + { + throw new ArgumentNullException("expectation", "Cannot compare collection with ."); + } + + AssertCollectionStartsWith(Subject, expectation.ToArray(), equalityComparison, because, becauseArgs); + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the current collection ends with same elements in the same order as the collection identified by + /// . Elements are compared using their . + /// + /// + /// A collection of expected elements. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint EndWith(IEnumerable expectation, string because = "", params object[] becauseArgs) + { + if (expectation == null) + { + return base.EndWith(null, because, becauseArgs); + } + + AssertCollectionEndsWith(Subject, expectation.ToArray(), EqualityComparer.Default.Equals, because, becauseArgs); + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the current collection ends with same elements in the same order as the collection identified by + /// . Elements are compared using . + /// + /// + /// A collection of expected elements. + /// + /// + /// A equality comparison the is used to determine whether two objects should be treated as equal. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint EndWith( + IEnumerable expectation, Func equalityComparison, string because = "", params object[] becauseArgs) + { + if (expectation == null) + { + throw new ArgumentNullException("expectation", "Cannot compare collection with ."); + } + + AssertCollectionEndsWith(Subject, expectation.ToArray(), equalityComparison, because, becauseArgs); + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the collection contains the specified item. + /// + /// The expectation item. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AndWhichConstraint Contain(T expected, string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to contain {0}{reason}, but found {1}.", expected, Subject); + } + + if (!Subject.Contains(expected)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} {0} to contain {1}{reason}.", Subject, expected); + } + + return new AndWhichConstraint((TAssertions) this, + Subject.Where( + item => EqualityComparer.Default.Equals(item, expected))); + } + + /// + /// Asserts that the collection contains some extra items in addition to the original items. + /// + /// An of expectation items. + /// Additional items that are expectation to be contained by the collection. + public AndConstraint Contain(IEnumerable expectedItemsList, + params T [] additionalExpectedItems) + { + var list = new List(expectedItemsList); + list.AddRange(additionalExpectedItems); + + return Contain((IEnumerable)list); + } + + /// + /// Asserts that the collection contains at least one item that matches the predicate. + /// + /// A predicate to match the items in the collection against. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AndWhichConstraint Contain(Expression> predicate, string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to contain {0}{reason}, but found {1}.", predicate.Body, Subject); + } + + Func func = predicate.Compile(); + + Execute.Assertion + .ForCondition(Subject.Any(func)) + .BecauseOf(because, becauseArgs) + .FailWith("{context:Collection} {0} should have an item matching {1}{reason}.", Subject, predicate.Body); + + return new AndWhichConstraint((TAssertions)this, Subject.Where(func)); + } + + /// + /// Asserts that the collection only contains items that match a predicate. + /// + /// A predicate to match the items in the collection against. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AndConstraint OnlyContain( + Expression> predicate, string because = "", params object[] becauseArgs) + { + Func compiledPredicate = predicate.Compile(); + + Execute.Assertion + .ForCondition(Subject.Any()) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to contain only items matching {0}{reason}, but the collection is empty.", + predicate.Body); + + IEnumerable mismatchingItems = Subject.Where(item => !compiledPredicate(item)); + if (mismatchingItems.Any()) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to contain only items matching {0}{reason}, but {1} do(es) not match.", + predicate.Body, mismatchingItems); + } + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the current collection does not contain the supplied item. + /// + /// The element that is not expected to be in the collection + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AndWhichConstraint NotContain(T unexpected, string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to not contain {0}{reason}, but found .", unexpected); + } + + if (Subject.Contains(unexpected)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} {0} to not contain {1}{reason}.", Subject, unexpected); + } + + return new AndWhichConstraint((TAssertions)this, + Subject.Where( + item => !EqualityComparer.Default.Equals(item, unexpected))); + } + + /// + /// Asserts that the collection does not contain some extra items in addition to the original items. + /// + /// An of unexpected items. + /// Additional items that are not expected to be contained by the collection. + public AndConstraint NotContain(IEnumerable unexpectedItemsList, params T[] additionalUnexpectedItems) + { + var list = new List(unexpectedItemsList); + list.AddRange(additionalUnexpectedItems); + return NotContain((IEnumerable)list); + } + + /// + /// Asserts that the collection does not contain any items that match the predicate. + /// + /// A predicate to match the items in the collection against. + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AndConstraint NotContain(Expression> predicate, string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} not to contain {0}{reason}, but found {1}.", predicate.Body, Subject); + } + + if (Subject.Any(item => predicate.Compile()(item))) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:Collection} {0} to not have any items matching {1}{reason}.", Subject, predicate.Body); + } + + return new AndConstraint((TAssertions)this); + } + + /// + /// Expects the current collection to contain only a single item. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndWhichConstraint ContainSingle(string because = "", params object[] becauseArgs) + { + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:collection} to contain a single item{reason}, but found ."); + } + + switch (Subject.Count()) + { + case 0: //Fail, Collection is empty + Execute.Assertion.BecauseOf(because, becauseArgs).FailWith("Expected {context:collection} to contain a single item{reason}, but the collection is empty."); + break; + case 1: //Success Condition + break; + default: // Fail, Collection contains more than a single item + Execute.Assertion.BecauseOf(because, becauseArgs).FailWith("Expected {context:collection} to contain a single item{reason}, but found {0}.", Subject); + break; + } + + return new AndWhichConstraint((TAssertions)this, Subject.Single()); + } + + /// + /// Expects the current collection to contain only a single item matching the specified . + /// + /// The predicate that will be used to find the matching items. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndWhichConstraint ContainSingle(Expression> predicate, + string because = "", params object[] becauseArgs) + { + string expectationPrefix = + string.Format("Expected {{context:collection}} to contain a single item matching {0}{{reason}}, ", predicate.Body); + + if (ReferenceEquals(Subject, null)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith(expectationPrefix + "but found {0}.", Subject); + } + + T[] actualItems = Subject.ToArray(); + Execute.Assertion + .ForCondition(actualItems.Any()) + .BecauseOf(because, becauseArgs) + .FailWith(expectationPrefix + "but the collection is empty."); + + T[] matchingElements = actualItems.Where(predicate.Compile()).ToArray(); + int count = matchingElements.Count(); + if (count == 0) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith(expectationPrefix + "but no such item was found."); + } + else if (count > 1) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith(expectationPrefix + "but " + count + " such items were found."); + } + else + { + // Exactly 1 item was expected + } + + return new AndWhichConstraint((TAssertions) this, matchingElements); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Collections/SelfReferencingCollectionAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Collections/SelfReferencingCollectionAssertions.cs.meta new file mode 100644 index 0000000..726012d --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Collections/SelfReferencingCollectionAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e2508434680523441854da51170b5171 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Collections/SortOrder.cs b/Assets/Plugins/FluentAssertions/Core/Collections/SortOrder.cs new file mode 100644 index 0000000..bb333dd --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Collections/SortOrder.cs @@ -0,0 +1,8 @@ +namespace FluentAssertions.Collections +{ + internal enum SortOrder + { + Ascending, + Descending + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Collections/SortOrder.cs.meta b/Assets/Plugins/FluentAssertions/Core/Collections/SortOrder.cs.meta new file mode 100644 index 0000000..654b215 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Collections/SortOrder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b9573eff8891b75468bbfde5a736ebb3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Collections/StringCollectionAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Collections/StringCollectionAssertions.cs new file mode 100644 index 0000000..72f5583 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Collections/StringCollectionAssertions.cs @@ -0,0 +1,142 @@ +using System.Collections.Generic; +using System.Linq; + +namespace FluentAssertions.Collections +{ + public class StringCollectionAssertions : + SelfReferencingCollectionAssertions + { + public StringCollectionAssertions(IEnumerable actualValue) + : base(actualValue) + { + } + + /// + /// Expects the current collection to contain all the same elements in the same order as the collection identified by + /// . Elements are compared using their . + /// + /// An with the expected elements. + public new AndConstraint Equal(params string[] expected) + { + return base.Equal(expected.AsEnumerable()); + } + + /// + /// Expects the current collection to contain all the same elements in the same order as the collection identified by + /// . Elements are compared using their . + /// + /// An with the expected elements. + public AndConstraint Equal(IEnumerable expected) + { + return base.Equal(expected); + } + + /// + /// Expects the current collection to contain all elements of the collection identified by , + /// regardless of the order. Elements are compared using their . + /// + /// A params array with the expected elements. + public AndConstraint BeEquivalentTo(params string[] elements) + { + return base.BeEquivalentTo(elements.AsEnumerable()); + } + + /// + /// Expects the current collection to contain all elements of the collection identified by , + /// regardless of the order. Elements are compared using their . + /// + /// An with the expected elements. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeEquivalentTo(IEnumerable expected, string because = "", + params object[] becauseArgs) + { + return base.BeEquivalentTo(expected, because, becauseArgs); + } + + /// + /// Expects the current collection to contain the specified elements in the exact same order. Elements are compared + /// using their implementation. + /// + /// An with the expected elements. + public AndConstraint ContainInOrder(params string[] expected) + { + return base.ContainInOrder(expected.AsEnumerable()); + } + + /// + /// Expects the current collection to contain the specified elements in the exact same order. Elements are compared + /// using their implementation. + /// + /// An with the expected elements. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint ContainInOrder(IEnumerable expected, string because = "", + params object[] becauseArgs) + { + return base.ContainInOrder(expected, because, becauseArgs); + } + + /// + /// Expects the current collection to contain the specified elements in any order. Elements are compared + /// using their implementation. + /// + /// An with the expected elements. + public AndConstraint Contain(IEnumerable expected) + { + return base.Contain(expected); + } + + /// + /// Expects the current collection to contain the specified elements in any order. Elements are compared + /// using their implementation. + /// + /// An with the expected elements. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Contain(IEnumerable expected, string because = null, + object becauseArg = null, + params object[] becauseArgs) + { + var args = new List {becauseArg}; + args.AddRange(becauseArgs); + return base.Contain(expected, because, args.ToArray()); + } + + /// + /// Asserts that the current collection does not contain the supplied items. Elements are compared + /// using their implementation. + /// + /// An with the unexpected elements. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotContain(IEnumerable unexpected, string because = null, + object becauseArg = null, + params object[] becauseArgs) + { + var args = new List { becauseArg }; + args.AddRange(becauseArgs); + return base.NotContain(unexpected, because, args.ToArray()); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Collections/StringCollectionAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Collections/StringCollectionAssertions.cs.meta new file mode 100644 index 0000000..1f61c23 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Collections/StringCollectionAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fdd029d38fc6058428a32d24d7f31d95 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Collections/WhichValueConstraint.cs b/Assets/Plugins/FluentAssertions/Core/Collections/WhichValueConstraint.cs new file mode 100644 index 0000000..86d29e2 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Collections/WhichValueConstraint.cs @@ -0,0 +1,16 @@ +namespace FluentAssertions.Collections +{ + public class WhichValueConstraint : AndConstraint> + { + public WhichValueConstraint(GenericDictionaryAssertions parentConstraint, TValue value) + : base(parentConstraint) + { + WhichValue = value; + } + + /// + /// Gets the value of the object referred to by the key. + /// + public TValue WhichValue { get; private set; } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Collections/WhichValueConstraint.cs.meta b/Assets/Plugins/FluentAssertions/Core/Collections/WhichValueConstraint.cs.meta new file mode 100644 index 0000000..39f9cb4 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Collections/WhichValueConstraint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3376827f16b8c1e4faa1ef2afb619a45 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common.meta b/Assets/Plugins/FluentAssertions/Core/Common.meta new file mode 100644 index 0000000..a519e80 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b36f4b23e0c35f544832fd6c9b9a3b07 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/CSharpAccessModifier.cs b/Assets/Plugins/FluentAssertions/Core/Common/CSharpAccessModifier.cs new file mode 100644 index 0000000..487baa0 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/CSharpAccessModifier.cs @@ -0,0 +1,12 @@ +namespace FluentAssertions.Common +{ + public enum CSharpAccessModifier + { + Public, + Private, + Protected, + Internal, + ProtectedInternal, + InvalidForCSharp + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Common/CSharpAccessModifier.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/CSharpAccessModifier.cs.meta new file mode 100644 index 0000000..4e692ce --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/CSharpAccessModifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d04a64bd8a684e4b9f3b947eec67fd3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/CSharpAccessModifierExtensions.cs b/Assets/Plugins/FluentAssertions/Core/Common/CSharpAccessModifierExtensions.cs new file mode 100644 index 0000000..3669be7 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/CSharpAccessModifierExtensions.cs @@ -0,0 +1,98 @@ +using System; +using System.Reflection; + +namespace FluentAssertions.Common +{ + public static class CSharpAccessModifierExtensions + { + internal static CSharpAccessModifier GetCSharpAccessModifier(this MethodBase methodBase) + { + if (methodBase.IsPrivate) + { + return CSharpAccessModifier.Private; + } + + if (methodBase.IsFamily) + { + return CSharpAccessModifier.Protected; + } + + if (methodBase.IsAssembly) + { + return CSharpAccessModifier.Internal; + } + + if (methodBase.IsPublic) + { + return CSharpAccessModifier.Public; + } + + if (methodBase.IsFamilyOrAssembly) + { + return CSharpAccessModifier.ProtectedInternal; + } + + return CSharpAccessModifier.InvalidForCSharp; + } + + internal static CSharpAccessModifier GetCSharpAccessModifier(this FieldInfo fieldInfo) + { + if (fieldInfo.IsPrivate) + { + return CSharpAccessModifier.Private; + } + + if (fieldInfo.IsFamily) + { + return CSharpAccessModifier.Protected; + } + + if (fieldInfo.IsAssembly) + { + return CSharpAccessModifier.Internal; + } + + if (fieldInfo.IsPublic) + { + return CSharpAccessModifier.Public; + } + + if (fieldInfo.IsFamilyOrAssembly) + { + return CSharpAccessModifier.ProtectedInternal; + } + + return CSharpAccessModifier.InvalidForCSharp; + } + + internal static CSharpAccessModifier GetCSharpAccessModifier(this Type type) + { + if (type.GetTypeInfo().IsNestedPrivate) + { + return CSharpAccessModifier.Private; + } + + if (type.GetTypeInfo().IsNestedFamily) + { + return CSharpAccessModifier.Protected; + } + + if (type.GetTypeInfo().IsNestedAssembly || (type.GetTypeInfo().IsClass && type.GetTypeInfo().IsNotPublic)) + { + return CSharpAccessModifier.Internal; + } + + if (type.GetTypeInfo().IsPublic || type.GetTypeInfo().IsNestedPublic) + { + return CSharpAccessModifier.Public; + } + + if (type.GetTypeInfo().IsNestedFamORAssem) + { + return CSharpAccessModifier.ProtectedInternal; + } + + return CSharpAccessModifier.InvalidForCSharp; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Common/CSharpAccessModifierExtensions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/CSharpAccessModifierExtensions.cs.meta new file mode 100644 index 0000000..e306ad3 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/CSharpAccessModifierExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8abdb6349d8251345a0ac392d6dae0b3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/Configuration.cs b/Assets/Plugins/FluentAssertions/Core/Common/Configuration.cs new file mode 100644 index 0000000..57308da --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/Configuration.cs @@ -0,0 +1,99 @@ +using System; + +using FluentAssertions.Formatting; + +namespace FluentAssertions.Common +{ + public class Configuration + { + #region Private Definitions + + private readonly IConfigurationStore store; + private string valueFormatterAssembly; + private ValueFormatterDetectionMode? valueFormatterDetectionMode; + + #endregion + + /// + /// Gets the active configuration, + /// + public static Configuration Current + { + get { return Services.Configuration; } + } + + public Configuration(IConfigurationStore store) + { + this.store = store; + } + + /// + /// Gets or sets the mode on how Fluent Assertions will find custom implementations of + /// . + /// + public ValueFormatterDetectionMode ValueFormatterDetectionMode + { + get + { + if (!valueFormatterDetectionMode.HasValue) + { + valueFormatterDetectionMode = DetermineFormatterDetectionMode(); + } + + return valueFormatterDetectionMode.Value; + } + set { valueFormatterDetectionMode = value; } + } + + private ValueFormatterDetectionMode DetermineFormatterDetectionMode() + { + if (ValueFormatterAssembly != null) + { + return ValueFormatterDetectionMode.Specific; + } + + string setting = store.GetSetting("valueFormatters"); + if (!string.IsNullOrEmpty(setting)) + { + try + { + return (ValueFormatterDetectionMode)Enum.Parse(typeof(ValueFormatterDetectionMode), setting, true); + } + catch (ArgumentException) + { + throw new InvalidOperationException(string.Format( + "'{0}' is not a valid option for detecting value formatters. Valid options include Disabled, Specific and Scan.", + setting)); + } + } + + return ValueFormatterDetectionMode.Disabled; + } + + /// + /// Gets or sets the assembly name to scan for custom value formatters in case + /// is set to . + /// + public string ValueFormatterAssembly + { + get + { + if (valueFormatterAssembly == null) + { + string assemblyName = store.GetSetting("valueFormattersAssembly"); + if (!string.IsNullOrEmpty(assemblyName)) + { + valueFormatterAssembly = assemblyName; + } + } + + return valueFormatterAssembly; + } + set + { + valueFormatterAssembly = value; + valueFormatterDetectionMode = null; + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Common/Configuration.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/Configuration.cs.meta new file mode 100644 index 0000000..b3883ff --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/Configuration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d0b5c08b75cb08c459451f31b09f2634 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/DateTimeExtensions.cs b/Assets/Plugins/FluentAssertions/Core/Common/DateTimeExtensions.cs new file mode 100644 index 0000000..4a5d236 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/DateTimeExtensions.cs @@ -0,0 +1,20 @@ +using System; + +namespace FluentAssertions.Common +{ + public static class DateTimeExtensions + { + /// + /// Converts an existing to a but normalizes the + /// so that comparisons of converted instances retain the UTC/local agnostic behavior. + /// + public static DateTimeOffset ToDateTimeOffset(this DateTime dateTime) + { + return dateTime.ToDateTimeOffset(TimeSpan.Zero); + } + public static DateTimeOffset ToDateTimeOffset(this DateTime dateTime, TimeSpan offset) + { + return new DateTimeOffset(DateTime.SpecifyKind(dateTime, DateTimeKind.Unspecified) , offset); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Common/DateTimeExtensions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/DateTimeExtensions.cs.meta new file mode 100644 index 0000000..0415be8 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/DateTimeExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8aa38bb89f1e31846b6938f4b6f5ee23 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/EnumerableExtensions.cs b/Assets/Plugins/FluentAssertions/Core/Common/EnumerableExtensions.cs new file mode 100644 index 0000000..d3a4091 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/EnumerableExtensions.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; + +namespace FluentAssertions.Common +{ + internal static class EnumerableExtensions + { + /// + /// Searches for the first different element in two sequences using specified + /// + /// The type of the elements of the sequence. + /// The type of the elements of the sequence. + /// The first sequence to compare. + /// The second sequence to compare. + /// Method that is used to compare 2 elements with the same index. + /// Index at which two sequences have elements that are not equal, or -1 if enumerables are equal + public static int IndexOfFirstDifferenceWith(this IEnumerable first, IEnumerable second, Func equalityComparison) + { + using (IEnumerator firstEnumerator = first.GetEnumerator()) + using (IEnumerator secondEnumerator = second.GetEnumerator()) + { + int index = 0; + while (true) + { + bool isFirstCompleted = !firstEnumerator.MoveNext(); + bool isSecondCompleted = !secondEnumerator.MoveNext(); + + if (isFirstCompleted && isSecondCompleted) + { + return -1; + } + + if (isFirstCompleted ^ isSecondCompleted) + { + return index; + } + + if (!equalityComparison(firstEnumerator.Current, secondEnumerator.Current)) + { + return index; + } + + index++; + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Common/EnumerableExtensions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/EnumerableExtensions.cs.meta new file mode 100644 index 0000000..7df6991 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/EnumerableExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5164a73abebc6bd449c050e267437015 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/ExpressionExtensions.cs b/Assets/Plugins/FluentAssertions/Core/Common/ExpressionExtensions.cs new file mode 100644 index 0000000..7178929 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/ExpressionExtensions.cs @@ -0,0 +1,158 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; + +using FluentAssertions.Equivalency; + +namespace FluentAssertions.Common +{ + public static class ExpressionExtensions + { + public static SelectedMemberInfo GetSelectedMemberInfo(this Expression> expression) + { + if (ReferenceEquals(expression, null)) + { + throw new NullReferenceException("Expected an expression, but found ."); + } + + MemberInfo memberInfo = AttemptToGetMemberInfoFromCastExpression(expression) ?? + AttemptToGetMemberInfoFromMemberExpression(expression); + + if (memberInfo != null) + { + var propertyInfo = memberInfo as PropertyInfo; + if (propertyInfo != null) + { + return SelectedMemberInfo.Create(propertyInfo); + } + + var fieldInfo = memberInfo as FieldInfo; + if (fieldInfo != null) + { + return SelectedMemberInfo.Create(fieldInfo); + } + } + + throw new ArgumentException( + string.Format("Expression <{0}> cannot be used to select a member.", expression.Body)); + } + + public static PropertyInfo GetPropertyInfo(this Expression> expression) + { + if (ReferenceEquals(expression, null)) + { + throw new NullReferenceException("Expected a property expression, but found ."); + } + + var memberInfo = AttemptToGetMemberInfoFromCastExpression(expression) ?? + AttemptToGetMemberInfoFromMemberExpression(expression); + + var propertyInfo = memberInfo as PropertyInfo; + + if (propertyInfo == null) + { + throw new ArgumentException("Cannot use <" + expression.Body + "> when a property expression is expected."); + } + + return propertyInfo; + } + + private static MemberInfo AttemptToGetMemberInfoFromMemberExpression( + Expression> expression) + { + var memberExpression = expression.Body as MemberExpression; + if (memberExpression != null) + { + return memberExpression.Member; + } + + return null; + } + + private static MemberInfo AttemptToGetMemberInfoFromCastExpression(Expression> expression) + { + var castExpression = expression.Body as UnaryExpression; + if (castExpression != null) + { + return ((MemberExpression)castExpression.Operand).Member; + } + + return null; + } + + /// + /// Gets a dotted path of property names representing the property expression. E.g. Parent.Child.Sibling.Name. + /// + public static string GetMemberPath( + this Expression> expression) + { + var segments = new List(); + Expression node = expression; + + if (node == null) + { + throw new NullReferenceException("Expected an expression, but found ."); + } + + var unsupportedExpressionMessage = $"Expression <{expression.Body}> cannot be used to select a member."; + + while (node != null) + { + switch (node.NodeType) + { + case ExpressionType.Lambda: + node = ((LambdaExpression)node).Body; + break; + + case ExpressionType.Convert: + case ExpressionType.ConvertChecked: + var unaryExpression = (UnaryExpression)node; + node = unaryExpression.Operand; + break; + + case ExpressionType.MemberAccess: + var memberExpression = (MemberExpression)node; + node = memberExpression.Expression; + + segments.Add(memberExpression.Member.Name); + break; + + case ExpressionType.ArrayIndex: + var binaryExpression = (BinaryExpression)node; + var constantExpression = (ConstantExpression)binaryExpression.Right; + node = binaryExpression.Left; + + segments.Add("[" + constantExpression.Value + "]"); + break; + + case ExpressionType.Parameter: + node = null; + break; + + case ExpressionType.Call: + var methodCallExpression = (MethodCallExpression)node; + if (methodCallExpression.Method.Name != "get_Item" || methodCallExpression.Arguments.Count != 1 || !(methodCallExpression.Arguments[0] is ConstantExpression)) + { + throw new ArgumentException(unsupportedExpressionMessage); + } + constantExpression = (ConstantExpression)methodCallExpression.Arguments[0]; + node = methodCallExpression.Object; + segments.Add("[" + constantExpression.Value + "]"); + break; + + default: + throw new ArgumentException(unsupportedExpressionMessage); + } + } + + return string.Join(".", segments.AsEnumerable().Reverse().ToArray()).Replace(".[", "["); + } + + internal static string GetMethodName(Expression action) + { + return ((MethodCallExpression)action.Body).Method.Name; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Common/ExpressionExtensions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/ExpressionExtensions.cs.meta new file mode 100644 index 0000000..7e2eee4 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/ExpressionExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d5365de470a3ce468c3f6a2a3252376 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/IAdapterResolver.cs b/Assets/Plugins/FluentAssertions/Core/Common/IAdapterResolver.cs new file mode 100644 index 0000000..e9e04a4 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/IAdapterResolver.cs @@ -0,0 +1,15 @@ +// ----------------------------------------------------------------------- +// Copyright (c) David Kean. All rights reserved. +// http://pclcontrib.codeplex.com/ +// ----------------------------------------------------------------------- + + +using System; + +namespace FluentAssertions.Common +{ + internal interface IAdapterResolver + { + object Resolve(Type type); + } +} diff --git a/Assets/Plugins/FluentAssertions/Core/Common/IAdapterResolver.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/IAdapterResolver.cs.meta new file mode 100644 index 0000000..d5055f5 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/IAdapterResolver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 66b3b50f0a644ed438d8ef1f0218d0bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/IConfigurationStore.cs b/Assets/Plugins/FluentAssertions/Core/Common/IConfigurationStore.cs new file mode 100644 index 0000000..fde1f27 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/IConfigurationStore.cs @@ -0,0 +1,7 @@ +namespace FluentAssertions.Common +{ + public interface IConfigurationStore + { + string GetSetting(string name); + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Common/IConfigurationStore.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/IConfigurationStore.cs.meta new file mode 100644 index 0000000..3c30579 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/IConfigurationStore.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2737df8656173814dbff1d380882ace6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/IProvidePlatformServices.cs b/Assets/Plugins/FluentAssertions/Core/Common/IProvidePlatformServices.cs new file mode 100644 index 0000000..1163fbe --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/IProvidePlatformServices.cs @@ -0,0 +1,17 @@ +using System; + +using FluentAssertions.Formatting; + +namespace FluentAssertions.Common +{ + /// + /// Defines the contract the platform-specific assembly must implement to be able to get a chance to initialize itself. + /// + public interface IProvidePlatformServices + { + Action Throw { get; } + IValueFormatter[] Formatters { get; } + IConfigurationStore ConfigurationStore { get; } + IReflector Reflector { get; } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Common/IProvidePlatformServices.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/IProvidePlatformServices.cs.meta new file mode 100644 index 0000000..5f87dd7 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/IProvidePlatformServices.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f765b1ebab4f6e44d81d6a5c85a4e802 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/IReflector.cs b/Assets/Plugins/FluentAssertions/Core/Common/IReflector.cs new file mode 100644 index 0000000..c274f4c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/IReflector.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Reflection; + +namespace FluentAssertions.Common +{ + public interface IReflector + { + IEnumerable GetAllTypesFromAppDomain(Func predicate); + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Common/IReflector.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/IReflector.cs.meta new file mode 100644 index 0000000..b338123 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/IReflector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 60d6be0ea8e6f5542b754363fe2337aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/MethodInfoExtensions.cs b/Assets/Plugins/FluentAssertions/Core/Common/MethodInfoExtensions.cs new file mode 100644 index 0000000..c2834f8 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/MethodInfoExtensions.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; + +namespace FluentAssertions.Common +{ + public static class MethodInfoExtensions + { + internal static bool IsAsync(this MethodInfo methodInfo) + { + return methodInfo.GetMatchingAttributes(a => a.GetType().FullName.Equals("System.Runtime.CompilerServices.AsyncStateMachineAttribute")).Any(); + } + + internal static IEnumerable GetMatchingAttributes(this MemberInfo memberInfo, Expression> isMatchingAttributePredicate) where TAttribute : Attribute + { + return memberInfo.GetCustomAttributes( + typeof(TAttribute), false) + .Cast() + .Where(isMatchingAttributePredicate.Compile()); + } + + internal static bool IsNonVirtual(this MethodInfo method) + { + return !method.IsVirtual || method.IsFinal; + } + } +} diff --git a/Assets/Plugins/FluentAssertions/Core/Common/MethodInfoExtensions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/MethodInfoExtensions.cs.meta new file mode 100644 index 0000000..8088a25 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/MethodInfoExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 728b55b4e99eb5244aaa014fa39ae486 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/NullConfigurationStore.cs b/Assets/Plugins/FluentAssertions/Core/Common/NullConfigurationStore.cs new file mode 100644 index 0000000..aa85155 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/NullConfigurationStore.cs @@ -0,0 +1,10 @@ +namespace FluentAssertions.Common +{ + internal class NullConfigurationStore : IConfigurationStore + { + public string GetSetting(string name) + { + return ""; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Common/NullConfigurationStore.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/NullConfigurationStore.cs.meta new file mode 100644 index 0000000..302031e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/NullConfigurationStore.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9efaa2a61a4e28c4cbc4356a9b61270e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/NullReflector.cs b/Assets/Plugins/FluentAssertions/Core/Common/NullReflector.cs new file mode 100644 index 0000000..98a6871 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/NullReflector.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Reflection; + +namespace FluentAssertions.Common +{ + internal class NullReflector : IReflector + { + public IEnumerable GetAllTypesFromAppDomain(Func predicate) + { + return new Type[0]; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Common/NullReflector.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/NullReflector.cs.meta new file mode 100644 index 0000000..f723ae4 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/NullReflector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3db7596dc321eec4e9178efe864115b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/ObjectExtensions.cs b/Assets/Plugins/FluentAssertions/Core/Common/ObjectExtensions.cs new file mode 100644 index 0000000..60a11c6 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/ObjectExtensions.cs @@ -0,0 +1,20 @@ +namespace FluentAssertions.Common +{ + public static class ObjectExtensions + { + public static bool IsSameOrEqualTo(this object actual, object expected) + { + if (ReferenceEquals(actual, null) && ReferenceEquals(expected, null)) + { + return true; + } + + if (ReferenceEquals(actual, null)) + { + return false; + } + + return actual.Equals(expected); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Common/ObjectExtensions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/ObjectExtensions.cs.meta new file mode 100644 index 0000000..6f23f44 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/ObjectExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 881f9304fc1e6974fba1ff6645456cde +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/PlatformAdapter.cs b/Assets/Plugins/FluentAssertions/Core/Common/PlatformAdapter.cs new file mode 100644 index 0000000..542372d --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/PlatformAdapter.cs @@ -0,0 +1,29 @@ +// ----------------------------------------------------------------------- +// Copyright (c) David Kean. All rights reserved. +// http://pclcontrib.codeplex.com/ +// ----------------------------------------------------------------------- + + +using System; + +namespace FluentAssertions.Common +{ + /// + /// Facade to resolve an implementation of a particular interface using a platform-specific assembly. + /// + internal static class PlatformAdapter + { + private static readonly IAdapterResolver resolver = new ProbingAdapterResolver(); + + public static T Resolve() + { + T value = (T)resolver.Resolve(typeof(T)); + if (value == null) + { + throw new PlatformNotSupportedException("Platform doesn't support interface " + typeof(T).Name); + } + + return value; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Common/PlatformAdapter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/PlatformAdapter.cs.meta new file mode 100644 index 0000000..9271c62 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/PlatformAdapter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f15ea08350739dd42ab80b83e4e5c8a6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/ProbingAdapterResolver.cs b/Assets/Plugins/FluentAssertions/Core/Common/ProbingAdapterResolver.cs new file mode 100644 index 0000000..ec4a0b7 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/ProbingAdapterResolver.cs @@ -0,0 +1,125 @@ +// ----------------------------------------------------------------------- +// Copyright (c) David Kean. All rights reserved. +// http://pclcontrib.codeplex.com/ +// ----------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; + +namespace FluentAssertions.Common +{ + /// + /// An implementation of that probes for platforms-specific adapters by dynamically + /// looking for concrete types in platform-specific assemblies. + /// + internal class ProbingAdapterResolver : IAdapterResolver + { + #region Private Definitions + +#if NEW_REFLECTION + private readonly Func assemblyLoader; +#else + private readonly Func assemblyLoader; +#endif + private readonly object lockable = new object(); + private readonly Dictionary adapters = new Dictionary(); + private Assembly assembly; + +#endregion + + public ProbingAdapterResolver() : this(Assembly.Load) + { + } + +#if NEW_REFLECTION + public ProbingAdapterResolver(Func assemblyLoader) + { + this.assemblyLoader = assemblyLoader; + } +#else + public ProbingAdapterResolver(Func assemblyLoader) + { + this.assemblyLoader = assemblyLoader; + } +#endif + + public object Resolve(Type type) + { + lock (lockable) + { + object instance; + if (!adapters.TryGetValue(type, out instance)) + { + Assembly assembly = GetPlatformSpecificAssembly(); + instance = ResolveAdapter(assembly, type); + adapters.Add(type, instance); + } + + return instance; + } + } + + private static object ResolveAdapter(Assembly assembly, Type interfaceType) + { + string typeName = MakeAdapterTypeName(interfaceType); + +#if NEW_REFLECTION + Type type = assembly.GetType(typeName, throwOnError: false, ignoreCase: false); +#else + Type type = assembly.GetType(typeName, throwOnError: false); +#endif + if (type != null) + { + return Activator.CreateInstance(type); + } + + return type; + } + + private static string MakeAdapterTypeName(Type interfaceType) + { + // For example, if we're looking for an implementation of System.Security.Cryptography.ICryptographyFactory, + // then we'll look for System.Security.Cryptography.CryptographyFactory + return interfaceType.Namespace + "." + interfaceType.Name.Substring(1); + } + + private Assembly GetPlatformSpecificAssembly() + { + if (assembly == null) + { + assembly = ProbeForPlatformSpecificAssembly(); + if (assembly == null) + { + throw new InvalidOperationException("No platform-specific assembly detected"); + } + } + + return assembly; + } + + private Assembly ProbeForPlatformSpecificAssembly() + { +#if NEW_REFLECTION + var assemblyName = new AssemblyName(GetType().GetTypeInfo().Assembly.FullName) { Name = "FluentAssertions" }; +#else + var assemblyName = new AssemblyName(GetType().Assembly.FullName) { Name = "FluentAssertions" }; +#endif + + try + { +#if NEW_REFLECTION + return assemblyLoader(assemblyName); +#else + return assemblyLoader(assemblyName.FullName); +#endif + } + catch (FileNotFoundException) + { + } + + return null; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Common/ProbingAdapterResolver.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/ProbingAdapterResolver.cs.meta new file mode 100644 index 0000000..7ce7eda --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/ProbingAdapterResolver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3a707cadcef8b9a4f830165c8f3935e1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/PropertyInfoExtensions.cs b/Assets/Plugins/FluentAssertions/Core/Common/PropertyInfoExtensions.cs new file mode 100644 index 0000000..0521d58 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/PropertyInfoExtensions.cs @@ -0,0 +1,13 @@ +using System.Reflection; + +namespace FluentAssertions.Common +{ + public static class PropertyInfoExtensions + { + internal static bool IsVirtual(this PropertyInfo property) + { + MethodInfo methodInfo = property.GetGetMethod(true) ?? property.GetSetMethod(true); + return !methodInfo.IsNonVirtual(); + } + } +} diff --git a/Assets/Plugins/FluentAssertions/Core/Common/PropertyInfoExtensions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/PropertyInfoExtensions.cs.meta new file mode 100644 index 0000000..49de94b --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/PropertyInfoExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 15d2540c493d3a24dac470c3b8cff045 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/Services.cs b/Assets/Plugins/FluentAssertions/Core/Common/Services.cs new file mode 100644 index 0000000..9918d3b --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/Services.cs @@ -0,0 +1,97 @@ +using System; + +using FluentAssertions.Formatting; + +namespace FluentAssertions.Common +{ + /// + /// Maintains the framework-specific services. + /// + public static class Services + { + #region Private Definitions + + private static bool initialized = false; + private static readonly object lockable = new object(); + private static Configuration configuration; + private static Action throwException; + private static IReflector reflector; + private static IConfigurationStore configurationStore; + + #endregion + + public static void Initialize() + { + if (!initialized) + { + lock (lockable) + { + if (!initialized) + { + var platform = PlatformAdapter.Resolve(); + + ConfigurationStore = platform.ConfigurationStore ?? new NullConfigurationStore(); + Reflector = platform.Reflector ?? new NullReflector(); + ThrowException = platform.Throw; + + Formatter.AddPlatformFormatters(platform.Formatters); + + initialized = true; + } + } + } + } + + public static IConfigurationStore ConfigurationStore + { + get + { + Initialize(); + + return configurationStore; + } + set { configurationStore = value; } + } + + public static Configuration Configuration + { + get + { + Initialize(); + + if (configuration == null) + { + configuration = new Configuration(ConfigurationStore); + } + + return configuration; + } + } + + public static Action ThrowException + { + get + { + Initialize(); + return throwException; + } + set { throwException = value; } + } + + public static IReflector Reflector + { + get + { + Initialize(); + return reflector; + } + set { reflector = value; } + } + + public static void ResetToDefaults() + { + initialized = false; + Initialize(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Common/Services.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/Services.cs.meta new file mode 100644 index 0000000..49fc70b --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/Services.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de44afe10f9fcad4db80c23958b123a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/StringExtensions.cs b/Assets/Plugins/FluentAssertions/Core/Common/StringExtensions.cs new file mode 100644 index 0000000..a0b09ae --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/StringExtensions.cs @@ -0,0 +1,84 @@ +using System; +using System.Linq; +using FluentAssertions.Formatting; + +namespace FluentAssertions.Common +{ + public static class StringExtensions + { + /// + /// Finds the first index at which the does not match the + /// string anymore, including the exact casing. + /// + public static int IndexOfFirstMismatch(this string value, string expected) + { + return IndexOfFirstMismatch(value, expected, StringComparison.CurrentCulture); + } + + /// + /// Finds the first index at which the does not match the + /// string anymore, accounting for the specified . + /// + public static int IndexOfFirstMismatch(this string value, string expected, StringComparison stringComparison) + { + for (int index = 0; index < value.Length; index++) + { + if ((index >= expected.Length) || !value[index].ToString().Equals(expected[index].ToString(), stringComparison)) + { + return index; + } + } + + return -1; + } + + /// + /// Gets the quoted three characters at the specified index of a string, including the index itself. + /// + public static string IndexedSegmentAt(this string value, int index) + { + int length = Math.Min(value.Length - index, 3); + + return $"{Formatter.ToString(value.Substring(index, length))} (index {index})".Replace("{", "{{").Replace("}", "}}"); + } + + /// + /// Replaces all characters that might conflict with formatting placeholders and newlines with their escaped counterparts. + /// + public static string Escape(this string value, bool escapePlaceholders = false) + { + value = value.Replace("\"", "\\\"").Replace("\n", @"\n").Replace("\r", @"\r"); + if (escapePlaceholders) + { + value = value.Replace("{", "{{").Replace("}", "}}"); + } + + return value; + } + + /// + /// Joins a string with one or more other strings using a specified separator. + /// + /// + /// Any string that is empty (including the original string) is ignored. + /// + public static string Combine(this string @this, string other, string separator = ".") + { + var strings = new[] { @this }.Concat(new[] {other}).Where(s => s.Length > 0).ToArray(); + return string.Join(separator, strings); + } + + /// + /// Changes the first character of a string to uppercase. + /// + public static string Capitalize(this string @this) + { + return @this.Substring(0, 1).ToUpper() + @this.Substring(1); + } + + public static string RemoveNewLines(this string @this) + { + return @this.Replace("\n", "").Replace("\r", "").Replace("\\r\\n", ""); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Common/StringExtensions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/StringExtensions.cs.meta new file mode 100644 index 0000000..a187889 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/StringExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c5e2f90d79a235f4ab66251705a3df4b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/TypeExtensions.cs b/Assets/Plugins/FluentAssertions/Core/Common/TypeExtensions.cs new file mode 100644 index 0000000..ac37640 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/TypeExtensions.cs @@ -0,0 +1,350 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; + +using FluentAssertions.Equivalency; + +namespace FluentAssertions.Common +{ + public static class TypeExtensions + { + private const BindingFlags PublicMembersFlag = + BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; + + private const BindingFlags AllMembersFlag = + PublicMembersFlag | BindingFlags.NonPublic | BindingFlags.Static; + + /// + /// Determines whether the specified method has been annotated with a specific attribute. + /// + /// + /// true if the specified method has attribute; otherwise, false. + /// + public static bool HasAttribute(this MemberInfo method) where TAttribute : Attribute + { + return (method.GetCustomAttributes(typeof(TAttribute), true).Any()); + } + + public static bool HasAttribute(this Type method) where TAttribute : Attribute + { +#if NEW_REFLECTION + return (method.GetTypeInfo().GetCustomAttributes(typeof(TAttribute), true).Any()); +#else + return (method.GetCustomAttributes(typeof(TAttribute), true).Any()); +#endif + } + + + public static bool HasMatchingAttribute(this MemberInfo type, Expression> isMatchingAttributePredicate) + where TAttribute : Attribute + { + Func isMatchingAttribute = isMatchingAttributePredicate.Compile(); + + return GetCustomAttributes(type).Any(isMatchingAttribute); + } + + public static bool HasMatchingAttribute(this Type type, Expression> isMatchingAttributePredicate) + where TAttribute : Attribute + { + Func isMatchingAttribute = isMatchingAttributePredicate.Compile(); + + return GetCustomAttributes(type).Any(isMatchingAttribute); + } + + public static bool IsDecoratedWith(this MemberInfo type) + where TAttribute : Attribute + { + return GetCustomAttributes(type).Any(); + } + + public static bool IsDecoratedWith(this Type type) + where TAttribute : Attribute + { + return GetCustomAttributes(type).Any(); + } + + + private static IEnumerable GetCustomAttributes(MemberInfo type) + { + return type.GetCustomAttributes(false).OfType(); + } + + private static IEnumerable GetCustomAttributes(Type type) + { +#if NEW_REFLECTION + return type.GetTypeInfo().GetCustomAttributes(false).OfType(); +#else + return type.GetCustomAttributes(false).OfType(); +#endif + } + + /// + /// Determines whether two objects refer to the same member. + /// + public static bool IsEquivalentTo(this SelectedMemberInfo property, SelectedMemberInfo otherProperty) + { + return (property.DeclaringType.IsSameOrInherits(otherProperty.DeclaringType) || + otherProperty.DeclaringType.IsSameOrInherits(property.DeclaringType)) && + (property.Name == otherProperty.Name); + } + + public static bool IsSameOrInherits(this Type actualType, Type expectedType) + { + return (actualType == expectedType) || + (expectedType.IsAssignableFrom(actualType)); + } + + public static bool Implements(this Type type) + { + return Implements(type, typeof (TInterface)); + } + + /// + /// NOTE: This method does not give the expected results with open generics + /// + public static bool Implements(this Type type, Type expectedBaseType) + { + return + expectedBaseType.IsAssignableFrom(type) + && (type != expectedBaseType); + } + + internal static Type[] GetClosedGenericInterfaces(Type type, Type openGenericType) + { + if (type.IsGenericType() && type.GetGenericTypeDefinition() == openGenericType) + { + return new[] { type }; + } + + Type[] interfaces = type.GetInterfaces(); + return + interfaces + .Where(t => (t.IsGenericType() && (t.GetGenericTypeDefinition() == openGenericType))) + .ToArray(); + } + + public static bool IsComplexType(this Type type) + { + return HasProperties(type) && !AssertionOptions.IsValueType(type); + } + + private static bool HasProperties(Type type) + { + return type.GetProperties(PublicMembersFlag).Any(); + } + + /// + /// Finds a member by its case-sensitive name. + /// + /// + /// Returns null if no such member exists. + /// + public static SelectedMemberInfo FindMember(this Type type, string memberName, Type preferredType) + { + return SelectedMemberInfo.Create(FindProperty(type, memberName, preferredType)) ?? + SelectedMemberInfo.Create(FindField(type, memberName, preferredType)); + } + + /// + /// Finds the property by a case-sensitive name. + /// + /// + /// Returns null if no such property exists. + /// + public static PropertyInfo FindProperty(this Type type, string propertyName, Type preferredType) + { + IEnumerable properties = + type.GetProperties(PublicMembersFlag) + .Where(pi => pi.Name == propertyName) + .ToList(); + + return (properties.Count() > 1) + ? properties.SingleOrDefault(p => p.PropertyType == preferredType) + : properties.SingleOrDefault(); + } + + /// + /// Finds the field by a case-sensitive name. + /// + /// + /// Returns null if no such property exists. + /// + public static FieldInfo FindField(this Type type, string fieldName, Type preferredType) + { + IEnumerable properties = + type.GetFields(PublicMembersFlag) + .Where(pi => pi.Name == fieldName) + .ToList(); + + return (properties.Count() > 1) + ? properties.SingleOrDefault(p => p.FieldType == preferredType) + : properties.SingleOrDefault(); + } + + public static IEnumerable GetNonPrivateMembers(this Type typeToReflect) + { + return + GetNonPrivateProperties(typeToReflect) + .Select(SelectedMemberInfo.Create) + .Concat(GetNonPrivateFields(typeToReflect).Select(SelectedMemberInfo.Create)) + .ToArray(); + } + + public static IEnumerable GetNonPrivateProperties(this Type typeToReflect, IEnumerable filter = null) + { + var query = + from propertyInfo in GetPropertiesFromHierarchy(typeToReflect) + where HasNonPrivateGetter(propertyInfo) + where !propertyInfo.IsIndexer() + where (filter == null) || filter.Contains(propertyInfo.Name) + select propertyInfo; + + return query.ToArray(); + } + + public static IEnumerable GetNonPrivateFields(this Type typeToReflect) + { + var query = + from fieldInfo in GetFieldsFromHierarchy(typeToReflect) + where !fieldInfo.IsPrivate + where !fieldInfo.IsFamily + select fieldInfo; + + return query.ToArray(); + } + + private static IEnumerable GetFieldsFromHierarchy(Type typeToReflect) + { + return GetMembersFromHierarchy(typeToReflect, GetPublicFields); + } + + private static IEnumerable GetPropertiesFromHierarchy(Type typeToReflect) + { + return GetMembersFromHierarchy(typeToReflect, GetPublicProperties); + } + + private static IEnumerable GetMembersFromHierarchy( + Type typeToReflect, + Func> getMembers) where TMemberInfo : MemberInfo + { + if (IsInterface(typeToReflect)) + { + var propertyInfos = new List(); + + var considered = new List(); + var queue = new Queue(); + considered.Add(typeToReflect); + queue.Enqueue(typeToReflect); + + while (queue.Count > 0) + { + var subType = queue.Dequeue(); + foreach (var subInterface in GetInterfaces(subType)) + { + if (considered.Contains(subInterface)) + { + continue; + } + + considered.Add(subInterface); + queue.Enqueue(subInterface); + } + + IEnumerable typeProperties = getMembers(subType); + + IEnumerable newPropertyInfos = typeProperties.Where(x => !propertyInfos.Contains(x)); + + propertyInfos.InsertRange(0, newPropertyInfos); + } + + return propertyInfos.ToArray(); + } + else + { + return getMembers(typeToReflect); + } + } + + private static bool IsInterface(Type typeToReflect) + { + return typeToReflect.IsInterface(); + } + + private static IEnumerable GetInterfaces(Type type) + { + return type.GetInterfaces(); + } + + private static IEnumerable GetPublicProperties(Type type) + { + return type.GetProperties(PublicMembersFlag); + } + + private static IEnumerable GetPublicFields(Type type) + { + return type.GetFields(PublicMembersFlag); + } + + private static bool HasNonPrivateGetter(PropertyInfo propertyInfo) + { + MethodInfo getMethod = propertyInfo.GetGetMethod(true); + return (getMethod != null) && !getMethod.IsPrivate && !getMethod.IsFamily; + } + + public static MethodInfo GetMethod(this Type type, string methodName, IEnumerable parameterTypes) + { + return type.GetMethods(AllMembersFlag) + .SingleOrDefault(m => m.Name == methodName && m.GetParameters().Select(p => p.ParameterType).SequenceEqual(parameterTypes)); + } + + public static bool HasMethod(this Type type, string methodName, IEnumerable parameterTypes) + { + return type.GetMethod(methodName, parameterTypes) != null; + } + + public static MethodInfo GetParameterlessMethod(this Type type, string methodName) + { + return type.GetMethod(methodName, Enumerable.Empty()); + } + + public static bool HasParameterlessMethod(this Type type, string methodName) + { + return type.GetParameterlessMethod(methodName) != null; + } + + public static PropertyInfo GetPropertyByName(this Type type, string propertyName) + { + return type.GetProperty(propertyName, AllMembersFlag); + } + + public static bool HasExplicitlyImplementedProperty(this Type type, Type interfaceType, string propertyName) + { + var hasGetter = type.HasParameterlessMethod(string.Format("{0}.get_{1}", interfaceType.FullName, propertyName)); + var hasSetter = type.GetMethods(AllMembersFlag) + .SingleOrDefault(m => m.Name == string.Format("{0}.set_{1}", interfaceType.FullName, propertyName) && m.GetParameters().Count() == 1) != null; + + return hasGetter || hasSetter; + } + + public static PropertyInfo GetIndexerByParameterTypes(this Type type, IEnumerable parameterTypes) + { + return type.GetProperties(AllMembersFlag) + .SingleOrDefault(p => p.IsIndexer() && p.GetIndexParameters().Select(i => i.ParameterType).SequenceEqual(parameterTypes)); + } + + public static bool IsIndexer(this PropertyInfo member) + { + return (member.GetIndexParameters().Length != 0); + } + + public static ConstructorInfo GetConstructor(this Type type, IEnumerable parameterTypes) + { + return type + .GetConstructors(PublicMembersFlag) + .SingleOrDefault(m => m.GetParameters().Select(p => p.ParameterType).SequenceEqual(parameterTypes)); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Common/TypeExtensions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/TypeExtensions.cs.meta new file mode 100644 index 0000000..17dd48e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/TypeExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23f6b65d60c2526488393d55f530e39b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Common/ValueFormatterDetectionMode.cs b/Assets/Plugins/FluentAssertions/Core/Common/ValueFormatterDetectionMode.cs new file mode 100644 index 0000000..57da018 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/ValueFormatterDetectionMode.cs @@ -0,0 +1,25 @@ +namespace FluentAssertions.Common +{ + /// + /// Defines the modes in which custom implementations of are detected as configured + /// through . + /// + public enum ValueFormatterDetectionMode + { + /// + /// Detection is disabled. + /// + Disabled, + + /// + /// Only custom value formatters exposed through the assembly set in + /// are detected. + /// + Specific, + + /// + /// All custom value formatters in any assembly loaded in the current will be detected. + /// + Scan, + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Common/ValueFormatterDetectionMode.cs.meta b/Assets/Plugins/FluentAssertions/Core/Common/ValueFormatterDetectionMode.cs.meta new file mode 100644 index 0000000..1b7b7c9 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Common/ValueFormatterDetectionMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b43d769dfeeb1624da010403f4988732 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Disposable.cs b/Assets/Plugins/FluentAssertions/Core/Disposable.cs new file mode 100644 index 0000000..7bd0f6f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Disposable.cs @@ -0,0 +1,19 @@ +using System; + +namespace FluentAssertions +{ + internal class Disposable : IDisposable + { + private readonly Action action; + + public Disposable(Action action) + { + this.action = action; + } + + public void Dispose() + { + action(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Disposable.cs.meta b/Assets/Plugins/FluentAssertions/Core/Disposable.cs.meta new file mode 100644 index 0000000..54451df --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Disposable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 70b29c85e35026f4eb7a0dfb411bcfc6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency.meta new file mode 100644 index 0000000..20882f8 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 069fc278a7a79404daf26fa82a475f32 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionContext.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionContext.cs new file mode 100644 index 0000000..e5bdd5b --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionContext.cs @@ -0,0 +1,36 @@ +using System.Reflection; + +namespace FluentAssertions.Equivalency +{ + internal class AssertionContext : IAssertionContext + { + public AssertionContext(SelectedMemberInfo subjectProperty, TSubject subject, TSubject expectation, string because, + object[] becauseArgs) + { + SubjectProperty = subjectProperty; + Subject = subject; + Expectation = expectation; + Because = because; + BecauseArgs = becauseArgs; + } + + public SelectedMemberInfo SubjectProperty { get; private set; } + public TSubject Subject { get; private set; } + public TSubject Expectation { get; private set; } + public string Because { get; set; } + public object[] BecauseArgs { get; set; } + + internal static AssertionContext CreateFromEquivalencyValidationContext(IEquivalencyValidationContext context) + { + var expectation = (context.Expectation != null) ? (TSubject)context.Expectation : default(TSubject); + + var assertionContext = new AssertionContext( + context.SelectedMemberInfo, + (TSubject)context.Subject, + expectation, + context.Because, + context.BecauseArgs); + return assertionContext; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionContext.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionContext.cs.meta new file mode 100644 index 0000000..6e6ed31 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 70d6c7d6cd119db4c8ed0e0b289bbf5d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionResultSet.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionResultSet.cs new file mode 100644 index 0000000..2cab8c1 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionResultSet.cs @@ -0,0 +1,62 @@ +using System.Collections.Generic; +using System.Linq; +using FluentAssertions.Execution; + +namespace FluentAssertions.Equivalency +{ + /// + /// Represents a collection of assertion results obtained through a . + /// + internal class AssertionResultSet + { + private readonly Dictionary set = new Dictionary(); + + /// + /// Adds the failures (if any) resulting from executing an assertion within a + /// identified by a key. + /// + public void AddSet(object key, string[] failures) + { + set[key] = failures; + } + + /// + /// Returns the closest match compared to the set identified by the provided or + /// an empty array if one of the results represents a successful assertion. + /// + /// + /// The closest match is the set that contains the least amount of failures, or no failures at all, and preferably + /// the set that is identified by the . + /// + public string[] SelectClosestMatchFor(object key = null) + { + if (!ContainsSuccessfulSet) + { + KeyValuePair bestMatch = BestResultSets.Any(r => r.Key.Equals(key)) + ? BestResultSets.Single(r => r.Key.Equals(key)) + : BestResultSets.First(); + + return bestMatch.Value; + } + + return new string[0]; + } + + private KeyValuePair[] BestResultSets + { + get + { + int fewestFailures = set.Values.Min(r => r.Count()); + return set.Where(r => r.Value.Count() == fewestFailures).ToArray(); + } + } + + /// + /// Gets a value indicating whether this collection contains a set without any failures at all. + /// + public bool ContainsSuccessfulSet + { + get { return set.Values.Any(v => v.Length == 0); } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionResultSet.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionResultSet.cs.meta new file mode 100644 index 0000000..b6f1d59 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionResultSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0676132a4d1a3694d963e8b060003ba7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRule.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRule.cs new file mode 100644 index 0000000..ea1f2d2 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRule.cs @@ -0,0 +1,90 @@ +using System; +using System.Linq.Expressions; + +using FluentAssertions.Common; +using FluentAssertions.Execution; + +namespace FluentAssertions.Equivalency +{ + /// + /// General purpose implementation of that uses a predicate to determine whether + /// this rule applies to a particular property and executes an action to assert equality. + /// + /// The type of the subject. + [Obsolete("This class will be removed in a future version. Use `EquivalencyAssertionOptions.Using(Action>)` from the Fluent API instead.")] + public class AssertionRule : IAssertionRule + { + private readonly Func predicate; + private readonly Action> action; + private readonly string description; + + public AssertionRule(Expression> predicate, Action> action) + { + this.predicate = predicate.Compile(); + this.action = action; + description = "Invoke Action<" + typeof(TSubject).Name + "> when " + predicate.Body; + } + + public AssertionRule(Action> action) + { + Expression> predicate = + info => info.RuntimeType.IsSameOrInherits(typeof (string)); + + this.predicate = predicate.Compile(); + this.action = action; + description = "Invoke Action<" + typeof(TSubject).Name + "> when " + predicate.Body; + } + + /// + /// Defines how a subject's property is compared for equality with the same property of the expectation. + /// + /// + /// Provides details about the subject's property. + /// + /// + /// The value of the subject's property. + /// + /// + /// The value of a property on expectation object that was identified + /// + /// + /// Returns true if the rule was applied correctly and the assertion didn't cause any exceptions. + /// Returns false if this rule doesn't support the subject's type. + /// Throws if the rule did support the data type but assertion fails. + /// + public bool AssertEquality(IEquivalencyValidationContext context) + { + if (predicate(context)) + { + bool expectationisNull = ReferenceEquals(context.Expectation, null); + + bool succeeded = + AssertionScope.Current + .ForCondition(expectationisNull || context.Expectation.GetType().IsSameOrInherits(typeof(TSubject))) + .FailWith("Expected " + context.SelectedMemberDescription + " to be a {0}{reason}, but found a {1}", + !expectationisNull ? context.Expectation.GetType() : null, context.SelectedMemberInfo.MemberType); + + if (succeeded) + { + action(AssertionContext.CreateFromEquivalencyValidationContext(context)); + } + + return true; + } + + return false; + } + + /// + /// Returns a string that represents the current object. + /// + /// + /// A string that represents the current object. + /// + /// 2 + public override string ToString() + { + return description; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRule.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRule.cs.meta new file mode 100644 index 0000000..dedaa17 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: acf70fad37ca508418ced89979030587 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRuleEquivalencyStep.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRuleEquivalencyStep.cs new file mode 100644 index 0000000..2327abf --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRuleEquivalencyStep.cs @@ -0,0 +1,61 @@ +using System; +using System.Linq.Expressions; + +using FluentAssertions.Common; +using FluentAssertions.Execution; + +namespace FluentAssertions.Equivalency +{ + public class AssertionRuleEquivalencyStep : IEquivalencyStep + { + private readonly Expression> canHandle; + + private readonly Action> handle; + + public AssertionRuleEquivalencyStep(Expression> predicate, Action> action) + { + canHandle = predicate; + handle = action; + } + + public bool CanHandle(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config) + { + Func predicate = canHandle.Compile(); + + return ((context.SelectedMemberInfo != null) && predicate(context)); + } + + public bool Handle(IEquivalencyValidationContext context, IEquivalencyValidator parent, IEquivalencyAssertionOptions config) + { + bool expectationisNull = ReferenceEquals(context.Expectation, null); + + bool succeeded = + AssertionScope.Current.ForCondition( + expectationisNull || context.Expectation.GetType().IsSameOrInherits(typeof(TSubject))) + .FailWith( + "Expected " + context.SelectedMemberDescription + " to be a {0}{reason}, but found a {1}", + !expectationisNull ? context.Expectation.GetType() : null, + context.SelectedMemberInfo.MemberType); + + if (succeeded) + { + handle(AssertionContext.CreateFromEquivalencyValidationContext(context)); + return true; + } + + return false; + } + + /// + /// Returns a string that represents the current object. + /// + /// + /// A string that represents the current object. + /// + /// 2 + public override string ToString() + { + return "Invoke Action<" + typeof(TSubject).Name + "> when " + canHandle.Body; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRuleEquivalencyStep.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRuleEquivalencyStep.cs.meta new file mode 100644 index 0000000..f3843f3 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRuleEquivalencyStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cb274c7737ff49f4d8d0bffe37774f75 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRuleEquivalencyStepAdapter.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRuleEquivalencyStepAdapter.cs new file mode 100644 index 0000000..02d0ab7 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRuleEquivalencyStepAdapter.cs @@ -0,0 +1,30 @@ +namespace FluentAssertions.Equivalency +{ + /// + /// Adaptor allowing an IAssertionRule to be used where a IEquivalencyStep is required. + /// + internal class AssertionRuleEquivalencyStepAdapter : IEquivalencyStep + { + private readonly IAssertionRule assertionRule; + + public AssertionRuleEquivalencyStepAdapter(IAssertionRule assertionRule) + { + this.assertionRule = assertionRule; + } + + public bool CanHandle(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config) + { + return (context.SelectedMemberInfo != null); + } + + public bool Handle(IEquivalencyValidationContext context, IEquivalencyValidator parent, IEquivalencyAssertionOptions config) + { + return assertionRule.AssertEquality(context); + } + + public override string ToString() + { + return assertionRule.ToString(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRuleEquivalencyStepAdapter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRuleEquivalencyStepAdapter.cs.meta new file mode 100644 index 0000000..06600d9 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/AssertionRuleEquivalencyStepAdapter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 62fb7fbc129abae4a916c45632b731cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberAssertionOptionsDecorator.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberAssertionOptionsDecorator.cs new file mode 100644 index 0000000..d1fc863 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberAssertionOptionsDecorator.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using FluentAssertions.Equivalency.Matching; +using FluentAssertions.Equivalency.Ordering; +using FluentAssertions.Equivalency.Selection; + +namespace FluentAssertions.Equivalency +{ + internal class CollectionMemberAssertionOptionsDecorator : IEquivalencyAssertionOptions + { + private readonly IEquivalencyAssertionOptions inner; + + public CollectionMemberAssertionOptionsDecorator(IEquivalencyAssertionOptions inner) + { + this.inner = inner; + } + + public IEnumerable SelectionRules + { + get + { + return inner.SelectionRules.Select(rule => new CollectionMemberSelectionRuleDecorator(rule)).ToArray(); + } + } + + public IEnumerable MatchingRules + { + get { return inner.MatchingRules.Select(rule => new CollectionMemberMatchingRuleDecorator(rule)).ToArray(); } + } + + public OrderingRuleCollection OrderingRules + { + get + { + return new OrderingRuleCollection(inner.OrderingRules.Select(rule => new CollectionMemberOrderingRuleDecorator(rule))); + } + } + + public IEnumerable UserEquivalencySteps + { + get { return inner.UserEquivalencySteps.Select(step => new CollectionMemberAssertionRuleDecorator(step)).ToArray(); } + } + + public bool IsRecursive + { + get { return inner.IsRecursive; } + } + + public bool AllowInfiniteRecursion + { + get { return inner.AllowInfiniteRecursion; } + } + + public CyclicReferenceHandling CyclicReferenceHandling + { + get { return inner.CyclicReferenceHandling; } + } + + public EnumEquivalencyHandling EnumEquivalencyHandling + { + get { return inner.EnumEquivalencyHandling; } + } + + public bool UseRuntimeTyping + { + get { return inner.UseRuntimeTyping; } + } + + public bool IncludeProperties + { + get { return inner.IncludeProperties; } + } + + public bool IncludeFields + { + get { return inner.IncludeFields; } + } + + public bool IsValueType(Type type) + { + return inner.IsValueType(type); + } + + public ITraceWriter TraceWriter => inner.TraceWriter; + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberAssertionOptionsDecorator.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberAssertionOptionsDecorator.cs.meta new file mode 100644 index 0000000..bdb88e4 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberAssertionOptionsDecorator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59dbe8b1dda482f4ebcd824142f2dfc9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberAssertionRuleDecorator.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberAssertionRuleDecorator.cs new file mode 100644 index 0000000..78c9d04 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberAssertionRuleDecorator.cs @@ -0,0 +1,47 @@ +namespace FluentAssertions.Equivalency +{ + internal class CollectionMemberAssertionRuleDecorator : IEquivalencyStep + { + private readonly IEquivalencyStep eqivalencyStep; + + public CollectionMemberAssertionRuleDecorator(IEquivalencyStep equivalencyStep) + { + eqivalencyStep = equivalencyStep; + } + + public bool CanHandle(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config) + { + return eqivalencyStep.CanHandle(CreateAdjustedCopy(context), config); + } + + public bool Handle( + IEquivalencyValidationContext context, + IEquivalencyValidator parent, + IEquivalencyAssertionOptions config) + { + var equivalencyValidationContext = CreateAdjustedCopy(context); + + return eqivalencyStep.Handle(equivalencyValidationContext, parent, config); + } + + private static EquivalencyValidationContext CreateAdjustedCopy(IEquivalencyValidationContext context) + { + return new EquivalencyValidationContext + { + CompileTimeType = context.CompileTimeType, + Expectation = context.Expectation, + SelectedMemberDescription = context.SelectedMemberDescription, + SelectedMemberInfo = context.SelectedMemberInfo, + SelectedMemberPath = CollectionMemberSubjectInfo.GetAdjustedPropertyPath(context.SelectedMemberPath), + Because = context.Because, + BecauseArgs = context.BecauseArgs, + Subject = context.Subject + }; + } + + public override string ToString() + { + return eqivalencyStep.ToString(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberAssertionRuleDecorator.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberAssertionRuleDecorator.cs.meta new file mode 100644 index 0000000..cf387b9 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberAssertionRuleDecorator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c010a519878fd042abb5e49983c455c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberSubjectInfo.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberSubjectInfo.cs new file mode 100644 index 0000000..8a0891e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberSubjectInfo.cs @@ -0,0 +1,32 @@ +using System; +using System.Reflection; + +namespace FluentAssertions.Equivalency +{ + internal class CollectionMemberSubjectInfo : ISubjectInfo + { + public CollectionMemberSubjectInfo(ISubjectInfo subjectInfo) + { + CompileTimeType = subjectInfo.CompileTimeType; + SelectedMemberDescription = subjectInfo.SelectedMemberDescription; + SelectedMemberInfo = subjectInfo.SelectedMemberInfo; + SelectedMemberPath = GetAdjustedPropertyPath(subjectInfo.SelectedMemberPath); + RuntimeType = subjectInfo.RuntimeType; + } + + internal static string GetAdjustedPropertyPath(string propertyPath) + { + return propertyPath.Substring(propertyPath.IndexOf(".", StringComparison.Ordinal) + 1); + } + + public SelectedMemberInfo SelectedMemberInfo { get; private set; } + + public string SelectedMemberPath { get; private set; } + + public string SelectedMemberDescription { get; private set; } + + public Type CompileTimeType { get; private set; } + + public Type RuntimeType { get; private set; } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberSubjectInfo.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberSubjectInfo.cs.meta new file mode 100644 index 0000000..869ddfa --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/CollectionMemberSubjectInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2784d1961158805418a95efb660787b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/CyclicReferenceHandling.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/CyclicReferenceHandling.cs new file mode 100644 index 0000000..c21eff0 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/CyclicReferenceHandling.cs @@ -0,0 +1,18 @@ +namespace FluentAssertions.Equivalency +{ + /// + /// Indication of how cyclic references should be handled when validating equality of nested properties. + /// + public enum CyclicReferenceHandling + { + /// + /// Cyclic references will be ignored. + /// + Ignore, + + /// + /// Cyclic references will result in an exception. + /// + ThrowException + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/CyclicReferenceHandling.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/CyclicReferenceHandling.cs.meta new file mode 100644 index 0000000..a4c4771 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/CyclicReferenceHandling.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19fa0eb290f94cb448a1296449bb81ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/DictionaryEquivalencyStep.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/DictionaryEquivalencyStep.cs new file mode 100644 index 0000000..b4d66c0 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/DictionaryEquivalencyStep.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections; +using System.Diagnostics.CodeAnalysis; +using System.Reflection; +using FluentAssertions.Execution; + +namespace FluentAssertions.Equivalency +{ + public class DictionaryEquivalencyStep : IEquivalencyStep + { + /// + /// Gets a value indicating whether this step can handle the current subject and/or expectation. + /// + public bool CanHandle(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config) + { + Type subjectType = config.GetSubjectType(context); + + return typeof(IDictionary).IsAssignableFrom(subjectType); + } + + /// + /// Applies a step as part of the task to compare two objects for structural equality. + /// + /// + /// Should return true if the subject matches the expectation or if no additional assertions + /// have to be executed. Should return false otherwise. + /// + /// + /// May throw when preconditions are not met or if it detects mismatching data. + /// + [SuppressMessage("ReSharper", "PossibleNullReferenceException")] + public virtual bool Handle(IEquivalencyValidationContext context, IEquivalencyValidator parent, IEquivalencyAssertionOptions config) + { + var subject = (IDictionary)context.Subject; + var expectation = context.Expectation as IDictionary; + + if (PreconditionsAreMet(context, expectation, subject)) + { + foreach (object key in subject.Keys) + { + if (config.IsRecursive) + { + context.TraceSingle(path => $"Recursing into dictionary item {key} at {path}"); + parent.AssertEqualityUsing(context.CreateForDictionaryItem(key, subject[key], expectation[key])); + } + else + { + context.TraceSingle(path => $"Comparing dictionary item {key} at {path} between subject and expectation"); + subject[key].Should().Be(expectation[key], context.Because, context.BecauseArgs); + } + } + } + + return true; + } + + private static bool PreconditionsAreMet(IEquivalencyValidationContext context, IDictionary expectation, IDictionary subject) + { + return (AssertIsDictionary(expectation) && AssertSameLength(expectation, subject)); + } + + private static bool AssertIsDictionary(IDictionary expectation) + { + return AssertionScope.Current + .ForCondition(expectation != null) + .FailWith("{context:subject} is a dictionary and cannot be compared with a non-dictionary type."); + } + + private static bool AssertSameLength(IDictionary expectation, IDictionary subject) + { + return AssertionScope.Current + .ForCondition(subject.Keys.Count == expectation.Keys.Count) + .FailWith("Expected {context:subject} to be a dictionary with {0} item(s), but it only contains {1} item(s).", + expectation.Keys.Count, subject.Keys.Count); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/DictionaryEquivalencyStep.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/DictionaryEquivalencyStep.cs.meta new file mode 100644 index 0000000..d35c270 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/DictionaryEquivalencyStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a9601eb671d179b41bddac49b29c009b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumEqualityStep.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumEqualityStep.cs new file mode 100644 index 0000000..388b3e2 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumEqualityStep.cs @@ -0,0 +1,57 @@ +#region + +using System; +using System.Globalization; + +#endregion + +namespace FluentAssertions.Equivalency +{ + public class EnumEqualityStep : IEquivalencyStep + { + /// + /// Gets a value indicating whether this step can handle the current subject and/or expectation. + /// + public bool CanHandle(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config) + { + Type subjectType = config.GetSubjectType(context); + + return ((subjectType != null) && subjectType.IsEnum()) || + ((context.Expectation != null) && context.Expectation.GetType().IsEnum()); + } + + /// + /// Applies a step as part of the task to compare two objects for structural equality. + /// + /// + /// Should return true if the subject matches the expectation or if no additional assertions + /// have to be executed. Should return false otherwise. + /// + /// + /// May throw when preconditions are not met or if it detects mismatching data. + /// + public bool Handle(IEquivalencyValidationContext context, IEquivalencyValidator parent, + IEquivalencyAssertionOptions config) + { + switch (config.EnumEquivalencyHandling) + { + case EnumEquivalencyHandling.ByValue: + decimal? subjectsUnderlyingValue = (context.Subject != null) ? Convert.ToDecimal(context.Subject) : (decimal?)null; + decimal? expectationsUnderlyingValue = (context.Expectation != null) ? Convert.ToDecimal(context.Expectation) : (decimal?)null; + + subjectsUnderlyingValue.Should().Be(expectationsUnderlyingValue, context.Because, context.BecauseArgs); + break; + + case EnumEquivalencyHandling.ByName: + context.Subject.ToString().Should().Be(context.Expectation.ToString(), context.Because, context.BecauseArgs); + break; + + default: + throw new InvalidOperationException(string.Format("Don't know how to handle {0}", + config.EnumEquivalencyHandling)); + } + + return true; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumEqualityStep.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumEqualityStep.cs.meta new file mode 100644 index 0000000..f73b5db --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumEqualityStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1d0cb3edf9c7b6c4ea4514ee233fd653 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumEquivalencyHandling.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumEquivalencyHandling.cs new file mode 100644 index 0000000..66a4c95 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumEquivalencyHandling.cs @@ -0,0 +1,8 @@ +namespace FluentAssertions.Equivalency +{ + public enum EnumEquivalencyHandling + { + ByValue, + ByName + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumEquivalencyHandling.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumEquivalencyHandling.cs.meta new file mode 100644 index 0000000..ac87f31 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumEquivalencyHandling.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34f368a019147d546bdb079579451ca5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumerableEquivalencyStep.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumerableEquivalencyStep.cs new file mode 100644 index 0000000..d22e86e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumerableEquivalencyStep.cs @@ -0,0 +1,74 @@ +using System; + +using System.Collections; +using System.Linq; +using System.Reflection; +using FluentAssertions.Execution; + +namespace FluentAssertions.Equivalency +{ + public class EnumerableEquivalencyStep : IEquivalencyStep + { + /// + /// Gets a value indicating whether this step can handle the verificationScope subject and/or expectation. + /// + public bool CanHandle(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config) + { + Type subjectType = config.GetSubjectType(context); + + return IsCollection(subjectType); + } + + /// + /// Applies a step as part of the task to compare two objects for structural equality. + /// + /// + /// Should return true if the subject matches the expectation or if no additional assertions + /// have to be executed. Should return false otherwise. + /// + /// + /// May throw when preconditions are not met or if it detects mismatching data. + /// + public bool Handle(IEquivalencyValidationContext context, IEquivalencyValidator parent, IEquivalencyAssertionOptions config) + { + if (AssertExpectationIsCollection(context.Expectation)) + { + var validator = new EnumerableEquivalencyValidator(parent, context) + { + Recursive = context.IsRoot || config.IsRecursive, + OrderingRules = config.OrderingRules + }; + + validator.Execute(ToArray(context.Subject), ToArray(context.Expectation)); + } + + return true; + } + + private static bool AssertExpectationIsCollection(object expectation) + { + bool conditionMet = AssertionScope.Current + .ForCondition(!ReferenceEquals(expectation, null)) + .FailWith("{context:Subject} is a collection and cannot be compared to ."); + + if (conditionMet) + { + conditionMet = AssertionScope.Current + .ForCondition(IsCollection(expectation.GetType())) + .FailWith("{context:Subject} is a collection and cannot be compared with a non-collection type."); + } + + return conditionMet; + } + + private static bool IsCollection(Type type) + { + return !typeof(string).IsAssignableFrom(type) && typeof(IEnumerable).IsAssignableFrom(type); + } + + internal static object[] ToArray(object value) + { + return !ReferenceEquals(value, null) ? ((IEnumerable)value).Cast().ToArray() : null; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumerableEquivalencyStep.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumerableEquivalencyStep.cs.meta new file mode 100644 index 0000000..ca010ec --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumerableEquivalencyStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11236c9d602f5934ab70d6ef98f44f10 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumerableEquivalencyValidator.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumerableEquivalencyValidator.cs new file mode 100644 index 0000000..7841e1d --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumerableEquivalencyValidator.cs @@ -0,0 +1,144 @@ +using System.Collections.Generic; +using System.Linq; + +using FluentAssertions.Execution; + +namespace FluentAssertions.Equivalency +{ + /// + /// Executes a single equivalency assertion on two collections, optionally recursive and with or without strict ordering. + /// + internal class EnumerableEquivalencyValidator + { + #region Private Definitions + + private readonly IEquivalencyValidator parent; + private readonly IEquivalencyValidationContext context; + + #endregion + + public EnumerableEquivalencyValidator(IEquivalencyValidator parent, IEquivalencyValidationContext context) + { + this.parent = parent; + this.context = context; + Recursive = false; + } + + public bool Recursive { get; set; } + + public OrderingRuleCollection OrderingRules { get; set; } + + public void Execute(T[] subject, object[] expectation) + { + if (AssertIsNotNull(subject) && AssertLengthEquality(subject.Length, expectation.Length)) + { + if (Recursive) + { + using (context.TraceBlock(path => $"Structurally comparing {subject} and expectation {expectation} at {path}")) + { + AssertElementGraphEquivalency(subject, expectation); + } + } + else + { + using (context.TraceBlock(path => $"Comparing subject {subject} and expectation {expectation} at {path} using simple value equality")) + { + subject.Should().BeEquivalentTo(expectation); + } + } + } + } + + private bool AssertIsNotNull(object subject) + { + return AssertionScope.Current + .ForCondition(!ReferenceEquals(subject, null)) + .FailWith("Expected {context:subject} to be a collection, but found ."); + } + + private bool AssertLengthEquality(int subjectLength, int expectationLength) + { + return AssertionScope.Current + .ForCondition(subjectLength == expectationLength) + .FailWith("Expected {context:subject} to be a collection with {0} item(s){reason}, but found {1}.", + expectationLength, subjectLength); + } + + private void AssertElementGraphEquivalency(T[] subjects, object[] expectations) + { + matchedSubjectIndexes = new HashSet(); + + foreach (int index in Enumerable.Range(0, expectations.Length)) + { + object expectation = expectations[index]; + + if (!OrderingRules.IsOrderingStrictFor(context)) + { + using (context.TraceBlock(path => $"Finding the best match of {expectation} within all items in {subjects} at {path}[{index}]")) + { + LooselyMatchAgainst(subjects, expectation, index); + } + } + else + { + using (context.TraceBlock(path => $"Strictly comparing expectation {expectation} at {path} to item with index {index} in {subjects}")) + { + StrictlyMatchAgainst(subjects, expectation, index); + } + } + } + } + + private HashSet matchedSubjectIndexes; + + private void LooselyMatchAgainst(IList subjects, object expectation, int expectationIndex) + { + var results = new AssertionResultSet(); + + foreach (int index in Enumerable.Range(0, subjects.Count)) + { + if (!matchedSubjectIndexes.Contains(index)) + { + T subject = subjects[index]; + + using (context.TraceBlock(path => $"Comparing subject at {path}[{index}] with the expectation at {path}[{expectationIndex}]")) + { + string[] failures = TryToMatch(subject, expectation, expectationIndex); + + results.AddSet(index, failures); + if (results.ContainsSuccessfulSet) + { + context.TraceSingle(_ => $"It's a match"); + matchedSubjectIndexes.Add(index); + break; + } + else + { + context.TraceSingle(_ => $"Contained {failures.Length} failures"); + } + } + } + } + + foreach (string failure in results.SelectClosestMatchFor(expectationIndex)) + { + AssertionScope.Current.AddFailure(failure); + } + } + + private string[] TryToMatch(T subject, object expectation, int expectationIndex) + { + using (var scope = new AssertionScope()) + { + parent.AssertEqualityUsing(context.CreateForCollectionItem(expectationIndex.ToString(), subject, expectation)); + + return scope.Discard(); + } + } + + private void StrictlyMatchAgainst(T[] subjects, object expectation, int expectationIndex) + { + parent.AssertEqualityUsing(context.CreateForCollectionItem(expectationIndex.ToString(), subjects[expectationIndex], expectation)); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumerableEquivalencyValidator.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumerableEquivalencyValidator.cs.meta new file mode 100644 index 0000000..f72b093 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/EnumerableEquivalencyValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 67c109b6b36a6a146b0af98eeb0d66a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyAssertionOptions.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyAssertionOptions.cs new file mode 100644 index 0000000..29ac8da --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyAssertionOptions.cs @@ -0,0 +1,98 @@ +#region + +using System; +using System.Collections.Generic; +using System.Linq.Expressions; +using FluentAssertions.Common; +using FluentAssertions.Equivalency.Ordering; +using FluentAssertions.Equivalency.Selection; + +#endregion + +namespace FluentAssertions.Equivalency +{ + /// + /// Represents the run-time type-specific behavior of a structural equivalency assertion. + /// + public class EquivalencyAssertionOptions : + SelfReferenceEquivalencyAssertionOptions> + { + public EquivalencyAssertionOptions() + { + } + + internal EquivalencyAssertionOptions(IEquivalencyAssertionOptions defaults) : base(defaults) + { + } + + /// + /// Excludes the specified (nested) member from the structural equality check. + /// + public EquivalencyAssertionOptions Excluding(Expression> expression) + { + AddSelectionRule(new ExcludeMemberByPathSelectionRule(expression.GetMemberPath())); + return this; + } + + /// + /// Includes the specified member in the equality check. + /// + /// + /// This overrides the default behavior of including all declared members. + /// + public EquivalencyAssertionOptions Including(Expression> expression) + { + AddSelectionRule(new IncludeMemberByPathSelectionRule(expression.GetMemberPath())); + return this; + } + + /// + /// Includes the specified member in the equality check. + /// + /// + /// This overrides the default behavior of including all declared members. + /// + public EquivalencyAssertionOptions Including(Expression> predicate) + { + AddSelectionRule(new IncludeMemberByPredicateSelectionRule(predicate)); + return this; + } + + /// + /// Causes the collection identified by to be compared in the order + /// in which the items appear in the expectation. + /// + public EquivalencyAssertionOptions WithStrictOrderingFor( + Expression> expression) + { + orderingRules.Add(new PathBasedOrderingRule(expression.GetMemberPath())); + return this; + } + + /// + /// Creates a new set of options based on the current instance which acts on a + /// + /// + public EquivalencyAssertionOptions> AsCollection() + { + return new EquivalencyAssertionOptions>( + new CollectionMemberAssertionOptionsDecorator(this)); + } + } + + /// + /// Represents the run-time type-agnostic behavior of a structural equivalency assertion. + /// + public class EquivalencyAssertionOptions : SelfReferenceEquivalencyAssertionOptions + { + public EquivalencyAssertionOptions() + { + IncludingNestedObjects(); + + IncludingFields(); + IncludingProperties(); + + RespectingDeclaredTypes(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyAssertionOptions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyAssertionOptions.cs.meta new file mode 100644 index 0000000..31be74d --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyAssertionOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b685c6eac6f45b64687b8d7ff8233810 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyAssertionOptionsExtentions.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyAssertionOptionsExtentions.cs new file mode 100644 index 0000000..2c8711a --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyAssertionOptionsExtentions.cs @@ -0,0 +1,22 @@ +using System; + +namespace FluentAssertions.Equivalency +{ + public static class EquivalencyAssertionOptionsExtentions + { + /// + /// Returns either the run-time or compile-time type of the subject based on the options provided by the caller. + /// + public static Type GetSubjectType(this IEquivalencyAssertionOptions config, ISubjectInfo context) + { + bool useRuntimeType = ShouldUseRuntimeType(config); + + return useRuntimeType ? context.RuntimeType : context.CompileTimeType; + } + + private static bool ShouldUseRuntimeType(IEquivalencyAssertionOptions config) + { + return config.UseRuntimeTyping; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyAssertionOptionsExtentions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyAssertionOptionsExtentions.cs.meta new file mode 100644 index 0000000..0fc0aef --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyAssertionOptionsExtentions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a10844b59cc3a0543a4a070fd9fef032 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidationContext.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidationContext.cs new file mode 100644 index 0000000..af69494 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidationContext.cs @@ -0,0 +1,125 @@ +using System; + +namespace FluentAssertions.Equivalency +{ + public class EquivalencyValidationContext : IEquivalencyValidationContext + { + private Type compileTimeType; + + public EquivalencyValidationContext() + { + SelectedMemberDescription = ""; + SelectedMemberPath = ""; + } + + public SelectedMemberInfo SelectedMemberInfo { get; set; } + + public string SelectedMemberPath { get; set; } + + public string SelectedMemberDescription { get; set; } + + /// + /// Gets the value of the + /// + public object Subject { get; set; } + + /// + /// Gets the value of the . + /// + public object Expectation { get; set; } + + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + public string Because { get; set; } + + /// + /// Zero or more objects to format using the placeholders in . + /// + public object[] BecauseArgs { get; set; } + + /// + /// Gets a value indicating whether the current context represents the root of the object graph. + /// + public bool IsRoot + { + get + { + // SMELL: That prefix should be obtained from some kind of constant + return (SelectedMemberDescription.Length == 0) || + (RootIsCollection && SelectedMemberDescription.StartsWith("item[") && + !SelectedMemberDescription.Contains(".")); + } + } + + /// + /// Gets the compile-time type of the current object. If the current object is not the root object and the type is not , + /// then it returns the same as the property does. + /// + public Type CompileTimeType + { + get + { + return ((compileTimeType != typeof(object)) || ReferenceEquals(Subject, null)) ? compileTimeType : RuntimeType; + } + set { compileTimeType = value; } + } + + /// + /// Gets the run-time type of the current object. + /// + public Type RuntimeType + { + get + { + if (Subject != null) + { + return Subject.GetType(); + } + + if (SelectedMemberInfo != null) + { + return SelectedMemberInfo.MemberType; + } + + return CompileTimeType; + } + } + + /// + /// Gets or sets a value indicating that the root of the graph is a collection so all type-specific options apply on + /// the collection type and not on the root itself. + /// + public bool RootIsCollection { get; set; } + + public ITraceWriter Tracer { get; set; } + + public void TraceSingle(GetTraceMessage getTraceMessage) + { + if (Tracer != null) + { + string path = SelectedMemberDescription.Length > 0 ? SelectedMemberDescription : "root"; + Tracer.AddSingle($"{getTraceMessage(path)}"); + } + } + + public IDisposable TraceBlock(GetTraceMessage getTraceMessage) + { + if (Tracer != null) + { + string path = SelectedMemberDescription.Length > 0 ? SelectedMemberDescription : "root"; + return Tracer.AddBlock(getTraceMessage(path)); + } + else + { + return new Disposable(() => {}); + } + } + + public override string ToString() + { + return $"{{Path=\"{SelectedMemberDescription}\", Subject={Subject}, Expectation={Expectation}}}"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidationContext.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidationContext.cs.meta new file mode 100644 index 0000000..b43b3fc --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidationContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e21ec3d937a17340a14cb7b5f3ad895 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidationContextExtentions.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidationContextExtentions.cs new file mode 100644 index 0000000..868701c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidationContextExtentions.cs @@ -0,0 +1,91 @@ +using System; +using FluentAssertions.Common; + +namespace FluentAssertions.Equivalency +{ + internal static class EquivalencyValidationContextExtentions + { + internal static IEquivalencyValidationContext CreateForNestedMember(this IEquivalencyValidationContext context, + SelectedMemberInfo nestedMember, SelectedMemberInfo matchingProperty) + { + string memberDescription = nestedMember.Name; + string propertyPath = (context.SelectedMemberDescription.Length == 0) ? "member " : context.SelectedMemberDescription + "."; + + return new EquivalencyValidationContext + { + SelectedMemberInfo = nestedMember, + Subject = nestedMember.GetValue(context.Subject, null), + Expectation = matchingProperty.GetValue(context.Expectation, null), + SelectedMemberPath = context.SelectedMemberPath.Combine(memberDescription, "."), + SelectedMemberDescription = propertyPath + memberDescription, + Because = context.Because, + BecauseArgs = context.BecauseArgs, + CompileTimeType = nestedMember.MemberType, + RootIsCollection = context.RootIsCollection, + Tracer = context.Tracer + }; + } + + internal static IEquivalencyValidationContext CreateForCollectionItem(this IEquivalencyValidationContext context, + string index, T subject, object expectation) + { + string memberDescription = "[" + index + "]"; + string propertyPath = (context.SelectedMemberDescription.Length == 0) ? "item" : context.SelectedMemberDescription + String.Empty; + + return new EquivalencyValidationContext + { + SelectedMemberInfo = context.SelectedMemberInfo, + Subject = subject, + Expectation = expectation, + SelectedMemberPath = context.SelectedMemberPath.Combine(memberDescription, String.Empty), + SelectedMemberDescription = propertyPath + memberDescription, + Because = context.Because, + BecauseArgs = context.BecauseArgs, + CompileTimeType = typeof (T), + RootIsCollection = context.RootIsCollection, + Tracer = context.Tracer + }; + } + + internal static IEquivalencyValidationContext CreateForDictionaryItem( + this IEquivalencyValidationContext context, + TKey key, + TValue subject, + object expectation) + { + string memberDescription = "[" + key + "]"; + string propertyPath = (context.SelectedMemberDescription.Length == 0) ? "pair" : context.SelectedMemberDescription + String.Empty; + + return new EquivalencyValidationContext + { + SelectedMemberInfo = context.SelectedMemberInfo, + Subject = subject, + Expectation = expectation, + SelectedMemberPath = context.SelectedMemberPath.Combine(memberDescription, String.Empty), + SelectedMemberDescription = propertyPath + memberDescription, + Because = context.Because, + BecauseArgs = context.BecauseArgs, + CompileTimeType = typeof (TValue), + RootIsCollection = context.RootIsCollection, + Tracer = context.Tracer + }; + } + + internal static IEquivalencyValidationContext CreateWithDifferentSubject(this IEquivalencyValidationContext context, + object subject, Type compileTimeType) + { + return new EquivalencyValidationContext + { + CompileTimeType = compileTimeType, + Expectation = context.Expectation, + SelectedMemberDescription = context.SelectedMemberDescription, + SelectedMemberInfo = context.SelectedMemberInfo, + SelectedMemberPath = context.SelectedMemberPath, + Because = context.Because, + BecauseArgs = context.BecauseArgs, + Subject = subject, + Tracer = context.Tracer + }; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidationContextExtentions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidationContextExtentions.cs.meta new file mode 100644 index 0000000..b922afe --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidationContextExtentions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e57117a4e1be4e243a041ab2a578fca2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidator.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidator.cs new file mode 100644 index 0000000..97a4087 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidator.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using FluentAssertions.Execution; + +namespace FluentAssertions.Equivalency +{ + /// + /// Is responsible for validating the equality of one or more properties of a subject with another object. + /// + public class EquivalencyValidator : IEquivalencyValidator + { + #region Private Definitions + + private const int MaxDepth = 10; + + private readonly IEquivalencyAssertionOptions config; + + #endregion + + public EquivalencyValidator(IEquivalencyAssertionOptions config) + { + this.config = config; + } + + public void AssertEquality(EquivalencyValidationContext context) + { + using (var scope = new AssertionScope()) + { + scope.AddReportable("configuration", config.ToString()); + scope.AddNonReportable("objects", new ObjectTracker(config.CyclicReferenceHandling)); + + scope.BecauseOf(context.Because, context.BecauseArgs); + + AssertEqualityUsing(context); + + if (context.Tracer != null) + { + scope.AddReportable("trace", context.Tracer.ToString()); + } + } + } + + public void AssertEqualityUsing(IEquivalencyValidationContext context) + { + if (ContinueRecursion(context.SelectedMemberPath)) + { + AssertionScope scope = AssertionScope.Current; + scope.AddNonReportable("context", (context.SelectedMemberDescription.Length == 0) ? "subject" : context.SelectedMemberDescription); + scope.AddNonReportable("subject", context.Subject); + scope.AddNonReportable("expectation", context.Expectation); + + var objectTracker = scope.Get("objects"); + + if (!objectTracker.IsCyclicReference(new ObjectReference(context.Subject, context.SelectedMemberPath))) + { + bool wasHandled = false; + + foreach (var step in AssertionOptions.EquivalencySteps) + { + if (step.CanHandle(context, config)) + { + if (step.Handle(context, this, config)) + { + wasHandled = true; + break; + } + } + } + + if (!wasHandled) + { + Execute.Assertion.FailWith( + "No IEquivalencyStep was found to handle the context. " + + "This is likely a bug in Fluent Assertions."); + } + } + } + } + + private bool ContinueRecursion(string memberAccessPath) + { + if (config.AllowInfiniteRecursion || !HasReachedMaximumRecursionDepth(memberAccessPath)) + { + return true; + } + + AssertionScope.Current.FailWith( + "The maximum recursion depth was reached. " + + "The maximum recursion depth limitation prevents stack overflow from " + + "occuring when certain types of cycles exist in the object graph " + + "or the object graph's depth is very high or infinite. " + + "This limitation may be disabled using the config parameter." + + Environment.NewLine + Environment.NewLine + + "The member access chain when max depth was hit was: " + + memberAccessPath); + + return false; + } + + private static bool HasReachedMaximumRecursionDepth(string propertyPath) + { + int depth = propertyPath.Cast().Count(chr => chr == '.'); + + return (depth >= MaxDepth); + } + } +} diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidator.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidator.cs.meta new file mode 100644 index 0000000..74a28bb --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/EquivalencyValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 63b953d4f78bd754b88e2e43d6343a11 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/FieldSelectedMemberInfo.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/FieldSelectedMemberInfo.cs new file mode 100644 index 0000000..ce3324a --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/FieldSelectedMemberInfo.cs @@ -0,0 +1,45 @@ +using System; +using System.Linq; +using System.Reflection; +using FluentAssertions.Common; + +namespace FluentAssertions.Equivalency +{ + /// + /// Provides an ISelectedMemberInfo for FieldInfo objects + /// + internal class FieldSelectedMemberInfo : MemberInfoSelectedMemberInfo + { + private readonly FieldInfo fieldInfo; + + public FieldSelectedMemberInfo(FieldInfo fieldInfo) : base(fieldInfo) + { + this.fieldInfo = fieldInfo; + } + + public override object GetValue(object obj, object[] index) + { + if ((index != null) && index.Any()) + { + throw new TargetParameterCountException("Parameter count mismatch."); + } + + return fieldInfo.GetValue(obj); + } + + public override Type MemberType + { + get { return fieldInfo.FieldType; } + } + + internal override CSharpAccessModifier GetAccessModifier + { + get { return fieldInfo.GetCSharpAccessModifier(); } + } + + internal override CSharpAccessModifier SetAccessModifier + { + get { return fieldInfo.GetCSharpAccessModifier(); } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/FieldSelectedMemberInfo.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/FieldSelectedMemberInfo.cs.meta new file mode 100644 index 0000000..bff3395 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/FieldSelectedMemberInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d2b25cddd8824a245956f539ee51ed18 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/GenericDictionaryEquivalencyStep.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/GenericDictionaryEquivalencyStep.cs new file mode 100644 index 0000000..64b761c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/GenericDictionaryEquivalencyStep.cs @@ -0,0 +1,223 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using FluentAssertions.Common; +using FluentAssertions.Execution; + +namespace FluentAssertions.Equivalency +{ + /// + /// I think (but did not try) this would have been easier using 'dynamic' but that is + /// precluded by some of the PCL targets. + /// + public class GenericDictionaryEquivalencyStep : IEquivalencyStep + { + public bool CanHandle(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config) + { + Type subjectType = config.GetSubjectType(context); + + return ((context.Subject != null) && GetIDictionaryInterfaces(subjectType).Any()); + } + + private static Type[] GetIDictionaryInterfaces(Type type) + { + return Common.TypeExtensions.GetClosedGenericInterfaces( + type, + typeof(IDictionary<,>)); + } + + public bool Handle(IEquivalencyValidationContext context, IEquivalencyValidator parent, IEquivalencyAssertionOptions config) + { + if (PreconditionsAreMet(context, config)) + { + AssertDictionaryEquivalence(context, parent, config); + } + + return true; + } + + private static bool PreconditionsAreMet(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config) + { + Type subjectType = config.GetSubjectType(context); + + return (AssertImplementsOnlyOneDictionaryInterface(context.Subject) + && AssertExpectationIsNotNull(context.Subject, context.Expectation) + && AssertIsCompatiblyTypedDictionary(subjectType, context.Expectation) + && AssertSameLength(context.Subject, subjectType, context.Expectation)); + } + + private static bool AssertExpectationIsNotNull(object subject, object expectation) + { + return AssertionScope.Current + .ForCondition(!ReferenceEquals(expectation, null)) + .FailWith("Expected {context:Subject} to be {0}, but found {1}.", null, subject); + } + + private static bool AssertImplementsOnlyOneDictionaryInterface(object subject) + { + Type[] interfaces = GetIDictionaryInterfaces(subject.GetType()); + bool multipleInterfaces = (interfaces.Count() > 1); + + if (multipleInterfaces) + { + AssertionScope.Current.FailWith( + string.Format( + "{{context:Subject}} implements multiple dictionary types. " + + "It is not known which type should be use for equivalence.{0}" + + "The following IDictionary interfaces are implemented: {1}", + Environment.NewLine, + String.Join(", ", (IEnumerable)interfaces))); + return false; + } + + return true; + } + + private static bool AssertIsCompatiblyTypedDictionary(Type subjectType, object expectation) + { + Type subjectDictionaryType = GetIDictionaryInterface(subjectType); + Type subjectKeyType = GetDictionaryKeyType(subjectDictionaryType); + + Type[] expectationDictionaryInterfaces = GetIDictionaryInterfaces(expectation.GetType()); + + if (!expectationDictionaryInterfaces.Any()) + { + AssertionScope.Current.FailWith( + "{context:subject} is a dictionary and cannot be compared with a non-dictionary type."); + return false; + } + + Type[] suitableDictionaryInterfaces = expectationDictionaryInterfaces.Where( + @interface => GetDictionaryKeyType(@interface).IsAssignableFrom(subjectKeyType)).ToArray(); + + if (suitableDictionaryInterfaces.Count() > 1) + { + // Code could be written to handle this better, but is it really worth the effort? + AssertionScope.Current.FailWith( + "The expected object implements multiple IDictionary interfaces. " + + "If you need to use ShouldBeEquivalentTo in this case please file " + + "a bug with the FluentAssertions devlopment team"); + return false; + } + + if (!suitableDictionaryInterfaces.Any()) + { + AssertionScope.Current.FailWith( + string.Format( + "The {{context:subject}} dictionary has keys of type {0}; " + + "however, the expected dictionary is not keyed with any compatible types.{1}" + + "The expected dictionary implements: {2}", + subjectKeyType, + Environment.NewLine, + string.Join(",", (IEnumerable)expectationDictionaryInterfaces))); + return false; + } + + return true; + } + + private static Type GetDictionaryKeyType(Type subjectType) + { + return subjectType.GetGenericArguments()[0]; + } + + private static bool AssertSameLength(object subject, Type subjectType, object expectation) + { + string methodName = + ExpressionExtensions.GetMethodName(() => AssertSameLength(null, null)); + + MethodCallExpression assertSameLength = Expression.Call( + typeof(GenericDictionaryEquivalencyStep), + methodName, + GetDictionaryTypeArguments(subjectType) + .Concat(GetDictionaryTypeArguments(expectation.GetType())) + .ToArray(), + Expression.Constant(subject, GetIDictionaryInterface(subjectType)), + Expression.Constant(expectation, GetIDictionaryInterface(expectation.GetType()))); + + return (bool)Expression.Lambda(assertSameLength).Compile().DynamicInvoke(); + } + + private static IEnumerable GetDictionaryTypeArguments(Type subjectType) + { + var dictionaryType = GetIDictionaryInterface(subjectType); + + return dictionaryType.GetGenericArguments(); + } + + private static Type GetIDictionaryInterface(Type subjectType) + { + return GetIDictionaryInterfaces(subjectType).Single(); + } + + private static bool AssertSameLength( + IDictionary subject, + IDictionary expectation) + { + return + AssertionScope.Current.ForCondition(subject.Count == expectation.Count) + .FailWith( + "Expected {context:subject} to be a dictionary with {0} item(s), but found {1} item(s).", + expectation.Count, + subject.Count); + } + + private static void AssertDictionaryEquivalence( + IEquivalencyValidationContext context, + IEquivalencyValidator parent, + IEquivalencyAssertionOptions config) + { + Type subjectType = config.GetSubjectType(context); + + string methodName = + ExpressionExtensions.GetMethodName( + () => AssertDictionaryEquivalence(null, null, null, null, null)); + + var assertDictionaryEquivalence = Expression.Call( + typeof(GenericDictionaryEquivalencyStep), + methodName, + GetDictionaryTypeArguments(subjectType) + .Concat(GetDictionaryTypeArguments(context.Expectation.GetType())) + .ToArray(), + Expression.Constant(context), + Expression.Constant(parent), + Expression.Constant(config), + Expression.Constant(context.Subject, GetIDictionaryInterface(subjectType)), + Expression.Constant(context.Expectation, GetIDictionaryInterface(context.Expectation.GetType()))); + + Expression.Lambda(assertDictionaryEquivalence).Compile().DynamicInvoke(); + } + + private static void AssertDictionaryEquivalence( + EquivalencyValidationContext context, + IEquivalencyValidator parent, + IEquivalencyAssertionOptions config, + IDictionary subject, + IDictionary expectation) where TSubjectKey : TExpectKey + { + foreach (TSubjectKey key in subject.Keys) + { + TExpectedValue expectedValue; + + if (expectation.TryGetValue(key, out expectedValue)) + { + if (config.IsRecursive) + { + parent.AssertEqualityUsing(context.CreateForDictionaryItem(key, subject[key], expectation[key])); + + } + else + { + subject[key].Should().Be(expectation[key], context.Because, context.BecauseArgs); + } + } + else + { + AssertionScope.Current.FailWith("{context:subject} contains unexpected key {0}", key); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/GenericDictionaryEquivalencyStep.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/GenericDictionaryEquivalencyStep.cs.meta new file mode 100644 index 0000000..c538b77 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/GenericDictionaryEquivalencyStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 21f12626cadd95a46a0bdae54c5fa0f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/GenericEnumerableEquivalencyStep.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/GenericEnumerableEquivalencyStep.cs new file mode 100644 index 0000000..4e0afd1 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/GenericEnumerableEquivalencyStep.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using FluentAssertions.Common; +using FluentAssertions.Execution; + +namespace FluentAssertions.Equivalency +{ + public class GenericEnumerableEquivalencyStep : IEquivalencyStep + { + /// + /// Gets a value indicating whether this step can handle the verificationScope subject and/or expectation. + /// + public bool CanHandle(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config) + { + var subjectType = config.GetSubjectType(context); + + return (context.Subject != null) && IsGenericCollection(subjectType); + } + + /// + /// Applies a step as part of the task to compare two objects for structural equality. + /// + /// + /// Should return true if the subject matches the expectation or if no additional assertions + /// have to be executed. Should return false otherwise. + /// + /// + /// May throw when preconditions are not met or if it detects mismatching data. + /// + public bool Handle(IEquivalencyValidationContext context, IEquivalencyValidator parent, + IEquivalencyAssertionOptions config) + { + Type subjectType = config.GetSubjectType(context); + + var interfaceTypes = GetIEnumerableInterfaces(subjectType) + .Select(type => "IEnumerable<" + type.GetGenericArguments().Single() + ">") + .ToList(); + + AssertionScope.Current + .ForCondition(interfaceTypes.Count() == 1) + .FailWith("{context:Subject} implements {0}, so cannot determine which one " + + "to use for asserting the equivalency of the collection. ", interfaceTypes); + + if (AssertExpectationIsCollection(context.Expectation, context.Subject)) + { + var validator = new EnumerableEquivalencyValidator(parent, context) + { + Recursive = context.IsRoot || config.IsRecursive, + OrderingRules = config.OrderingRules + }; + + Type typeOfEnumeration = GetTypeOfEnumeration(subjectType); + + Expression subjectToArray = ToArray(context.Subject, typeOfEnumeration); + Expression expectationToArray = + Expression.Constant(EnumerableEquivalencyStep.ToArray(context.Expectation)); + + MethodCallExpression executeExpression = Expression.Call( + Expression.Constant(validator), + ExpressionExtensions.GetMethodName(() => validator.Execute(null, null)), + new[] {typeOfEnumeration}, + subjectToArray, + expectationToArray); + + Expression.Lambda(executeExpression).Compile().DynamicInvoke(); + } + + return true; + } + + private static bool AssertExpectationIsCollection(object expectation, object subject) + { + return AssertionScope.Current + .ForCondition(!ReferenceEquals(expectation, null)) + .FailWith("Expected {context:Subject} to be {0}, but found {1}.", null, subject) + .Then + .ForCondition(IsGenericCollection(expectation.GetType())) + .FailWith("Expected {context:Subject} to be {0}, but found {1}.", expectation, subject); + } + + private static bool IsGenericCollection(Type type) + { + var enumerableInterfaces = GetIEnumerableInterfaces(type); + + return (!typeof (string).IsAssignableFrom(type)) && enumerableInterfaces.Any(); + } + + private static Type[] GetIEnumerableInterfaces(Type type) + { + Type soughtType = typeof (IEnumerable<>); + + return Common.TypeExtensions.GetClosedGenericInterfaces(type, soughtType); + } + + private static Type GetTypeOfEnumeration(Type enumerableType) + { + Type interfaceType = GetIEnumerableInterfaces(enumerableType).Single(); + + return interfaceType.GetGenericArguments().Single(); + } + + private static MethodCallExpression ToArray(object value, Type typeOfEnumeration) + { + return Expression.Call( + typeof (Enumerable), + "ToArray", + new[] {typeOfEnumeration}, + Expression.Constant(value, typeof (IEnumerable<>).MakeGenericType(typeOfEnumeration))); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/GenericEnumerableEquivalencyStep.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/GenericEnumerableEquivalencyStep.cs.meta new file mode 100644 index 0000000..6f88eed --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/GenericEnumerableEquivalencyStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b1fc37046852ba549b24f5dcf273b42f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/IAssertionContext.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/IAssertionContext.cs new file mode 100644 index 0000000..d9e7416 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/IAssertionContext.cs @@ -0,0 +1,36 @@ +namespace FluentAssertions.Equivalency +{ + /// + /// Provides the required information for executing an equality assertion between a subject and an expectation. + /// + /// The type of the subject. + public interface IAssertionContext + { + /// + /// Gets the of the member that returned the current object, or null if the current + /// object represents the root object. + /// + SelectedMemberInfo SubjectProperty { get; } + + /// + /// Gets the value of the + /// + TSubject Subject { get; } + + /// + /// Gets the value of the expectation object that was matched with the subject using a . + /// + TSubject Expectation { get; } + + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + string Because { get; set; } + + /// + /// Zero or more objects to format using the placeholders in . + /// + object[] BecauseArgs { get; set; } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/IAssertionContext.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/IAssertionContext.cs.meta new file mode 100644 index 0000000..f25c87b --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/IAssertionContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd3c7b0b5caccd849bead603f7307642 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/IAssertionRule.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/IAssertionRule.cs new file mode 100644 index 0000000..63e5910 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/IAssertionRule.cs @@ -0,0 +1,15 @@ +namespace FluentAssertions.Equivalency +{ + public interface IAssertionRule + { + /// + /// Defines how a subject's property is compared for equality with the same property of the expectation. + /// + /// + /// Returns true if the rule was applied correctly and the assertion didn't cause any exceptions. + /// Returns false if this rule doesn't support the subject's type. + /// Throws if the rule did support the data type but assertion fails. + /// + bool AssertEquality(IEquivalencyValidationContext context); + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/IAssertionRule.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/IAssertionRule.cs.meta new file mode 100644 index 0000000..387c58b --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/IAssertionRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed89c2c4472665e43b258fc0c91df8ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyAssertionOptions.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyAssertionOptions.cs new file mode 100644 index 0000000..5ab255d --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyAssertionOptions.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; + +namespace FluentAssertions.Equivalency +{ + /// + /// Provides the run-time details of the class. + /// + public interface IEquivalencyAssertionOptions + { + /// + /// Gets an ordered collection of selection rules that define what properties are included. + /// + IEnumerable SelectionRules { get; } + + /// + /// Gets an ordered collection of matching rules that determine which subject properties are matched with which + /// expectation properties. + /// + IEnumerable MatchingRules { get; } + + /// + /// Gets a value indicating whether or not the assertion must perform a deep comparison. + /// + bool IsRecursive { get; } + + /// + /// Gets a value indicating whether recursion is allowed to continue indefinitely. + /// + bool AllowInfiniteRecursion { get; } + + /// + /// Gets value indicating how cyclic references should be handled. By default, it will throw an exception. + /// + CyclicReferenceHandling CyclicReferenceHandling { get; } + + /// + /// Gets an ordered collection of rules that determine whether or not the order of collections is important. By default, + /// ordering is irrelevant. + /// + OrderingRuleCollection OrderingRules { get; } + + /// + /// Gets value indicating how the enums should be compared. + /// + EnumEquivalencyHandling EnumEquivalencyHandling { get; } + + /// + /// Gets an ordered collection of Equivalency steps how a subject is compared with the expectation. + /// + IEnumerable UserEquivalencySteps { get; } + + /// + /// Gets a value indicating whether the runtime type should be used rather than the declared type. + /// + bool UseRuntimeTyping { get; } + + /// + /// Gets a value indicating whether properties should be considered. + /// + bool IncludeProperties { get; } + + /// + /// Gets a value indicating whether fields should be considered. + /// + bool IncludeFields { get; } + + /// + /// Gets the currently configured tracer, or null if no tracing was configured. + /// + ITraceWriter TraceWriter { get; } + + /// + /// Gets a value indicating whether the should be treated as having value semantics. + /// + bool IsValueType(Type type); + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyAssertionOptions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyAssertionOptions.cs.meta new file mode 100644 index 0000000..d63e41f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyAssertionOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1f70cead0bb06dd468cc63917ac67e08 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyStep.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyStep.cs new file mode 100644 index 0000000..822d5f7 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyStep.cs @@ -0,0 +1,25 @@ +namespace FluentAssertions.Equivalency +{ + /// + /// Defines a step in the process of comparing two object graphs for structural equivalency. + /// + public interface IEquivalencyStep + { + /// + /// Gets a value indicating whether this step can handle the current subject and/or expectation. + /// + bool CanHandle(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config); + + /// + /// Applies a step as part of the task to compare two objects for structural equality. + /// + /// + /// Should return true if the subject matches the expectation or if no additional assertions + /// have to be executed. Should return false otherwise. + /// + /// + /// May throw when preconditions are not met or if it detects mismatching data. + /// + bool Handle(IEquivalencyValidationContext context, IEquivalencyValidator parent, IEquivalencyAssertionOptions config); + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyStep.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyStep.cs.meta new file mode 100644 index 0000000..39560ce --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 768db014a3c136d439ce5ec587caf0c2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyValidationContext.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyValidationContext.cs new file mode 100644 index 0000000..1f17eed --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyValidationContext.cs @@ -0,0 +1,69 @@ +using System; + +namespace FluentAssertions.Equivalency +{ + /// + /// Provides information on a particular property during an assertion for structural equality of two object graphs. + /// + public interface IEquivalencyValidationContext : ISubjectInfo + { + /// + /// Gets the value of the . + /// + object Expectation { get; } + + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + string Because { get; } + + /// + /// Zero or more objects to format using the placeholders in . + /// + object[] BecauseArgs { get; } + + /// + /// Gets a value indicating whether the current context represents the root of the object graph. + /// + bool IsRoot { get; } + + /// + /// Gets the value of the + /// + object Subject { get; } + + /// + /// Gets or sets a value indicating that the root of the graph is a collection so all type-specific options apply on + /// the collection type and not on the root itself. + /// + bool RootIsCollection { get; set; } + + /// + /// Gets or sets the current trace writer or null if no tracing has been enabled. + /// + ITraceWriter Tracer { get; set; } + + /// + /// Starts a block that scopes an operation that will be writted to the currently configured + /// after the returned disposable is dispoed.. + /// + /// + /// If no tracer has been configured, the call will be ignored. + /// + IDisposable TraceBlock(GetTraceMessage getMessage); + + /// + /// Writes a single line to the currently configured . + /// + /// + /// If no tracer has been configured, the call will be ignored. + /// + void TraceSingle(GetTraceMessage getMessage); + } + + /// + /// Defines a function that takes the current path and returns the trace message to log. + /// + public delegate string GetTraceMessage(string path); +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyValidationContext.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyValidationContext.cs.meta new file mode 100644 index 0000000..9226521 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyValidationContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d6fb52cbcca9154eb29238091d8b464 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyValidator.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyValidator.cs new file mode 100644 index 0000000..f6e3017 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyValidator.cs @@ -0,0 +1,7 @@ +namespace FluentAssertions.Equivalency +{ + public interface IEquivalencyValidator + { + void AssertEqualityUsing(IEquivalencyValidationContext context); + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyValidator.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyValidator.cs.meta new file mode 100644 index 0000000..c4f4004 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/IEquivalencyValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf87b8955c14fac46a2bd46f10e95573 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/IMemberMatchingRule.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/IMemberMatchingRule.cs new file mode 100644 index 0000000..88916df --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/IMemberMatchingRule.cs @@ -0,0 +1,34 @@ +namespace FluentAssertions.Equivalency +{ + /// + /// Represents a rule that defines how to map the members from the subject-under-test with the members + /// on the expectation object. + /// + public interface IMemberMatchingRule + { + /// + /// Attempts to find a member on the expectation that should be compared with the + /// during a structural equality. + /// + /// + /// Whether or not a match is required or optional is up to the specific rule. If no match is found and this is not an issue, + /// simply return null. + /// + /// + /// The of the subject's member for which a match must be found. Can never + /// be null. + /// + /// + /// The expectation object for which a matching member must be returned. Can never be null. + /// + /// + /// The dotted path from the root object to the current member. Will never be null. + /// + /// + /// + /// Returns the of the property with which to compare the subject with, or null + /// if no match was found. + /// + SelectedMemberInfo Match(SelectedMemberInfo subjectMember, object expectation, string memberPath, IEquivalencyAssertionOptions config); + } +} diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/IMemberMatchingRule.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/IMemberMatchingRule.cs.meta new file mode 100644 index 0000000..44f4092 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/IMemberMatchingRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f19848b8fe1c74e40930c6cae426df14 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/IMemberSelectionRule.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/IMemberSelectionRule.cs new file mode 100644 index 0000000..d140eac --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/IMemberSelectionRule.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; + +namespace FluentAssertions.Equivalency +{ + /// + /// Represents a rule that defines which members of the subject-under-test to include while comparing + /// two objects for structural equality. + /// + public interface IMemberSelectionRule + { + /// + /// Gets a value indicating whether this rule should override the default selection rules that include all members. + /// + bool IncludesMembers { get; } + + /// + /// Adds or removes properties to/from the collection of subject members that must be included while + /// comparing two objects for structural equality. + /// + /// + /// A collection of members that was prepopulated by other selection rules. Can be empty. + /// + /// + /// + /// Type info about the subject. + /// + /// + /// The collection of members after applying this rule. Can contain less or more than was passed in. + /// + IEnumerable SelectMembers(IEnumerable selectedMembers, ISubjectInfo context, IEquivalencyAssertionOptions config); + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/IMemberSelectionRule.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/IMemberSelectionRule.cs.meta new file mode 100644 index 0000000..6bc5934 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/IMemberSelectionRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2c89b228b72818040b34fa79cddbf040 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/IOrderingRule.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/IOrderingRule.cs new file mode 100644 index 0000000..3e2094f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/IOrderingRule.cs @@ -0,0 +1,13 @@ +namespace FluentAssertions.Equivalency +{ + /// + /// Defines a rule that is used to determine whether the order of items in collections is relevant or not. + /// + public interface IOrderingRule + { + /// + /// Determines if ordering of the member referred to by the current is relevant. + /// + OrderStrictness Evaluate(ISubjectInfo subjectInfo); + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/IOrderingRule.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/IOrderingRule.cs.meta new file mode 100644 index 0000000..ffe61b2 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/IOrderingRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5b6d7026c722f0a4888d38e4e409467e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/ISubjectInfo.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/ISubjectInfo.cs new file mode 100644 index 0000000..c874cef --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/ISubjectInfo.cs @@ -0,0 +1,38 @@ +using System; +using System.Reflection; + +namespace FluentAssertions.Equivalency +{ + /// + /// Provides details about the subject's root or nested member. + /// + public interface ISubjectInfo + { + /// + /// Gets the of the member that returned the current object, or null if the current + /// object represents the root object. + /// + SelectedMemberInfo SelectedMemberInfo { get; } + + /// + /// Gets the full path from the root object until the current object separated by dots. + /// + string SelectedMemberPath { get; } + + /// + /// Gets a display-friendly representation of the . + /// + string SelectedMemberDescription { get; } + + /// + /// Gets the compile-time type of the current object. If the current object is not the root object and the type is not , + /// then it returns the same as the property does. + /// + Type CompileTimeType { get; } + + /// + /// Gets the run-time type of the current object. + /// + Type RuntimeType { get; } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/ISubjectInfo.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/ISubjectInfo.cs.meta new file mode 100644 index 0000000..a6aed43 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/ISubjectInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b8a4134eeffbbe44bfcd56bc48bbb2c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching.meta new file mode 100644 index 0000000..681c38a --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d53ae6a0104ea8643b408c060d689334 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/CollectionMemberMatchingRuleDecorator.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/CollectionMemberMatchingRuleDecorator.cs new file mode 100644 index 0000000..f43a293 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/CollectionMemberMatchingRuleDecorator.cs @@ -0,0 +1,23 @@ +namespace FluentAssertions.Equivalency.Matching +{ + internal class CollectionMemberMatchingRuleDecorator : IMemberMatchingRule + { + private readonly IMemberMatchingRule matchingRule; + + public CollectionMemberMatchingRuleDecorator(IMemberMatchingRule matchingRule) + { + this.matchingRule = matchingRule; + } + + public SelectedMemberInfo Match(SelectedMemberInfo subjectMember, object expectation, string memberPath, + IEquivalencyAssertionOptions config) + { + return matchingRule.Match(subjectMember, expectation, memberPath, config); + } + + public override string ToString() + { + return matchingRule.ToString(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/CollectionMemberMatchingRuleDecorator.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/CollectionMemberMatchingRuleDecorator.cs.meta new file mode 100644 index 0000000..d8a7235 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/CollectionMemberMatchingRuleDecorator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 056a01b4da65b5a4daedc5dd36dba5ed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/MustMatchByNameRule.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/MustMatchByNameRule.cs new file mode 100644 index 0000000..559467f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/MustMatchByNameRule.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using FluentAssertions.Common; +using FluentAssertions.Execution; + +namespace FluentAssertions.Equivalency.Matching +{ + /// + /// Requires the expectation object to have a member with the exact same name. + /// + internal class MustMatchByNameRule : IMemberMatchingRule + { + public SelectedMemberInfo Match(SelectedMemberInfo subjectMember, object expectation, string memberPath, IEquivalencyAssertionOptions config) + { + SelectedMemberInfo compareeSelectedMemberInfoInfo = null; + + if (config.IncludeProperties) + { + compareeSelectedMemberInfoInfo = SelectedMemberInfo.Create(expectation.GetType() + .FindProperty(subjectMember.Name, subjectMember.MemberType)); + } + + if ((compareeSelectedMemberInfoInfo == null) && config.IncludeFields) + { + compareeSelectedMemberInfoInfo = SelectedMemberInfo.Create(expectation.GetType() + .FindField(subjectMember.Name, subjectMember.MemberType)); + } + + if ((compareeSelectedMemberInfoInfo == null) && ExpectationImplementsMemberExplicitly(expectation, subjectMember)) + { + compareeSelectedMemberInfoInfo = subjectMember; + } + + if (compareeSelectedMemberInfoInfo == null) + { + string path = (memberPath.Length > 0) ? memberPath + "." : "member "; + + Execute.Assertion.FailWith( + "Subject has " + path + subjectMember.Name + " that the other object does not have."); + } + + return compareeSelectedMemberInfoInfo; + } + + private static bool ExpectationImplementsMemberExplicitly(object expectation, SelectedMemberInfo subjectMember) + { + return subjectMember.DeclaringType.IsInstanceOfType(expectation); + } + + /// 2 + public override string ToString() + { + return "Match member by name (or throw)"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/MustMatchByNameRule.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/MustMatchByNameRule.cs.meta new file mode 100644 index 0000000..523d5a0 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/MustMatchByNameRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f06f25b9944dbcd42b0c21a88670b680 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/TryMatchByNameRule.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/TryMatchByNameRule.cs new file mode 100644 index 0000000..770a6c8 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/TryMatchByNameRule.cs @@ -0,0 +1,21 @@ +using FluentAssertions.Common; + +namespace FluentAssertions.Equivalency.Matching +{ + /// + /// Finds a member of the expectation with the exact same name, but doesn't require it. + /// + internal class TryMatchByNameRule : IMemberMatchingRule + { + public SelectedMemberInfo Match(SelectedMemberInfo subjectMember, object expectation, string memberPath, IEquivalencyAssertionOptions config) + { + return expectation.GetType().FindMember(subjectMember.Name, subjectMember.MemberType); + } + + /// 2 + public override string ToString() + { + return "Try to match member by name"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/TryMatchByNameRule.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/TryMatchByNameRule.cs.meta new file mode 100644 index 0000000..bbf3728 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Matching/TryMatchByNameRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a8be84207e5576d4284297b3d7922deb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/MemberInfoSelectedMemberInfo.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/MemberInfoSelectedMemberInfo.cs new file mode 100644 index 0000000..7a5088c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/MemberInfoSelectedMemberInfo.cs @@ -0,0 +1,58 @@ +using System; +using System.Reflection; + +namespace FluentAssertions.Equivalency +{ + /// + /// A partial ISelectedMemberInfo implementation that delegates to a MemberInfo object + /// + internal abstract class MemberInfoSelectedMemberInfo : SelectedMemberInfo + { + private readonly MemberInfo memberInfo; + + protected MemberInfoSelectedMemberInfo(MemberInfo memberInfo) + { + this.memberInfo = memberInfo; + } + + public override string Name + { + get { return memberInfo.Name; } + } + + public override Type DeclaringType + { + get { return memberInfo.DeclaringType; } + } + + protected bool Equals(MemberInfoSelectedMemberInfo other) + { + return memberInfo.Equals(other.memberInfo); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) + { + return false; + } + + if (ReferenceEquals(this, obj)) + { + return true; + } + + if (obj.GetType() != this.GetType()) + { + return false; + } + + return Equals((MemberInfoSelectedMemberInfo) obj); + } + + public override int GetHashCode() + { + return memberInfo.GetHashCode(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/MemberInfoSelectedMemberInfo.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/MemberInfoSelectedMemberInfo.cs.meta new file mode 100644 index 0000000..3286e5c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/MemberInfoSelectedMemberInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: afceae3dd1995b74c9f120334e34183c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/MultiDimensionalArrayEquivalencyStep.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/MultiDimensionalArrayEquivalencyStep.cs new file mode 100644 index 0000000..c360f97 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/MultiDimensionalArrayEquivalencyStep.cs @@ -0,0 +1,148 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using FluentAssertions.Execution; + +namespace FluentAssertions.Equivalency +{ + /// + /// Supports recursively comparing two multi-dimensional arrays for equivalency using strict order for the array items + /// themselves. + /// + internal class MultiDimensionalArrayEquivalencyStep : IEquivalencyStep + { + public bool CanHandle(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config) + { + Array array = context.Subject as Array; + return (array != null) && (array.Rank > 1); + } + + public bool Handle(IEquivalencyValidationContext context, IEquivalencyValidator parent, + IEquivalencyAssertionOptions config) + { + Array subjectAsArray = (Array) context.Subject; + + if (AreComparable(context, subjectAsArray)) + { + Digit digit = BuildDigitsRepresentingAllIndices(subjectAsArray); + + do + { + var expectation = ((Array) context.Expectation).GetValue(digit.Indices); + IEquivalencyValidationContext itemContext = context.CreateForCollectionItem( + string.Join(",", digit.Indices), + subjectAsArray.GetValue(digit.Indices), + expectation); + + parent.AssertEqualityUsing(itemContext); + } + while (digit.Increment()); + } + + return true; + } + + private static Digit BuildDigitsRepresentingAllIndices(Array subjectAsArray) + { + return Enumerable + .Range(0, subjectAsArray.Rank) + .Reverse() + .Aggregate((Digit) null, (next, rank) => new Digit(subjectAsArray.GetLength(rank), next)); + } + + private static bool AreComparable(IEquivalencyValidationContext context, Array subjectAsArray) + { + return + IsArray(context.Expectation) && + HaveSameRank(context.Expectation, subjectAsArray) && + HaveSameDimensions(context.Expectation, subjectAsArray); + } + + private static bool IsArray(object expectation) + { + return AssertionScope.Current + .ForCondition(!ReferenceEquals(expectation, null)) + .FailWith("Can't compare a multi-dimensional array to {0}.", new object[] {null}) + .Then + .ForCondition(expectation is Array) + .FailWith("Can't compare a multi-dimensional array to something else."); + } + + private static bool HaveSameDimensions(object expectation, Array actual) + { + bool sameDimensions = true; + + for (int dimension = 0; dimension < actual.Rank; dimension++) + { + int expectedLength = ((Array) expectation).GetLength(dimension); + int actualLength = actual.GetLength(dimension); + + sameDimensions = sameDimensions & AssertionScope.Current + .ForCondition(expectedLength == actualLength) + .FailWith("Expected dimension {0} to contain {1} item(s), but found {2}.", dimension, expectedLength, + actualLength); + } + + return sameDimensions; + } + + private static bool HaveSameRank(object expectation, Array actual) + { + var expectationAsArray = (Array) expectation; + + return AssertionScope.Current + .ForCondition(actual.Rank == expectationAsArray.Rank) + .FailWith("Expected {context:array} to have {0} dimension(s), but it has {1}.", expectationAsArray.Rank, + actual.Rank); + } + } + + internal class Digit + { + private readonly int length; + private readonly Digit nextDigit; + private int index; + + public Digit(int length, Digit nextDigit) + { + this.length = length; + this.nextDigit = nextDigit; + } + + public int[] Indices + { + get + { + var indices = new List(); + + Digit digit = this; + while (digit != null) + { + indices.Add(digit.index); + digit = digit.nextDigit; + } + + return indices.ToArray(); + } + } + + public bool Increment() + { + bool success = (nextDigit != null) && nextDigit.Increment(); + if (!success) + { + if (index < (length - 1)) + { + index++; + success = true; + } + else + { + index = 0; + } + } + + return success; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/MultiDimensionalArrayEquivalencyStep.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/MultiDimensionalArrayEquivalencyStep.cs.meta new file mode 100644 index 0000000..eb591d5 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/MultiDimensionalArrayEquivalencyStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1750cac135e34bc4194263851aa0fbb1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/ObjectReference.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/ObjectReference.cs new file mode 100644 index 0000000..ff998ac --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/ObjectReference.cs @@ -0,0 +1,65 @@ +using System; +using System.Linq; +using FluentAssertions.Common; + +namespace FluentAssertions.Equivalency +{ + /// + /// Represents an object tracked by the including it's location within an object graph. + /// + internal class ObjectReference + { + private readonly object @object; + private readonly string[] path; + + public ObjectReference(object @object, string path) + { + this.@object = @object; + this.path = path.ToLower().Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries); + } + + /// + /// Determines whether the specified is equal to the current . + /// + /// + /// true if the specified is equal to the current ; otherwise, false. + /// + /// The to compare with the current . 2 + public override bool Equals(object obj) + { + var other = (ObjectReference) obj; + + return ReferenceEquals(@object, other.@object) && IsParentOf(other); + } + + private bool IsParentOf(ObjectReference other) + { + return (other.path.Length > path.Length) && other.path.Take(path.Length).SequenceEqual(path); + } + + /// + /// Serves as a hash function for a particular type. + /// + /// + /// A hash code for the current . + /// + /// 2 + public override int GetHashCode() + { + unchecked + { + return (@object.GetHashCode()*397) ^ path.GetHashCode(); + } + } + + public override string ToString() + { + return string.Format("{{\"{0}\", {1}}}", path, @object); + } + + public bool IsComplexType + { + get { return !ReferenceEquals(@object, null) && @object.GetType().IsComplexType(); } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/ObjectReference.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/ObjectReference.cs.meta new file mode 100644 index 0000000..38dcfed --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/ObjectReference.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b15e1a66168ae5240b9d9f07a4163efb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/ObjectTracker.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/ObjectTracker.cs new file mode 100644 index 0000000..7cfb136 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/ObjectTracker.cs @@ -0,0 +1,72 @@ +using System.Collections.Generic; + +using FluentAssertions.Execution; + +namespace FluentAssertions.Equivalency +{ + /// + /// Keeps track of objects and their location within an object graph so that cyclic references can be detected + /// and handled upon. + /// + internal class ObjectTracker : ICloneable2 + { + #region Private Definitions + + private readonly CyclicReferenceHandling handling; + private List orderedReferences = new List(); + + #endregion + + public ObjectTracker(CyclicReferenceHandling handling) + { + this.handling = handling; + } + + /// + /// Determines whether the specified object reference is a cyclic reference to the same object earlier in the + /// equivalency validation. + /// + /// + /// The behavior of a cyclic reference is determined by the constructor + /// parameter. + /// + public bool IsCyclicReference(ObjectReference reference) + { + bool isCyclic = false; + + if (reference.IsComplexType) + { + if (orderedReferences.Contains(reference)) + { + isCyclic = true; + if (handling == CyclicReferenceHandling.ThrowException) + { + AssertionScope.Current.FailWith( + "Expected {context:subject} to be {expectation}{reason}, but it contains a cyclic reference."); + } + } + else + { + orderedReferences.Add(reference); + } + } + + return isCyclic; + } + + /// + /// Creates a new object that is a copy of the current instance. + /// + /// + /// + /// A new object that is a copy of this instance. + /// + public object Clone() + { + return new ObjectTracker(handling) + { + orderedReferences = new List(orderedReferences) + }; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/ObjectTracker.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/ObjectTracker.cs.meta new file mode 100644 index 0000000..4926a1f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/ObjectTracker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f9aba612a7fe0540ab3a91338e27a9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/OrderStrictness.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/OrderStrictness.cs new file mode 100644 index 0000000..6828781 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/OrderStrictness.cs @@ -0,0 +1,9 @@ +namespace FluentAssertions.Equivalency +{ + public enum OrderStrictness + { + Strict, + NotStrict, + Irrelevant + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/OrderStrictness.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/OrderStrictness.cs.meta new file mode 100644 index 0000000..1236d50 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/OrderStrictness.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04edf443e46439c4b9bcb92f0798de4b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering.meta new file mode 100644 index 0000000..5f22247 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eda10ef651baab64e97b9542619ee90b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/ByteArrayOrderingRule.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/ByteArrayOrderingRule.cs new file mode 100644 index 0000000..1d14fca --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/ByteArrayOrderingRule.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using FluentAssertions.Common; + +namespace FluentAssertions.Equivalency.Ordering +{ + /// + /// Ordering rule that ensures that byte arrays are always compared in strict ordering since it would cause a + /// severe performance impact otherwise. + /// + internal class ByteArrayOrderingRule : IOrderingRule + { + public OrderStrictness Evaluate(ISubjectInfo subjectInfo) + { + return subjectInfo.CompileTimeType.Implements>() ? OrderStrictness.Strict : OrderStrictness.Irrelevant; + } + + public override string ToString() + { + return "Be strict about the order of items in byte arrays"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/ByteArrayOrderingRule.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/ByteArrayOrderingRule.cs.meta new file mode 100644 index 0000000..4416986 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/ByteArrayOrderingRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1990cbd8ff68a9147ab959227b9154ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/CollectionMemberOrderingRuleDecorator.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/CollectionMemberOrderingRuleDecorator.cs new file mode 100644 index 0000000..7bd4ec2 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/CollectionMemberOrderingRuleDecorator.cs @@ -0,0 +1,22 @@ +namespace FluentAssertions.Equivalency.Ordering +{ + internal class CollectionMemberOrderingRuleDecorator : IOrderingRule + { + private readonly IOrderingRule orderingRule; + + public CollectionMemberOrderingRuleDecorator(IOrderingRule orderingRule) + { + this.orderingRule = orderingRule; + } + + public OrderStrictness Evaluate(ISubjectInfo subjectInfo) + { + return orderingRule.Evaluate(new CollectionMemberSubjectInfo(subjectInfo)); + } + + public override string ToString() + { + return orderingRule.ToString(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/CollectionMemberOrderingRuleDecorator.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/CollectionMemberOrderingRuleDecorator.cs.meta new file mode 100644 index 0000000..436940d --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/CollectionMemberOrderingRuleDecorator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f8f28fed4bef69846925e10a526f26c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/MatchAllOrderingRule.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/MatchAllOrderingRule.cs new file mode 100644 index 0000000..d8fa19a --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/MatchAllOrderingRule.cs @@ -0,0 +1,21 @@ +namespace FluentAssertions.Equivalency.Ordering +{ + /// + /// An ordering rule that basically states that the order of items in all collections is important. + /// + internal class MatchAllOrderingRule : IOrderingRule + { + /// + /// Determines if ordering of the member referred to by the current is relevant. + /// + public OrderStrictness Evaluate(ISubjectInfo subjectInfo) + { + return OrderStrictness.Strict; + } + + public override string ToString() + { + return "Always be strict about the collection order"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/MatchAllOrderingRule.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/MatchAllOrderingRule.cs.meta new file mode 100644 index 0000000..22bd875 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/MatchAllOrderingRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b4b2ad8626b4c0498447306a13815f9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/PathBasedOrderingRule.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/PathBasedOrderingRule.cs new file mode 100644 index 0000000..e49f690 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/PathBasedOrderingRule.cs @@ -0,0 +1,66 @@ +using System; +using System.Text.RegularExpressions; + +namespace FluentAssertions.Equivalency.Ordering +{ + /// + /// Represents a rule for determining whether or not a certain collection within the object graph should be compared using + /// strict ordering. + /// + internal class PathBasedOrderingRule : IOrderingRule + { + private readonly string path; + + public PathBasedOrderingRule(string path) + { + this.path = path; + } + + /// + /// Determines if ordering of the member referred to by the current is relevant. + /// + public OrderStrictness Evaluate(ISubjectInfo subjectInfo) + { + string currentPropertyPath = subjectInfo.SelectedMemberPath; + if (!ContainsIndexingQualifiers(path)) + { + currentPropertyPath = RemoveInitialIndexQualifier(currentPropertyPath); + } + + if (currentPropertyPath.Equals(path, StringComparison.CurrentCultureIgnoreCase)) + { + return OrderStrictness.Strict; + } + else + { + return OrderStrictness.Irrelevant; + } + } + + private static bool ContainsIndexingQualifiers(string path) + { + return path.Contains("[") && path.Contains("]"); + } + + private string RemoveInitialIndexQualifier(string sourcePath) + { + var indexQualifierRegex = new Regex(@"^\[\d+]\."); + + if (!indexQualifierRegex.IsMatch(path)) + { + var match = indexQualifierRegex.Match(sourcePath); + if (match.Success) + { + sourcePath = sourcePath.Substring(match.Length); + } + } + + return sourcePath; + } + + public override string ToString() + { + return "Be strict about the order of collection items when path is " + path; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/PathBasedOrderingRule.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/PathBasedOrderingRule.cs.meta new file mode 100644 index 0000000..d01ecda --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/PathBasedOrderingRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ae95e37d569e9144aa190410330c626f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/PredicateBasedOrderingRule.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/PredicateBasedOrderingRule.cs new file mode 100644 index 0000000..64b90fe --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/PredicateBasedOrderingRule.cs @@ -0,0 +1,39 @@ +using System; +using System.Linq.Expressions; + +namespace FluentAssertions.Equivalency.Ordering +{ + internal class PredicateBasedOrderingRule : IOrderingRule + { + private readonly Func predicate; + private readonly string description; + + public PredicateBasedOrderingRule(Expression> predicate) + { + description = predicate.Body.ToString(); + this.predicate = predicate.Compile(); + } + + public bool Invert { get; set; } + + /// + /// Determines if ordering of the member referred to by the current is relevant. + /// + public OrderStrictness Evaluate(ISubjectInfo subjectInfo) + { + if (predicate(subjectInfo)) + { + return Invert ? OrderStrictness.NotStrict : OrderStrictness.Strict; + } + else + { + return OrderStrictness.Irrelevant; + } + } + + public override string ToString() + { + return $"Be {(Invert ? "not strict" : "strict")} about the order of collections when {description}"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/PredicateBasedOrderingRule.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/PredicateBasedOrderingRule.cs.meta new file mode 100644 index 0000000..0448490 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Ordering/PredicateBasedOrderingRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6f3b6c6c4aba1dd4da34c22954fc40c0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/OrderingRuleCollection.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/OrderingRuleCollection.cs new file mode 100644 index 0000000..a472b9c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/OrderingRuleCollection.cs @@ -0,0 +1,69 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using FluentAssertions.Equivalency.Ordering; + +namespace FluentAssertions.Equivalency +{ + /// + /// Collection of s. + /// + public class OrderingRuleCollection : IEnumerable + { + private readonly List rules = new List(); + + /// + /// Initializes a new collection of ordering rules. + /// + public OrderingRuleCollection() + { + } + + /// + /// Initializes a new collection of ordering rules based on an existing collection of ordering rules. + /// + public OrderingRuleCollection(IEnumerable orderingRules) + { + rules.AddRange(orderingRules); + } + + /// + /// Returns an enumerator that iterates through the collection. + /// + /// + /// A that can be used to iterate through the collection. + /// + /// 1 + public IEnumerator GetEnumerator() + { + return rules.GetEnumerator(); + } + + /// + /// Returns an enumerator that iterates through a collection. + /// + /// + /// An object that can be used to iterate through the collection. + /// + /// 2 + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public void Add(IOrderingRule rule) + { + rules.Add(rule); + } + + /// + /// Determines whether the rules in this collection dictate strict ordering during the equivalency assertion on + /// the collection pointed to by . + /// + public bool IsOrderingStrictFor(ISubjectInfo subjectInfo) + { + List results = rules.Select(r => r.Evaluate(subjectInfo)).ToList(); + return results.Contains(OrderStrictness.Strict) && !results.Contains(OrderStrictness.NotStrict); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/OrderingRuleCollection.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/OrderingRuleCollection.cs.meta new file mode 100644 index 0000000..2e1dfc4 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/OrderingRuleCollection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b96e8d0991a28e1469681883e39414bf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/PropertySelectedMemberInfo.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/PropertySelectedMemberInfo.cs new file mode 100644 index 0000000..8433db4 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/PropertySelectedMemberInfo.cs @@ -0,0 +1,39 @@ +using System; +using System.Reflection; +using FluentAssertions.Common; + +namespace FluentAssertions.Equivalency +{ + /// + /// Provides an ISelectedMemberInfo for PropertyInfo objects + /// + internal class PropertySelectedMemberInfo : MemberInfoSelectedMemberInfo + { + private readonly PropertyInfo propertyInfo; + + public PropertySelectedMemberInfo(PropertyInfo propertyInfo) : base(propertyInfo) + { + this.propertyInfo = propertyInfo; + } + + public override Type MemberType + { + get { return propertyInfo.PropertyType; } + } + + internal override CSharpAccessModifier GetAccessModifier + { + get { return propertyInfo.GetGetMethod(true).GetCSharpAccessModifier(); } + } + + internal override CSharpAccessModifier SetAccessModifier + { + get { return propertyInfo.GetSetMethod(true).GetCSharpAccessModifier(); } + } + + public override object GetValue(object obj, object[] index) + { + return propertyInfo.GetValue(obj, index); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/PropertySelectedMemberInfo.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/PropertySelectedMemberInfo.cs.meta new file mode 100644 index 0000000..fcdbf4d --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/PropertySelectedMemberInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bde1cbaa56a758045b973588e924c6fc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/ReferenceEqualityEquivalencyStep.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/ReferenceEqualityEquivalencyStep.cs new file mode 100644 index 0000000..5aefe63 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/ReferenceEqualityEquivalencyStep.cs @@ -0,0 +1,28 @@ +namespace FluentAssertions.Equivalency +{ + public class ReferenceEqualityEquivalencyStep : IEquivalencyStep + { + /// + /// Gets a value indicating whether this step can handle the current subject and/or expectation. + /// + public bool CanHandle(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config) + { + return true; + } + + /// + /// Applies a step as part of the task to compare two objects for structural equality. + /// + /// + /// Should return true if the subject matches the expectation or if no additional assertions + /// have to be executed. Should return false otherwise. + /// + /// + /// May throw when preconditions are not met or if it detects mismatching data. + /// + public virtual bool Handle(IEquivalencyValidationContext context, IEquivalencyValidator structuralEqualityValidator, IEquivalencyAssertionOptions config) + { + return ReferenceEquals(context.Subject, context.Expectation); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/ReferenceEqualityEquivalencyStep.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/ReferenceEqualityEquivalencyStep.cs.meta new file mode 100644 index 0000000..d8588a7 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/ReferenceEqualityEquivalencyStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 403790f39d183f346aa952b3e0e21486 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/RunAllUserStepsEquivalencyStep.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/RunAllUserStepsEquivalencyStep.cs new file mode 100644 index 0000000..f26bc95 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/RunAllUserStepsEquivalencyStep.cs @@ -0,0 +1,24 @@ +using System.Linq; + +namespace FluentAssertions.Equivalency +{ + /// + /// Represents a composite equivalency step that passes the execution to all user-supplied steps that can handle the + /// current context. + /// + public class RunAllUserStepsEquivalencyStep : IEquivalencyStep + { + public bool CanHandle(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config) + { + return config.UserEquivalencySteps.Any(s => s.CanHandle(context, config)); + } + + public bool Handle(IEquivalencyValidationContext context, IEquivalencyValidator parent, + IEquivalencyAssertionOptions config) + { + return config.UserEquivalencySteps + .Where(s => s.CanHandle(context, config)) + .Any(step => step.Handle(context, parent, config)); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/RunAllUserStepsEquivalencyStep.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/RunAllUserStepsEquivalencyStep.cs.meta new file mode 100644 index 0000000..9b9662c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/RunAllUserStepsEquivalencyStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7062ae9e4e6c5264b97d3ba2b19a9715 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/SelectedMemberInfo.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/SelectedMemberInfo.cs new file mode 100644 index 0000000..3ecccde --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/SelectedMemberInfo.cs @@ -0,0 +1,62 @@ +using System; +using System.Reflection; +using FluentAssertions.Common; + +namespace FluentAssertions.Equivalency +{ + /// + /// Exposes information about an object's member + /// + public abstract class SelectedMemberInfo + { + public static SelectedMemberInfo Create(PropertyInfo propertyInfo) + { + if (propertyInfo == null || propertyInfo.IsIndexer()) + { + return null; + } + + return new PropertySelectedMemberInfo(propertyInfo); + } + + public static SelectedMemberInfo Create(FieldInfo fieldInfo) + { + if (fieldInfo == null) + { + return null; + } + + return new FieldSelectedMemberInfo(fieldInfo); + } + + /// + /// Gets the name of the current member. + /// + public abstract string Name { get; } + + /// + /// Gets the type of this member. + /// + public abstract Type MemberType { get; } + + /// + /// Gets the class that declares this member. + /// + public abstract Type DeclaringType { get; } + + /// + /// Gets the access modifier for the getter of this member. + /// + internal abstract CSharpAccessModifier GetAccessModifier { get; } + + /// + /// Gets the access modifier for the setter of this member. + /// + internal abstract CSharpAccessModifier SetAccessModifier { get; } + + /// + /// Returns the member value of a specified object with optional index values for indexed properties or methods. + /// + public abstract object GetValue(object obj, object[] index); + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/SelectedMemberInfo.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/SelectedMemberInfo.cs.meta new file mode 100644 index 0000000..13e0269 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/SelectedMemberInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59fda8894da834d4697884edc23cf196 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection.meta new file mode 100644 index 0000000..0e924aa --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 57eb5ed3a7832d942b1bd6013ab90896 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/AllPublicFieldsSelectionRule.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/AllPublicFieldsSelectionRule.cs new file mode 100644 index 0000000..f5234fb --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/AllPublicFieldsSelectionRule.cs @@ -0,0 +1,36 @@ +using System.Collections.Generic; +using System.Linq; +using FluentAssertions.Common; + +namespace FluentAssertions.Equivalency.Selection +{ + /// + /// Selection rule that adds all public fields of the subject. + /// + internal class AllPublicFieldsSelectionRule : IMemberSelectionRule + { + public bool IncludesMembers + { + get { return false; } + } + + public IEnumerable SelectMembers(IEnumerable selectedMembers, ISubjectInfo context, IEquivalencyAssertionOptions config) + { + return + selectedMembers.Union( + config.GetSubjectType(context).GetNonPrivateFields().Select(SelectedMemberInfo.Create)); + } + + /// + /// Returns a string that represents the current object. + /// + /// + /// A string that represents the current object. + /// + /// 2 + public override string ToString() + { + return "Include all non-private fields"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/AllPublicFieldsSelectionRule.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/AllPublicFieldsSelectionRule.cs.meta new file mode 100644 index 0000000..7c5ac34 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/AllPublicFieldsSelectionRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 951d5982433f4da409f79bef1f3c0f00 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/AllPublicPropertiesSelectionRule.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/AllPublicPropertiesSelectionRule.cs new file mode 100644 index 0000000..cc9e3f9 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/AllPublicPropertiesSelectionRule.cs @@ -0,0 +1,36 @@ +using System.Collections.Generic; +using System.Linq; +using FluentAssertions.Common; + +namespace FluentAssertions.Equivalency.Selection +{ + /// + /// Selection rule that adds all public properties of the subject. + /// + internal class AllPublicPropertiesSelectionRule : IMemberSelectionRule + { + public bool IncludesMembers + { + get { return false; } + } + + public IEnumerable SelectMembers(IEnumerable selectedMembers, ISubjectInfo context, IEquivalencyAssertionOptions config) + { + return + selectedMembers.Union( + config.GetSubjectType(context).GetNonPrivateProperties().Select(SelectedMemberInfo.Create)); + } + + /// + /// Returns a string that represents the current object. + /// + /// + /// A string that represents the current object. + /// + /// 2 + public override string ToString() + { + return "Include all non-private properties"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/AllPublicPropertiesSelectionRule.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/AllPublicPropertiesSelectionRule.cs.meta new file mode 100644 index 0000000..c8bbf0c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/AllPublicPropertiesSelectionRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f1777c25a1df07041840ec3c31880fb3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/CollectionMemberSelectionRuleDecorator.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/CollectionMemberSelectionRuleDecorator.cs new file mode 100644 index 0000000..8fe395d --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/CollectionMemberSelectionRuleDecorator.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; + +namespace FluentAssertions.Equivalency.Selection +{ + internal class CollectionMemberSelectionRuleDecorator : IMemberSelectionRule + { + private readonly IMemberSelectionRule selectionRule; + + public CollectionMemberSelectionRuleDecorator(IMemberSelectionRule selectionRule) + { + this.selectionRule = selectionRule; + } + + public bool IncludesMembers + { + get { return selectionRule.IncludesMembers; } + } + + public IEnumerable SelectMembers(IEnumerable selectedMembers, + ISubjectInfo context, IEquivalencyAssertionOptions config) + { + return selectionRule.SelectMembers(selectedMembers, new CollectionMemberSubjectInfo(context), config); + } + + public override string ToString() + { + return selectionRule.ToString(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/CollectionMemberSelectionRuleDecorator.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/CollectionMemberSelectionRuleDecorator.cs.meta new file mode 100644 index 0000000..68ad779 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/CollectionMemberSelectionRuleDecorator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b13a7a339c3aea44b42c22d73bd547e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/ExcludeMemberByPathSelectionRule.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/ExcludeMemberByPathSelectionRule.cs new file mode 100644 index 0000000..875a68c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/ExcludeMemberByPathSelectionRule.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; +using System.Linq; +using FluentAssertions.Common; + +namespace FluentAssertions.Equivalency.Selection +{ + /// + /// Selection rule that removes a particular property from the structural comparison. + /// + internal class ExcludeMemberByPathSelectionRule : SelectMemberByPathSelectionRule + { + private readonly string pathToExclude; + + public ExcludeMemberByPathSelectionRule(string pathToExclude) : base(pathToExclude) + { + this.pathToExclude = pathToExclude; + } + + protected override IEnumerable OnSelectMembers(IEnumerable selectedMembers, + string currentPath, ISubjectInfo context) + { + return selectedMembers.Where(memberInfo => currentPath.Combine(memberInfo.Name) != pathToExclude).ToArray(); + } + + public override string ToString() + { + return "Exclude member root." + pathToExclude; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/ExcludeMemberByPathSelectionRule.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/ExcludeMemberByPathSelectionRule.cs.meta new file mode 100644 index 0000000..6540b5a --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/ExcludeMemberByPathSelectionRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 210414b088c59c642b4360b17d88411b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/ExcludeMemberByPredicateSelectionRule.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/ExcludeMemberByPredicateSelectionRule.cs new file mode 100644 index 0000000..301f99f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/ExcludeMemberByPredicateSelectionRule.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; + +namespace FluentAssertions.Equivalency.Selection +{ + /// + /// Selection rule that removes a particular member from the structural comparison based on a predicate. + /// + internal class ExcludeMemberByPredicateSelectionRule : IMemberSelectionRule + { + private readonly Func predicate; + private readonly string description; + + public ExcludeMemberByPredicateSelectionRule(Expression> predicate) + { + description = predicate.Body.ToString(); + this.predicate = predicate.Compile(); + } + + public bool IncludesMembers + { + get { return false; } + } + + public IEnumerable SelectMembers(IEnumerable selectedMembers, ISubjectInfo context, IEquivalencyAssertionOptions config) + { + return selectedMembers.Where(p => !predicate(new NestedSelectionContext(context, p))).ToArray(); + } + + /// 2 + public override string ToString() + { + return "Exclude member when " + description; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/ExcludeMemberByPredicateSelectionRule.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/ExcludeMemberByPredicateSelectionRule.cs.meta new file mode 100644 index 0000000..8948049 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/ExcludeMemberByPredicateSelectionRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a1af29bd59dc0e947a94c24c1b338511 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/IncludeMemberByPathSelectionRule.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/IncludeMemberByPathSelectionRule.cs new file mode 100644 index 0000000..694a64f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/IncludeMemberByPathSelectionRule.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; +using System.Linq; +using FluentAssertions.Common; + +namespace FluentAssertions.Equivalency.Selection +{ + /// + /// Selection rule that includes a particular property in the structural comparison. + /// + internal class IncludeMemberByPathSelectionRule : SelectMemberByPathSelectionRule + { + private readonly MemberPath pathToInclude; + + public IncludeMemberByPathSelectionRule(string pathToInclude) : base(pathToInclude) + { + this.pathToInclude = new MemberPath(pathToInclude); + } + + public override bool IncludesMembers => true; + + protected override IEnumerable OnSelectMembers(IEnumerable selectedMembers, + string currentPath, ISubjectInfo context) + { + var matchingMembers = + from member in context.RuntimeType.GetNonPrivateMembers() + where pathToInclude.IsParentOrChildOf(currentPath.Combine(member.Name)) + select member; + + return selectedMembers.Concat(matchingMembers).ToArray(); + } + + public override string ToString() + { + return "Include member root." + pathToInclude; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/IncludeMemberByPathSelectionRule.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/IncludeMemberByPathSelectionRule.cs.meta new file mode 100644 index 0000000..9862fbf --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/IncludeMemberByPathSelectionRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 42bceb32fb8a0f84dbc698f8b30756cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/IncludeMemberByPredicateSelectionRule.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/IncludeMemberByPredicateSelectionRule.cs new file mode 100644 index 0000000..41786a3 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/IncludeMemberByPredicateSelectionRule.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using FluentAssertions.Common; + +namespace FluentAssertions.Equivalency.Selection +{ + /// + /// Selection rule that includes a particular member in the structural comparison. + /// + internal class IncludeMemberByPredicateSelectionRule : IMemberSelectionRule + { + private readonly Func predicate; + private readonly string description; + + public IncludeMemberByPredicateSelectionRule(Expression> predicate) + { + description = predicate.Body.ToString(); + this.predicate = predicate.Compile(); + } + + public bool IncludesMembers + { + get { return true; } + } + + public IEnumerable SelectMembers(IEnumerable selectedMembers, ISubjectInfo context, IEquivalencyAssertionOptions config) + { + var members = new List(selectedMembers); + + foreach (SelectedMemberInfo selectedMemberInfo in context.RuntimeType.GetNonPrivateMembers()) + { + if (predicate(new NestedSelectionContext(context, selectedMemberInfo))) + { + if (!members.Any(p => p.IsEquivalentTo(selectedMemberInfo))) + { + members.Add(selectedMemberInfo); + } + } + } + + return members; + } + + /// 2 + public override string ToString() + { + return "Include member when " + description; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/IncludeMemberByPredicateSelectionRule.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/IncludeMemberByPredicateSelectionRule.cs.meta new file mode 100644 index 0000000..63a6701 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/IncludeMemberByPredicateSelectionRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1076e6ef2672c5c41815b54cf094e35e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/MemberPath.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/MemberPath.cs new file mode 100644 index 0000000..39116ce --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/MemberPath.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FluentAssertions.Equivalency.Selection +{ + /// + /// Encapsulates a dotted candidate to a (nested) member of a type. + /// + internal class MemberPath + { + private readonly List segments = new List(); + + public MemberPath(string dottedPath) + { + segments.AddRange(Segmentize(dottedPath)); + } + + public bool IsParentOrChildOf(string candidate) + { + return IsParent(candidate) || IsChild(candidate); + } + + private bool IsChild(string candidate) + { + return Segmentize(candidate).Take(segments.Count).SequenceEqual(segments); + } + + private bool IsParent(string candidate) + { + string[] candidateSegments = Segmentize(candidate); + + return candidateSegments.SequenceEqual(segments.Take(candidateSegments.Length)); + } + + private static string[] Segmentize(string dottedPath) + { + return dottedPath.Split(new[] { '.', '[', ']' }, StringSplitOptions.RemoveEmptyEntries); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/MemberPath.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/MemberPath.cs.meta new file mode 100644 index 0000000..92d7878 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/MemberPath.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f4f2b8ab1c17de847ac49b2583b9fe6b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/NestedSelectionContext.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/NestedSelectionContext.cs new file mode 100644 index 0000000..a2d084a --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/NestedSelectionContext.cs @@ -0,0 +1,38 @@ +using System; +using System.Reflection; +using FluentAssertions.Common; + +namespace FluentAssertions.Equivalency.Selection +{ + /// + /// Represents a selection context of a nested property + /// + internal class NestedSelectionContext : ISubjectInfo + { + public NestedSelectionContext(ISubjectInfo context, SelectedMemberInfo selectedMemberInfo) + { + SelectedMemberPath = context.SelectedMemberPath.Combine(selectedMemberInfo.Name); + SelectedMemberDescription = context.SelectedMemberDescription.Combine(selectedMemberInfo.Name); + CompileTimeType = selectedMemberInfo.MemberType; + RuntimeType = selectedMemberInfo.MemberType; + SelectedMemberInfo = selectedMemberInfo; + } + + public SelectedMemberInfo SelectedMemberInfo { get; private set; } + + public string SelectedMemberPath { get; private set; } + + public string SelectedMemberDescription { get; private set; } + + /// + /// Gets the compile-time type of the current object. If the current object is not the root object, then it returns the + /// same as the property does. + /// + public Type CompileTimeType { get; private set; } + + /// + /// Gets the run-time type of the current object. + /// + public Type RuntimeType { get; private set; } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/NestedSelectionContext.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/NestedSelectionContext.cs.meta new file mode 100644 index 0000000..e8e91da --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/NestedSelectionContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: da3cfcb3d5733c84ebf4e95b7db99dc9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/SelectMemberByPathSelectionRule.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/SelectMemberByPathSelectionRule.cs new file mode 100644 index 0000000..068ff33 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/SelectMemberByPathSelectionRule.cs @@ -0,0 +1,55 @@ +using System.Collections.Generic; +using System.Text.RegularExpressions; + +namespace FluentAssertions.Equivalency.Selection +{ + internal abstract class SelectMemberByPathSelectionRule : IMemberSelectionRule + { + private readonly string selectedPath; + + protected SelectMemberByPathSelectionRule(string selectedPath) + { + this.selectedPath = selectedPath; + } + + public virtual bool IncludesMembers + { + get { return false; } + } + + public IEnumerable SelectMembers(IEnumerable selectedMembers, ISubjectInfo context, + IEquivalencyAssertionOptions config) + { + string path = context.SelectedMemberPath; + if (!ContainsIndexingQualifiers(selectedPath)) + { + path = RemoveInitialIndexQualifier(path); + } + + return OnSelectMembers(selectedMembers, path, context); + } + + protected abstract IEnumerable OnSelectMembers(IEnumerable selectedMembers, string currentPath, ISubjectInfo context); + + private static bool ContainsIndexingQualifiers(string path) + { + return path.Contains("[") && path.Contains("]"); + } + + private string RemoveInitialIndexQualifier(string propertyPath) + { + var indexQualifierRegex = new Regex(@"^\[\d+]"); + + if (!indexQualifierRegex.IsMatch(selectedPath)) + { + var match = indexQualifierRegex.Match(propertyPath); + if (match.Success) + { + propertyPath = propertyPath.Substring(match.Length); + } + } + + return propertyPath; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/SelectMemberByPathSelectionRule.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/SelectMemberByPathSelectionRule.cs.meta new file mode 100644 index 0000000..a6b9220 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/Selection/SelectMemberByPathSelectionRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 295f9e786d15e374b8972d99fe3e7d3d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/SelfReferenceEquivalencyAssertionOptions.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/SelfReferenceEquivalencyAssertionOptions.cs new file mode 100644 index 0000000..5a3e64e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/SelfReferenceEquivalencyAssertionOptions.cs @@ -0,0 +1,628 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Linq.Expressions; +using System.Text; +using FluentAssertions.Common; +using FluentAssertions.Equivalency.Matching; +using FluentAssertions.Equivalency.Ordering; +using FluentAssertions.Equivalency.Selection; + +namespace FluentAssertions.Equivalency +{ + /// + /// Represents the run-time behavior of a structural equivalency assertion. + /// + public abstract class SelfReferenceEquivalencyAssertionOptions : IEquivalencyAssertionOptions + where TSelf : SelfReferenceEquivalencyAssertionOptions + { + #region Private Definitions + + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private readonly List selectionRules = new List(); + + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private readonly List matchingRules = new List(); + + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private readonly List userEquivalencySteps = new List(); + + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private CyclicReferenceHandling cyclicReferenceHandling = CyclicReferenceHandling.ThrowException; + + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + protected readonly OrderingRuleCollection orderingRules = new OrderingRuleCollection(); + + [DebuggerBrowsable(DebuggerBrowsableState.Never)] + private bool isRecursive; + + private bool allowInfiniteRecursion; + + private EnumEquivalencyHandling enumEquivalencyHandling; + + private bool useRuntimeTyping; + + private bool includeProperties; + + private bool includeFields; + + private readonly List valueTypes = new List(); + + private readonly Func isValueType = _ => false; + private ITraceWriter traceWriter; + + #endregion + + internal SelfReferenceEquivalencyAssertionOptions() + { + AddMatchingRule(new MustMatchByNameRule()); + + orderingRules.Add(new ByteArrayOrderingRule()); + } + + /// + /// Creates an instance of the equivalency assertions options based on defaults previously configured by the caller. + /// + protected SelfReferenceEquivalencyAssertionOptions(IEquivalencyAssertionOptions defaults) + { + allowInfiniteRecursion = defaults.AllowInfiniteRecursion; + isRecursive = defaults.IsRecursive; + cyclicReferenceHandling = defaults.CyclicReferenceHandling; + allowInfiniteRecursion = defaults.AllowInfiniteRecursion; + enumEquivalencyHandling = defaults.EnumEquivalencyHandling; + useRuntimeTyping = defaults.UseRuntimeTyping; + includeProperties = defaults.IncludeProperties; + includeFields = defaults.IncludeFields; + + selectionRules.AddRange(defaults.SelectionRules); + userEquivalencySteps.AddRange(defaults.UserEquivalencySteps); + matchingRules.AddRange(defaults.MatchingRules); + orderingRules = new OrderingRuleCollection(defaults.OrderingRules); + + isValueType = defaults.IsValueType; + traceWriter = defaults.TraceWriter; + + RemoveSelectionRule(); + RemoveSelectionRule(); + } + + /// + /// Gets an ordered collection of selection rules that define what members are included. + /// + IEnumerable IEquivalencyAssertionOptions.SelectionRules + { + get + { + bool hasConflictingRules = selectionRules.Any(rule => rule.IncludesMembers); + + if (includeProperties && !hasConflictingRules) + { + yield return new AllPublicPropertiesSelectionRule(); + } + + if (includeFields && !hasConflictingRules) + { + yield return new AllPublicFieldsSelectionRule(); + } + + foreach (IMemberSelectionRule rule in selectionRules) + { + yield return rule; + } + } + } + + /// + /// Gets an ordered collection of matching rules that determine which subject members are matched with which + /// expectation members. + /// + IEnumerable IEquivalencyAssertionOptions.MatchingRules + { + get { return matchingRules; } + } + + /// + /// Gets an ordered collection of Equivalency steps how a subject is compared with the expectation. + /// + IEnumerable IEquivalencyAssertionOptions.UserEquivalencySteps + { + get { return userEquivalencySteps; } + } + + /// + /// Gets an ordered collection of rules that determine whether or not the order of collections is important. By default, + /// ordering is irrelevant. + /// + OrderingRuleCollection IEquivalencyAssertionOptions.OrderingRules + { + get { return orderingRules; } + } + + /// + /// Gets value indicating whether the equality check will include nested collections and complex types. + /// + bool IEquivalencyAssertionOptions.IsRecursive + { + get { return isRecursive; } + } + + bool IEquivalencyAssertionOptions.AllowInfiniteRecursion + { + get { return allowInfiniteRecursion; } + } + + /// + /// Gets value indicating how cyclic references should be handled. By default, it will throw an exception. + /// + CyclicReferenceHandling IEquivalencyAssertionOptions.CyclicReferenceHandling + { + get { return cyclicReferenceHandling; } + } + + EnumEquivalencyHandling IEquivalencyAssertionOptions.EnumEquivalencyHandling + { + get { return enumEquivalencyHandling; } + } + + bool IEquivalencyAssertionOptions.UseRuntimeTyping + { + get { return useRuntimeTyping; } + } + + bool IEquivalencyAssertionOptions.IncludeProperties + { + get { return includeProperties; } + } + + bool IEquivalencyAssertionOptions.IncludeFields + { + get { return includeFields; } + } + + /// + /// Gets a value indicating whether the should be treated as having value semantics. + /// + bool IEquivalencyAssertionOptions.IsValueType(Type type) + { + return valueTypes.Contains(type) || isValueType(type) || AssertionOptions.IsValueType(type); + } + + /// + /// Causes inclusion of only public properties of the subject as far as they are defined on the declared type. + /// + /// + /// This clears all previously registered selection rules. + /// + public TSelf IncludingAllDeclaredProperties() + { + RespectingDeclaredTypes(); + + ExcludingFields(); + IncludingProperties(); + + WithoutSelectionRules(); + + return (TSelf)this; + } + + /// + /// Causes inclusion of only public properties of the subject based on its run-time type rather than its declared type. + /// + /// + /// This clears all previously registered selection rules. + /// + public TSelf IncludingAllRuntimeProperties() + { + RespectingRuntimeTypes(); + + ExcludingFields(); + IncludingProperties(); + + WithoutSelectionRules(); + + return (TSelf)this; + } + + /// + /// Instructs the comparison to include fields. + /// + /// + /// This is part of the default behavior. + /// + public TSelf IncludingFields() + { + includeFields = true; + return (TSelf)this; + } + + /// + /// Instructs the comparison to exclude fields. + /// + /// + /// This does not preclude use of `Including`. + /// + public TSelf ExcludingFields() + { + includeFields = false; + return (TSelf)this; + } + + /// + /// Instructs the comparison to include properties. + /// + /// + /// This is part of the default behavior. + /// + public TSelf IncludingProperties() + { + includeProperties = true; + return (TSelf)this; + } + + /// + /// Instructs the comparison to exclude properties. + /// + /// + /// This does not preclude use of `Including`. + /// + public TSelf ExcludingProperties() + { + includeProperties = false; + return (TSelf)this; + } + + /// + /// Instructs the comparison to respect the subject's runtime type. + /// + public TSelf RespectingRuntimeTypes() + { + useRuntimeTyping = true; + return (TSelf)this; + } + + /// + /// Instructs the comparison to respect the subject's declared type. + /// + public TSelf RespectingDeclaredTypes() + { + useRuntimeTyping = false; + return (TSelf)this; + } + + /// + /// Excludes a (nested) property based on a predicate from the structural equality check. + /// + public TSelf Excluding(Expression> predicate) + { + AddSelectionRule(new ExcludeMemberByPredicateSelectionRule(predicate)); + return (TSelf)this; + } + + /// + /// Tries to match the members of the subject with equally named members on the expectation. Ignores those + /// members that don't exist on the expectation and previously registered matching rules. + /// + public TSelf ExcludingMissingMembers() + { + ClearMatchingRules(); + matchingRules.Add(new TryMatchByNameRule()); + return (TSelf)this; + } + + /// + /// Requires the expectation to have members which are equally named to members on the subject. + /// + /// + public TSelf ThrowingOnMissingMembers() + { + ClearMatchingRules(); + matchingRules.Add(new MustMatchByNameRule()); + return (TSelf)this; + } + + /// + /// The assertion to execute when the predicate is met. + /// + public Restriction Using(Action> action) + { + return new Restriction((TSelf)this, action); + } + + /// + /// Causes the structural equality check to include nested collections and complex types. + /// + public TSelf IncludingNestedObjects() + { + isRecursive = true; + return (TSelf)this; + } + + /// + /// Causes the structural equality check to exclude nested collections and complex types. + /// + /// + /// Behaves similarly to the old property assertions API. + /// + public TSelf ExcludingNestedObjects() + { + isRecursive = false; + return (TSelf)this; + } + + /// + /// Causes the structural equality check to ignore any cyclic references. + /// + /// + /// By default, cyclic references within the object graph will cause an exception to be thrown. + /// + public TSelf IgnoringCyclicReferences() + { + cyclicReferenceHandling = CyclicReferenceHandling.Ignore; + return (TSelf)this; + } + + + /// + /// Disables limitations on recursion depth when the structural equality check is configured to include nested objects + /// + public TSelf AllowingInfiniteRecursion() + { + allowInfiniteRecursion = true; + return (TSelf)this; + } + + /// + /// Clears all selection rules, including those that were added by default. + /// + public void WithoutSelectionRules() + { + selectionRules.Clear(); + } + + /// + /// Clears all matching rules, including those that were added by default. + /// + public void WithoutMatchingRules() + { + ClearMatchingRules(); + } + + /// + /// Adds a selection rule to the ones already added by default, and which is evaluated after all existing rules. + /// + public TSelf Using(IMemberSelectionRule selectionRule) + { + return AddSelectionRule(selectionRule); + } + + /// + /// Adds a matching rule to the ones already added by default, and which is evaluated before all existing rules. + /// + public TSelf Using(IMemberMatchingRule matchingRule) + { + return AddMatchingRule(matchingRule); + } + + /// + /// Adds an assertion rule to the ones already added by default, and which is evaluated before all existing rules. + /// NOTE: These assertion rules do not apply to the root object. + /// + public TSelf Using(IAssertionRule assertionRule) + { + userEquivalencySteps.Insert(0, new AssertionRuleEquivalencyStepAdapter(assertionRule)); + return (TSelf) this; + } + + /// + /// Adds an equivalency step rule to the ones already added by default, and which is evaluated before previous user-registered steps + /// + public TSelf Using(IEquivalencyStep equivalencyStep) + { + return AddEquivalencyStep(equivalencyStep); + } + + /// + /// Causes all collections to be compared in the order in which the items appear in the expectation. + /// + public TSelf WithStrictOrdering() + { + orderingRules.Add(new MatchAllOrderingRule()); + return (TSelf)this; + } + + /// + /// Causes the collection identified by the provided to be compared in the order + /// in which the items appear in the expectation. + /// + public TSelf WithStrictOrderingFor(Expression> predicate) + { + orderingRules.Add(new PredicateBasedOrderingRule(predicate)); + return (TSelf)this; + } + + /// + /// Causes the collection identified by the provided to be compared ignoring the order + /// in which the items appear in the expectation. + /// + public TSelf WithoutStrictOrderingFor(Expression> predicate) + { + orderingRules.Add(new PredicateBasedOrderingRule(predicate) + { + Invert = true + }); + + return (TSelf)this; + } + + /// + /// Causes to compare Enum properties using the result of their ToString method. + /// + /// + /// By default, enums are compared by value. + /// + public TSelf ComparingEnumsByName() + { + enumEquivalencyHandling = EnumEquivalencyHandling.ByName; + return (TSelf) this; + } + + /// + /// Causes to compare Enum members using their underlying value only. + /// + /// + /// This is the default. + /// + public TSelf ComparingEnumsByValue() + { + enumEquivalencyHandling = EnumEquivalencyHandling.ByValue; + return (TSelf) this; + } + + /// + /// Marks the as a value type which must be compared using its + /// method. + /// + public TSelf ComparingByValue() + { + valueTypes.Add(typeof(T)); + return (TSelf) this; + } + + /// + /// Enables tracing the steps the equivalency validation followed to compare two graphs. + /// + public TSelf WithTracing(ITraceWriter writer = null) + { + traceWriter = writer ?? new StringBuilderTraceWriter(); + return (TSelf)this; + } + + #region Non-fluent API + + protected void RemoveSelectionRule() where T : IMemberSelectionRule + { + foreach (T selectionRule in selectionRules.OfType().ToArray()) + { + selectionRules.Remove(selectionRule); + } + } + + private void ClearMatchingRules() + { + matchingRules.Clear(); + } + + protected TSelf AddSelectionRule(IMemberSelectionRule selectionRule) + { + selectionRules.Add(selectionRule); + return (TSelf) this; + } + + private TSelf AddMatchingRule(IMemberMatchingRule matchingRule) + { + matchingRules.Insert(0, matchingRule); + return (TSelf) this; + } + + private TSelf AddEquivalencyStep(IEquivalencyStep equivalencyStep) + { + userEquivalencySteps.Add(equivalencyStep); + return (TSelf) this; + } + + #endregion + + /// + /// Returns a string that represents the current object. + /// + /// + /// A string that represents the current object. + /// + /// 2 + public override string ToString() + { + var builder = new StringBuilder(); + + builder.AppendLine($"- Use {(useRuntimeTyping ? "runtime" : "declared")} types and members"); + if (isRecursive) + { + if (allowInfiniteRecursion) + { + builder.AppendLine("- Recurse indefinitely"); + } + } + + builder.AppendFormat("- Compare enums by {0}" + Environment.NewLine, + (enumEquivalencyHandling == EnumEquivalencyHandling.ByName) ? "name" : "value"); + + if (cyclicReferenceHandling == CyclicReferenceHandling.Ignore) + { + builder.AppendLine("- Ignoring cyclic references"); + } + + foreach (IMemberSelectionRule rule in selectionRules) + { + builder.AppendLine("- " + rule); + } + + foreach (IMemberMatchingRule rule in matchingRules) + { + builder.AppendLine("- " + rule); + } + + foreach (IEquivalencyStep step in userEquivalencySteps) + { + builder.AppendLine("- " + step); + } + + foreach (IOrderingRule rule in orderingRules) + { + builder.AppendLine("- " + rule); + } + + return builder.ToString(); + } + + public ITraceWriter TraceWriter => traceWriter; + + /// + /// Defines additional overrides when used with + /// + public class Restriction + { + private readonly Action> action; + private readonly TSelf options; + + public Restriction(TSelf options, Action> action) + { + this.options = options; + this.action = action; + } + + /// + /// Allows overriding the way structural equality is applied to (nested) objects of type + /// + public TSelf WhenTypeIs() + { + When(info => info.RuntimeType.IsSameOrInherits(typeof(TMemberType))); + return options; + } + + /// + /// Allows overriding the way structural equality is applied to particular members. + /// + /// + /// A predicate based on the of the subject that is used to identify the property for which the + /// override applies. + /// + public TSelf When(Expression> predicate) + { +#pragma warning disable 618 + options.Using(new AssertionRule(predicate, action)); + return options; +#pragma warning restore 618 + } + } + } +} diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/SelfReferenceEquivalencyAssertionOptions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/SelfReferenceEquivalencyAssertionOptions.cs.meta new file mode 100644 index 0000000..34c591f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/SelfReferenceEquivalencyAssertionOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b3b713acbc6ccf74ea46c1953fe4a60f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/SimpleEqualityEquivalencyStep.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/SimpleEqualityEquivalencyStep.cs new file mode 100644 index 0000000..28a704e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/SimpleEqualityEquivalencyStep.cs @@ -0,0 +1,30 @@ +namespace FluentAssertions.Equivalency +{ + public class SimpleEqualityEquivalencyStep : IEquivalencyStep + { + /// + /// Gets a value indicating whether this step can handle the current subject and/or expectation. + /// + public bool CanHandle(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config) + { + return !config.IsRecursive && !context.IsRoot; + } + + /// + /// Applies a step as part of the task to compare two objects for structural equality. + /// + /// + /// Should return true if the subject matches the expectation or if no additional assertions + /// have to be executed. Should return false otherwise. + /// + /// + /// May throw when preconditions are not met or if it detects mismatching data. + /// + public bool Handle(IEquivalencyValidationContext context, IEquivalencyValidator structuralEqualityValidator, IEquivalencyAssertionOptions config) + { + context.Subject.Should().Be(context.Expectation, context.Because, context.BecauseArgs); + + return true; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/SimpleEqualityEquivalencyStep.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/SimpleEqualityEquivalencyStep.cs.meta new file mode 100644 index 0000000..ff449ef --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/SimpleEqualityEquivalencyStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7765744ef886eec41a29567466b81288 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/StringEqualityEquivalencyStep.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/StringEqualityEquivalencyStep.cs new file mode 100644 index 0000000..ab48d3b --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/StringEqualityEquivalencyStep.cs @@ -0,0 +1,100 @@ +using System; + +using FluentAssertions.Common; +using FluentAssertions.Execution; + +namespace FluentAssertions.Equivalency +{ + public class StringEqualityEquivalencyStep : IEquivalencyStep + { + /// + /// Gets a value indicating whether this step can handle the current subject and/or expectation. + /// + public bool CanHandle(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config) + { + Type subjectType = config.GetSubjectType(context); + + return (subjectType != null) && (subjectType == typeof (string)); + } + + /// + /// Applies a step as part of the task to compare two objects for structural equality. + /// + /// + /// Should return true if the subject matches the expectation or if no additional assertions + /// have to be executed. Should return false otherwise. + /// + /// + /// May throw when preconditions are not met or if it detects mismatching data. + /// + public bool Handle(IEquivalencyValidationContext context, IEquivalencyValidator parent, IEquivalencyAssertionOptions config) + { + if (!ValidateAgainstNulls(context)) + { + return true; + } + + bool expectationIsString = ValidateAgainstType(context); + + if (expectationIsString) + { + string subject = (string) context.Subject; + string expectation = (context.Expectation == null) + ? null + : (string) context.Expectation; + + subject.Should() + .Be(expectation, context.Because, context.BecauseArgs); + } + + return true; + } + + private static bool ValidateAgainstNulls(IEquivalencyValidationContext context) + { + object expected = context.Expectation; + object subject = context.Subject; + string subjectDescription = GetSubjectDescription(context); + + bool onlyOneNull = ((expected == null) && (subject != null)) || + ((expected != null) && (subject == null)); + + if (onlyOneNull) + { + AssertionScope.Current.FailWith( + "Expected " + subjectDescription + + " to be {0}{reason}, but found {1}.", expected, subject); + return false; + } + + return true; + } + + private static bool ValidateAgainstType(IEquivalencyValidationContext context) + { + bool expectationisNull = ReferenceEquals(context.Expectation, null); + + if (expectationisNull) + { + // Do not know the declared type of the expectation. + return true; + } + + return + AssertionScope.Current + .ForCondition(context.Expectation.GetType() + .IsSameOrInherits(typeof (T))) + .FailWith( + "Expected " + GetSubjectDescription(context) + + " to be {0}, but found {1}", + context.Expectation.GetType(), + context.RuntimeType); + + } + + private static string GetSubjectDescription(IEquivalencyValidationContext context) + { + return (context.SelectedMemberDescription.Length == 0) ? "subject" : context.SelectedMemberDescription; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/StringEqualityEquivalencyStep.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/StringEqualityEquivalencyStep.cs.meta new file mode 100644 index 0000000..39ac332 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/StringEqualityEquivalencyStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8b78ff08c4c1b1e4995770c9ffca9dcc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/StructuralEqualityEquivalencyStep.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/StructuralEqualityEquivalencyStep.cs new file mode 100644 index 0000000..899278f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/StructuralEqualityEquivalencyStep.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using FluentAssertions.Execution; + +namespace FluentAssertions.Equivalency +{ + public class StructuralEqualityEquivalencyStep : IEquivalencyStep + { + /// + /// Gets a value indicating whether this step can handle the current subject and/or expectation. + /// + public bool CanHandle(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config) + { + return (context.IsRoot || config.IsRecursive); + } + + public bool Handle(IEquivalencyValidationContext context, IEquivalencyValidator parent, IEquivalencyAssertionOptions config) + { + bool expectationIsNotNull = AssertionScope.Current + .ForCondition(!ReferenceEquals(context.Expectation, null)) + .FailWith( + "Expected {context:subject} to be , but found {0}.", + context.Subject); + + bool subjectIsNotNull = + AssertionScope.Current.ForCondition( + !ReferenceEquals(context.Subject, null)) + .FailWith( + "Expected {context:object} to be {0}{reason}, but found {1}.", + context.Expectation, + context.Subject); + + IEnumerable selectedMembers = GetSelectedMembers(context, config).ToArray(); + if (context.IsRoot && !selectedMembers.Any()) + { + throw new InvalidOperationException( + "No members were found for comparison. " + + "Please specify some members to include in the comparison or choose a more meaningful assertion."); + } + + if (expectationIsNotNull && subjectIsNotNull) + { + foreach (var selectedMemberInfo in selectedMembers) + { + AssertMemberEquality(context, parent, selectedMemberInfo, config); + } + } + return true; + } + + private static void AssertMemberEquality(IEquivalencyValidationContext context, IEquivalencyValidator parent, SelectedMemberInfo selectedMemberInfo, IEquivalencyAssertionOptions config) + { + var matchingMember = FindMatchFor(selectedMemberInfo, context, config); + if (matchingMember != null) + { + var nestedContext = context.CreateForNestedMember(selectedMemberInfo, matchingMember); + if (nestedContext != null) + { + parent.AssertEqualityUsing(nestedContext); + } + } + } + + private static SelectedMemberInfo FindMatchFor(SelectedMemberInfo selectedMemberInfo, IEquivalencyValidationContext context, IEquivalencyAssertionOptions config) + { + var query = + from rule in config.MatchingRules + let match = rule.Match(selectedMemberInfo, context.Expectation, context.SelectedMemberDescription, config) + where match != null + select match; + + return query.FirstOrDefault(); + } + + internal IEnumerable GetSelectedMembers(IEquivalencyValidationContext context, + IEquivalencyAssertionOptions config) + { + IEnumerable members = Enumerable.Empty(); + + foreach (var selectionRule in config.SelectionRules) + { + members = selectionRule.SelectMembers(members, context, config); + } + + return members; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/StructuralEqualityEquivalencyStep.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/StructuralEqualityEquivalencyStep.cs.meta new file mode 100644 index 0000000..4ede9ea --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/StructuralEqualityEquivalencyStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 97ed7a9f87af2674b8c87d34ef1360ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/SubjectInfoExtensions.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/SubjectInfoExtensions.cs new file mode 100644 index 0000000..df37df3 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/SubjectInfoExtensions.cs @@ -0,0 +1,51 @@ +using FluentAssertions.Common; + +namespace FluentAssertions.Equivalency +{ + public static class SubjectInfoExtensions + { + /// + /// Checks if the subject info setter has the given access modifier. + /// + /// The subject info being checked. + /// The access modifier that the subject info setter should have. + /// True if the subject info setter has the given access modifier, false otherwise. + public static bool WhichSetterHas(this ISubjectInfo subjectInfo, CSharpAccessModifier accessModifier) + { + return subjectInfo.SelectedMemberInfo.SetAccessModifier == accessModifier; + } + + /// + /// Checks if the subject info setter does not have the given access modifier. + /// + /// The subject info being checked. + /// The access modifier that the subject info setter should not have. + /// True if the subject info setter does not have the given access modifier, false otherwise. + public static bool WhichSetterDoesNotHave(this ISubjectInfo subjectInfo, CSharpAccessModifier accessModifier) + { + return subjectInfo.SelectedMemberInfo.SetAccessModifier != accessModifier; + } + + /// + /// Checks if the subject info getter has the given access modifier. + /// + /// The subject info being checked. + /// The access modifier that the subject info getter should have. + /// True if the subject info getter has the given access modifier, false otherwise. + public static bool WhichGetterHas(this ISubjectInfo subjectInfo, CSharpAccessModifier accessModifier) + { + return subjectInfo.SelectedMemberInfo.GetAccessModifier == accessModifier; + } + + /// + /// Checks if the subject info getter does not have the given access modifier. + /// + /// The subject info being checked. + /// The access modifier that the subject info getter should not have. + /// True if the subject info getter does not have the given access modifier, false otherwise. + public static bool WhichGetterDoesNotHave(this ISubjectInfo subjectInfo, CSharpAccessModifier accessModifier) + { + return subjectInfo.SelectedMemberInfo.GetAccessModifier != accessModifier; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/SubjectInfoExtensions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/SubjectInfoExtensions.cs.meta new file mode 100644 index 0000000..62d96fa --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/SubjectInfoExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ec3c43f5c32f9b947abeb090f69b17f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/TryConversionEquivalencyStep.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/TryConversionEquivalencyStep.cs new file mode 100644 index 0000000..c5127d8 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/TryConversionEquivalencyStep.cs @@ -0,0 +1,70 @@ +using System; +using System.Globalization; + +using FluentAssertions.Common; + +namespace FluentAssertions.Equivalency +{ + public class TryConversionEquivalencyStep : IEquivalencyStep + { + /// + /// Gets a value indicating whether this step can handle the current subject and/or expectation. + /// + public bool CanHandle(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config) + { + return true; + } + + /// + /// Applies a step as part of the task to compare two objects for structural equality. + /// + /// + /// Should return true if the subject matches the expectation or if no additional assertions + /// have to be executed. Should return false otherwise. + /// + /// + /// May throw when preconditions are not met or if it detects mismatching data. + /// + public bool Handle(IEquivalencyValidationContext context, IEquivalencyValidator structuralEqualityValidator, IEquivalencyAssertionOptions config) + { + if (!ReferenceEquals(context.Expectation, null) && !ReferenceEquals(context.Subject, null) + && !context.Subject.GetType().IsSameOrInherits(context.Expectation.GetType())) + { + Type expectationType = context.Expectation.GetType(); + + object convertedSubject; + if (TryChangeType(context.Subject, expectationType, out convertedSubject)) + { + context.TraceSingle(path => $"Converted subject {context.Subject} at {path} to {expectationType}"); + + var newContext = context.CreateWithDifferentSubject(convertedSubject, expectationType); + + structuralEqualityValidator.AssertEqualityUsing(newContext); + return true; + } + + context.TraceSingle(path => $"Subject {context.Subject} at {path} could not be converted to {expectationType}"); + } + + return false; + } + + private static bool TryChangeType(object subject, Type expectationType, out object conversionResult) + { + conversionResult = null; + try + { + conversionResult = Convert.ChangeType(subject, expectationType, CultureInfo.CurrentCulture); + return true; + } + catch (FormatException) + { + } + catch (InvalidCastException) + { + } + + return false; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/TryConversionEquivalencyStep.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/TryConversionEquivalencyStep.cs.meta new file mode 100644 index 0000000..745f917 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/TryConversionEquivalencyStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 10057de6aa5dbcb4987d81cbdbac0055 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/ValueTypeEquivalencyStep.cs b/Assets/Plugins/FluentAssertions/Core/Equivalency/ValueTypeEquivalencyStep.cs new file mode 100644 index 0000000..acf261a --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/ValueTypeEquivalencyStep.cs @@ -0,0 +1,48 @@ +using System; + +namespace FluentAssertions.Equivalency +{ + /// + /// Ensures that types that are marked as value types are treated as such. + /// + public class ValueTypeEquivalencyStep : IEquivalencyStep + { + /// + /// Gets a value indicating whether this step can handle the current subject and/or expectation. + /// + public bool CanHandle(IEquivalencyValidationContext context, IEquivalencyAssertionOptions config) + { + Type type = config.GetSubjectType(context); + + bool canHandle = + (type != null) && + (type != typeof (object)) && + config.IsValueType(type) && + !type.IsArray; + + if (canHandle) + { + context.TraceSingle(path => $"Treating {path} as a value type"); + } + + return canHandle; + } + + /// + /// Applies a step as part of the task to compare two objects for structural equality. + /// + /// + /// Should return true if the subject matches the expectation or if no additional assertions + /// have to be executed. Should return false otherwise. + /// + /// + /// May throw when preconditions are not met or if it detects mismatching data. + /// + public bool Handle(IEquivalencyValidationContext context, IEquivalencyValidator structuralEqualityValidator, IEquivalencyAssertionOptions config) + { + context.Subject.Should().Be(context.Expectation, context.Because, context.BecauseArgs); + + return true; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Equivalency/ValueTypeEquivalencyStep.cs.meta b/Assets/Plugins/FluentAssertions/Core/Equivalency/ValueTypeEquivalencyStep.cs.meta new file mode 100644 index 0000000..98d3f4c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Equivalency/ValueTypeEquivalencyStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 960d3dffe8f28c141a3173dce1aaefe8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/EquivalencyStepCollection.cs b/Assets/Plugins/FluentAssertions/Core/EquivalencyStepCollection.cs new file mode 100644 index 0000000..e45dca5 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/EquivalencyStepCollection.cs @@ -0,0 +1,123 @@ +#region + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using FluentAssertions.Equivalency; + +#endregion + +namespace FluentAssertions +{ + /// + /// Represents a mutable collection of equivalency steps that can be reordered and/or amended with additional + /// custom equivalency steps. + /// + public class EquivalencyStepCollection : IEnumerable + { + private List steps; + + public EquivalencyStepCollection() + { + steps = GetDefaultSteps().ToList(); + } + + public IEnumerator GetEnumerator() + { + return steps.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + /// + /// Adds a new after any of the built-in steps, with the exception of the final + /// . + /// + public void Add() where TStep : IEquivalencyStep, new() + { + InsertBefore(); + } + + /// + /// Adds a new right after the specified . + /// + public void AddAfter() where TStep : IEquivalencyStep, new() + { + int insertIndex = Math.Max(steps.Count - 1, 0); + + IEquivalencyStep predecessor = steps.LastOrDefault(s => s is TPredecessor); + if (predecessor != null) + { + insertIndex = Math.Min(insertIndex, steps.LastIndexOf(predecessor) + 1); + } + + steps.Insert(insertIndex, new TStep()); + } + + /// + /// Inserts a new before any of the built-in steps. + /// + public void Insert() where TStep : IEquivalencyStep, new() + { + steps.Insert(0, new TStep()); + } + + /// + /// Inserts a new just before the . + /// + public void InsertBefore() where TStep : IEquivalencyStep, new() + { + int insertIndex = Math.Max(steps.Count - 1, 0); + + IEquivalencyStep equalityStep = steps.LastOrDefault(s => s is TSuccessor); + if (equalityStep != null) + { + insertIndex = steps.LastIndexOf(equalityStep); + } + + steps.Insert(insertIndex, new TStep()); + } + + /// + /// Removes all instances of the specified from the current step. + /// + public void Remove() where TStep : IEquivalencyStep + { + steps.RemoveAll(s => s is TStep); + } + + /// + /// Removes each and every built-in . + /// + public void Clear() + { + steps.Clear(); + } + + public void Reset() + { + steps = GetDefaultSteps().ToList(); + } + + private static IEnumerable GetDefaultSteps() + { + yield return new RunAllUserStepsEquivalencyStep(); + yield return new TryConversionEquivalencyStep(); + yield return new ReferenceEqualityEquivalencyStep(); + yield return new GenericDictionaryEquivalencyStep(); + yield return new DictionaryEquivalencyStep(); + yield return new MultiDimensionalArrayEquivalencyStep(); + yield return new GenericEnumerableEquivalencyStep(); + yield return new EnumerableEquivalencyStep(); + yield return new StringEqualityEquivalencyStep(); + yield return new EnumEqualityStep(); + yield return new ValueTypeEquivalencyStep(); + yield return new StructuralEqualityEquivalencyStep(); + yield return new SimpleEqualityEquivalencyStep(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/EquivalencyStepCollection.cs.meta b/Assets/Plugins/FluentAssertions/Core/EquivalencyStepCollection.cs.meta new file mode 100644 index 0000000..0a7a7b2 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/EquivalencyStepCollection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 428d1b1da3340f248a020fbc252c26d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Events.meta b/Assets/Plugins/FluentAssertions/Core/Events.meta new file mode 100644 index 0000000..95edd00 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Events.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 57483a48005f64144b9821e9e02b4a18 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Events/EventMonitor.cs b/Assets/Plugins/FluentAssertions/Core/Events/EventMonitor.cs new file mode 100644 index 0000000..e86fb9a --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Events/EventMonitor.cs @@ -0,0 +1,28 @@ +using System; + +namespace FluentAssertions.Events +{ + /// + /// Monitors events on a given source + /// + public interface IEventMonitor + { + /// + /// Attaches event monitoring for the events defined by . + /// + /// A type implemented by the monitored object + void Attach(Type typeDefiningEventsToMonitor); + + /// + /// Gets the for the event with the given name. + /// + /// The name of the event for which the is required. + /// The for the event with the given name, if it exists; otherwise, null. + IEventRecorder GetEventRecorder(string eventName); + + /// + /// Resets monitor to clear records of events raised so far. + /// + void Reset(); + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Events/EventMonitor.cs.meta b/Assets/Plugins/FluentAssertions/Core/Events/EventMonitor.cs.meta new file mode 100644 index 0000000..0c9f850 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Events/EventMonitor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2264adc105cfadd4186527fc0bc26db7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Events/EventRecorder.cs b/Assets/Plugins/FluentAssertions/Core/Events/EventRecorder.cs new file mode 100644 index 0000000..b98217b --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Events/EventRecorder.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; + +namespace FluentAssertions.Events +{ + /// + /// Records activity for a single event. + /// + [DebuggerNonUserCode] + public class EventRecorder : IEventRecorder + { + private readonly IList raisedEvents = new List(); + private readonly object lockable = new object(); + private WeakReference eventObject; + + /// + /// + /// The object events are recorded from + /// The name of the event that's recorded + public EventRecorder(object eventRaiser, string eventName) + { + EventObject = eventRaiser; + EventName = eventName; + } + + /// + /// The object events are recorded from + /// + public object EventObject + { + get { return (eventObject == null) ? null : eventObject.Target; } + private set { eventObject = new WeakReference(value); } + } + + /// + /// The name of the event that's recorded + /// + public string EventName { get; private set; } + + /// + /// Enumerate raised events + /// + public IEnumerator GetEnumerator() + { + lock (lockable) + { + return raisedEvents.ToList().GetEnumerator(); + } + } + + /// + /// Enumerate raised events + /// + /// + IEnumerator IEnumerable.GetEnumerator() + { + lock (lockable) + { + return raisedEvents.ToList().GetEnumerator(); + } + } + + /// + /// Called by the auto-generated IL, to record information about a raised event. + /// + public void RecordEvent(params object [] parameters) + { + lock (lockable) + { + raisedEvents.Add(new RecordedEvent(EventObject, parameters)); + } + } + + /// + /// Resets recorder to clear records of events raised so far. + /// + public void Reset() + { + lock ( lockable ) + { + raisedEvents.Clear(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Events/EventRecorder.cs.meta b/Assets/Plugins/FluentAssertions/Core/Events/EventRecorder.cs.meta new file mode 100644 index 0000000..ba20a1a --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Events/EventRecorder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: abc2716a81b3d14468401b63687f1d42 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Events/EventRecordersMap.cs b/Assets/Plugins/FluentAssertions/Core/Events/EventRecordersMap.cs new file mode 100644 index 0000000..2ae2053 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Events/EventRecordersMap.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; + +namespace FluentAssertions.Events +{ + /// + /// Simple dictionary that uses a to the event source as the key. + /// This should ensure the Garbage Collector can still clean-up the event source object. + /// + [DebuggerNonUserCode] + public sealed class EventRecordersMap + { + private readonly Dictionary map = new Dictionary(); + + public void Add(object eventSource, IEventMonitor recorder ) + { + ForEach(eventSource, keyValuePair => map.Remove(keyValuePair.Key)); + + map.Add(new WeakReference(eventSource), recorder ); + } + + public IEventMonitor this[object eventSource] + { + get + { + IEventMonitor result = null; + TryGetMonitor( eventSource, out result ); + + if (result == null) + { + throw new InvalidOperationException(string.Format( + "Object <{0}> is not being monitored for events or has already been garbage collected. " + + "Use the MonitorEvents() extension method to start monitoring events.", eventSource)); + } + + return result; + } + } + + public bool TryGetMonitor(object eventSource, out IEventMonitor eventMonitor) + { + IEventMonitor result = null; + ForEach( eventSource, pair => result = pair.Value ); + eventMonitor = result; + return eventMonitor != null; + } + + private void ForEach(object eventSource, Action> action) + { + foreach (var keyValuePair in map.ToArray()) + { + if (IsObjectGarbageCollected(keyValuePair.Key)) + { + map.Remove(keyValuePair.Key); + } + else if (RefersToSameObject(keyValuePair.Key, eventSource)) + { + action(keyValuePair); + } + else + { + // Ignore + } + } + } + + private static bool RefersToSameObject(WeakReference weakReference, object eventSource) + { + return ReferenceEquals(weakReference.Target, eventSource); + } + + private static bool IsObjectGarbageCollected(WeakReference weakReference) + { + return ReferenceEquals(weakReference.Target, null); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Events/EventRecordersMap.cs.meta b/Assets/Plugins/FluentAssertions/Core/Events/EventRecordersMap.cs.meta new file mode 100644 index 0000000..e5e68f2 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Events/EventRecordersMap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: acfae1768870ff04fadea588dcc41e4b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Events/IEventRecorder.cs b/Assets/Plugins/FluentAssertions/Core/Events/IEventRecorder.cs new file mode 100644 index 0000000..22e94cf --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Events/IEventRecorder.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; + +namespace FluentAssertions.Events +{ + /// + /// Records raised events for one event on one object + /// + public interface IEventRecorder : IEnumerable + { + /// + /// Store information about a raised event + /// + /// Parameters the event was raised with + void RecordEvent(params object[] parameters); + + /// + /// Resets the event recorder, removing any revents recorded thus far. + /// + void Reset(); + + /// + /// The object events are recorded from + /// + object EventObject { get; } + + /// + /// The name of the event that's recorded + /// + string EventName { get; } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Events/IEventRecorder.cs.meta b/Assets/Plugins/FluentAssertions/Core/Events/IEventRecorder.cs.meta new file mode 100644 index 0000000..3fba327 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Events/IEventRecorder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 63046a9045a62934d8e08f6a2374fd94 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Events/RecordedEvent.cs b/Assets/Plugins/FluentAssertions/Core/Events/RecordedEvent.cs new file mode 100644 index 0000000..1e4dc4a --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Events/RecordedEvent.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; + +namespace FluentAssertions.Events +{ + /// + /// This class is used to store data about an intercepted event + /// + [DebuggerNonUserCode] + public class RecordedEvent + { + private object[] parameters; + + /// + /// Default constructor stores the parameters the event was raised with + /// + public RecordedEvent(object monitoredObject, params object[] parameters) + { + Parameters = parameters.Select(p => (p == monitoredObject) ? new WeakReference(p) : p); + } + + /// + /// Parameters for the event + /// + public IEnumerable Parameters + { + get + { + return parameters.Select(parameter => + { + var weakReference = parameter as WeakReference; + return (weakReference != null) ? weakReference.Target : parameter; + }).ToArray(); + } + + private set { parameters = value.ToArray(); } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Events/RecordedEvent.cs.meta b/Assets/Plugins/FluentAssertions/Core/Events/RecordedEvent.cs.meta new file mode 100644 index 0000000..8107b47 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Events/RecordedEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 352d3238e3cfe2640a10a1f2f0168a51 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Execution.meta b/Assets/Plugins/FluentAssertions/Core/Execution.meta new file mode 100644 index 0000000..f043634 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7e36ab149adbf624c99b1c70006d0fc9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/AssertionScope.cs b/Assets/Plugins/FluentAssertions/Core/Execution/AssertionScope.cs new file mode 100644 index 0000000..df142d1 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/AssertionScope.cs @@ -0,0 +1,264 @@ +#region + +using System; +using System.Linq; +using FluentAssertions.Common; + +#endregion + +namespace FluentAssertions.Execution +{ + /// + /// Represents an implicit or explicit scope within which multiple assertions can be collected. + /// + public class AssertionScope : IDisposable + { + #region Private Definitions + + private readonly IAssertionStrategy assertionStrategy; + private readonly ContextDataItems contextData = new ContextDataItems(); + + private string reason; + private bool useLineBreaks; + + [ThreadStatic] + private static AssertionScope current; + + private AssertionScope parent; + private string expectation = ""; + private readonly bool evaluateCondition = true; + + #endregion + + private AssertionScope(IAssertionStrategy _assertionStrategy) + { + assertionStrategy = _assertionStrategy; + parent = null; + } + + /// + /// Starts an unnamed scope within which multiple assertions can be executed and which will not throw until the scope is disposed. + /// + public AssertionScope() + : this(new CollectingAssertionStrategy()) + { + parent = current; + current = this; + + if (parent != null) + { + contextData.Add(parent.contextData); + } + } + + /// + /// Starts a named scope within which multiple assertions can be executed and which will not throw until the scope is disposed. + /// + public AssertionScope(string context) : this() + { + AddNonReportable("context", context); + } + + /// + /// Creates a nested scope used during chaining. + /// + internal AssertionScope(AssertionScope sourceScope, bool sourceSucceeded) + { + assertionStrategy = sourceScope.assertionStrategy; + contextData = sourceScope.contextData; + reason = sourceScope.reason; + useLineBreaks = sourceScope.useLineBreaks; + parent = sourceScope.parent; + expectation = sourceScope.expectation; + evaluateCondition = sourceSucceeded; + } + + /// + /// Gets the current thread-specific assertion scope. + /// + public static AssertionScope Current + { + get { return current ?? new AssertionScope(new DefaultAssertionStrategy()); } + private set { current = value; } + } + + /// + /// Indicates that every argument passed into is displayed on a separate line. + /// + public AssertionScope UsingLineBreaks + { + get + { + useLineBreaks = true; + return this; + } + } + + /// + /// Gets a value indicating whether or not the last assertion executed through this scope succeeded. + /// + public bool Succeeded { get; private set; } + + /// + /// Specify the reason why you expect the condition to be true. + /// + /// + /// A formatted phrase explaining why the condition should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AssertionScope BecauseOf(string because, params object[] becauseArgs) + { + reason = string.Format(because ?? "", becauseArgs ?? new object[0]); + return this; + } + + /// + /// Sets the expectation part of the failure message when the assertion is not met. + /// + /// + /// In addition to the numbered -style placeholders, messages may contain a few + /// specialized placeholders as well. For instance, {reason} will be replaced with the reason of the assertion as passed + /// to . Other named placeholders will be replaced with the scope data + /// passed through and . Finally, a description of the + /// current subject can be passed through the {context:description} placeholder. This is used in the message if no + /// explicit context is specified through the constructor. + /// Note that only 10 are supported in combination with a {reason}. + /// If an expectation was set through a prior call to , then the failure message is appended to that + /// expectation. + /// + /// The format string that represents the failure message. + /// Optional arguments to any numbered placeholders. + public AssertionScope WithExpectation(string expectation, params object[] args) + { + this.expectation = new MessageBuilder(useLineBreaks).Build(expectation, args, reason, contextData); + return this; + } + + /// + /// Allows to safely select the subject for successive assertions, even when the prior assertion has failed. + /// + /// + /// Selector which result is passed to successive calls to . + /// + public GivenSelector Given(Func selector) + { + return new GivenSelector(selector, evaluateCondition, this); + } + + /// + /// Specify the condition that must be satisfied. + /// + /// + /// If true the assertion will be treated as successful and no exceptions will be thrown. + /// + public AssertionScope ForCondition(bool condition) + { + if (evaluateCondition) + { + Succeeded = condition; + } + + return this; + } + + /// + /// Sets the failure message when the assertion is not met, or completes the failure message set to a + /// prior call to to . + /// + /// + /// In addition to the numbered -style placeholders, messages may contain a few + /// specialized placeholders as well. For instance, {reason} will be replaced with the reason of the assertion as passed + /// to . Other named placeholders will be replaced with the scope data + /// passed through and . Finally, a description of the + /// current subject can be passed through the {context:description} placeholder. This is used in the message if no + /// explicit context is specified through the constructor. + /// Note that only 10 are supported in combination with a {reason}. + /// If an expectation was set through a prior call to , then the failure message is appended to that + /// expectation. + /// + /// The format string that represents the failure message. + /// Optional arguments to any numbered placeholders. + public Continuation FailWith(string message, params object[] args) + { + try + { + if (evaluateCondition && !Succeeded) + { + string result = new MessageBuilder(useLineBreaks).Build(message, args, reason, contextData); + + if (!string.IsNullOrEmpty(expectation)) + { + result = expectation + result; + } + + assertionStrategy.HandleFailure(result.Capitalize()); + } + + return new Continuation(this, Succeeded); + } + finally + { + Succeeded = false; + } + } + + /// + /// Adds a pre-formatted failure message to the current scope. + /// + public void AddFailure(string formattedFailureMessage) + { + assertionStrategy.HandleFailure(formattedFailureMessage); + } + + public void AddNonReportable(string key, object value) + { + contextData.Add(key, value, Reportability.Hidden); + } + + public void AddReportable(string key, string value) + { + contextData.Add(key, value, Reportability.Reportable); + } + + /// + /// Discards and returns the failures that happened up to now. + /// + public string[] Discard() + { + return assertionStrategy.DiscardFailures().ToArray(); + } + + /// + /// Gets data associated with the current scope and identified by . + /// + public T Get(string key) + { + return contextData.Get(key); + } + + /// + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + public void Dispose() + { + Current = parent; + + if (parent != null) + { + foreach (string failureMessage in assertionStrategy.FailureMessages) + { + parent.assertionStrategy.HandleFailure(failureMessage); + } + + parent = null; + } + else + { + assertionStrategy.ThrowIfAny(contextData.Reportable); + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/AssertionScope.cs.meta b/Assets/Plugins/FluentAssertions/Core/Execution/AssertionScope.cs.meta new file mode 100644 index 0000000..1617337 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/AssertionScope.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9c58fda7efe37e442bcd2844de8e8287 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/CollectingAssertionStrategy.cs b/Assets/Plugins/FluentAssertions/Core/Execution/CollectingAssertionStrategy.cs new file mode 100644 index 0000000..3e71739 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/CollectingAssertionStrategy.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using FluentAssertions.Common; + +namespace FluentAssertions.Execution +{ + internal class CollectingAssertionStrategy : IAssertionStrategy + { + private readonly List failureMessages = new List(); + + /// + /// Returns the messages for the assertion failures that happened until now. + /// + public IEnumerable FailureMessages + { + get { return failureMessages; } + } + + /// + /// Discards and returns the failure messages that happened up to now. + /// + public IEnumerable DiscardFailures() + { + var discardedFailures = failureMessages.ToArray(); + failureMessages.Clear(); + return discardedFailures; + } + + /// + /// Will throw a combined exception for any failures have been collected since was called. + /// + public void ThrowIfAny(IDictionary context) + { + if (failureMessages.Any()) + { + var builder = new StringBuilder(); + builder.AppendLine(string.Join(Environment.NewLine, failureMessages.ToArray())); + + if (context.Any()) + { + foreach (KeyValuePair pair in context) + { + builder.AppendFormat("\nWith {0}:\n{1}", pair.Key, pair.Value); + } + } + + Services.ThrowException(builder.ToString()); + } + } + + /// + /// Instructs the strategy to handle a assertion failure. + /// + public void HandleFailure(string message) + { + failureMessages.Add(message); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/CollectingAssertionStrategy.cs.meta b/Assets/Plugins/FluentAssertions/Core/Execution/CollectingAssertionStrategy.cs.meta new file mode 100644 index 0000000..316bb8e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/CollectingAssertionStrategy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7082eec06582f824ea48645dc7c9f654 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/ContextDataItems.cs b/Assets/Plugins/FluentAssertions/Core/Execution/ContextDataItems.cs new file mode 100644 index 0000000..05189eb --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/ContextDataItems.cs @@ -0,0 +1,93 @@ +using System.Collections.Generic; +using System.Linq; + +using FluentAssertions.Formatting; + +namespace FluentAssertions.Execution +{ + /// + /// Represents a collection of data items that are associated with an . + /// + internal class ContextDataItems + { + private readonly List items = new List(); + + public IDictionary Reportable + { + get { return items.Where(item => item.Reportable).ToDictionary(item => item.Key, item => item.Value); } + } + + public string AsStringOrDefault(string key) + { + DataItem item = items.SingleOrDefault(i => i.Key == key); + if (item != null) + { + if ((key == "subject") || (key == "expectation")) + { + return Formatter.ToString(item.Value); + } + + return item.Value.ToString(); + } + + return null; + } + + public void Add(ContextDataItems contextDataItems) + { + foreach (var item in contextDataItems.items) + { + Add(item.Clone()); + } + } + + public void Add(string key, object value, Reportability reportability) + { + Add(new DataItem(key, value, reportability)); + } + + private void Add(DataItem item) + { + var existingItem = items.SingleOrDefault(i => i.Key == item.Key); + if (existingItem != null) + { + items.Remove(existingItem); + } + + items.Add(item); + } + + public T Get(string key) + { + DataItem item = items.SingleOrDefault(i => i.Key == key); + return (T)((item != null) ? item.Value : default(T)); + } + + internal class DataItem + { + private readonly Reportability reportability; + + public DataItem(string key, object value, Reportability reportability) + { + Key = key; + Value = value; + this.reportability = reportability; + } + + public string Key { get; private set; } + + public object Value { get; private set; } + + public bool Reportable + { + get { return reportability == Reportability.Reportable; } + } + + public DataItem Clone() + { + var cloneable = Value as ICloneable2; + return new DataItem(Key, (cloneable != null) ? cloneable.Clone() : Value, reportability); + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/ContextDataItems.cs.meta b/Assets/Plugins/FluentAssertions/Core/Execution/ContextDataItems.cs.meta new file mode 100644 index 0000000..3481520 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/ContextDataItems.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ba80036ea9489964cb3a11313448f2ba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/Continuation.cs b/Assets/Plugins/FluentAssertions/Core/Execution/Continuation.cs new file mode 100644 index 0000000..07b300c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/Continuation.cs @@ -0,0 +1,42 @@ +namespace FluentAssertions.Execution +{ + /// + /// Enables chaining multiple assertions on an . + /// + public class Continuation + { + #region Private Definition + + private readonly AssertionScope sourceScope; + private readonly bool sourceSucceeded; + + #endregion + + public Continuation(AssertionScope sourceScope, bool sourceSucceeded) + { + this.sourceScope = sourceScope; + this.sourceSucceeded = sourceSucceeded; + } + + /// + /// Continuous the assertion chain if the previous assertion was successful. + /// + public AssertionScope Then + { + get { return new AssertionScope(sourceScope, sourceSucceeded); } + } + + public bool SourceSucceeded + { + get { return sourceSucceeded; } + } + + /// + /// Provides back-wards compatibility for code that expects to return a boolean. + /// + public static implicit operator bool(Continuation continuation) + { + return continuation.sourceSucceeded; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/Continuation.cs.meta b/Assets/Plugins/FluentAssertions/Core/Execution/Continuation.cs.meta new file mode 100644 index 0000000..2aee9e1 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/Continuation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1bf5ea098f6ebc0429ba24bdddcea97c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/ContinuationOfGiven.cs b/Assets/Plugins/FluentAssertions/Core/Execution/ContinuationOfGiven.cs new file mode 100644 index 0000000..0bf3895 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/ContinuationOfGiven.cs @@ -0,0 +1,37 @@ +namespace FluentAssertions.Execution +{ + /// + /// Enables chaining multiple assertions from a call. + /// + public class ContinuationOfGiven + { + #region Private Definitions + + private readonly GivenSelector parent; + private readonly bool succeeded; + + #endregion + + public ContinuationOfGiven(GivenSelector parent, bool succeeded) + { + this.parent = parent; + this.succeeded = succeeded; + } + + /// + /// Continuous the assertion chain if the previous assertion was successful. + /// + public GivenSelector Then + { + get { return parent; } + } + + /// + /// Provides back-wards compatibility for code that expects to return a boolean. + /// + public static implicit operator bool(ContinuationOfGiven continuationOfGiven) + { + return continuationOfGiven.succeeded; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/ContinuationOfGiven.cs.meta b/Assets/Plugins/FluentAssertions/Core/Execution/ContinuationOfGiven.cs.meta new file mode 100644 index 0000000..85188a3 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/ContinuationOfGiven.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ee1b7a9e7b3adc40bbe843a5e7cee66 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/DefaultAssertionStrategy.cs b/Assets/Plugins/FluentAssertions/Core/Execution/DefaultAssertionStrategy.cs new file mode 100644 index 0000000..05e944e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/DefaultAssertionStrategy.cs @@ -0,0 +1,44 @@ +using System.Collections.Generic; + +using FluentAssertions.Common; + +namespace FluentAssertions.Execution +{ + internal class DefaultAssertionStrategy : IAssertionStrategy + { + /// + /// Returns the messages for the assertion failures that happened until now. + /// + public IEnumerable FailureMessages + { + get + { + return new string[0]; + } + } + + /// + /// Instructs the strategy to handle a assertion failure. + /// + public void HandleFailure(string message) + { + Services.ThrowException(message); + } + + /// + /// Discards and returns the failure messages that happened up to now. + /// + public IEnumerable DiscardFailures() + { + return new string[0]; + } + + /// + /// Will throw a combined exception for any failures have been collected since was called. + /// + public void ThrowIfAny(IDictionary context) + { + + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/DefaultAssertionStrategy.cs.meta b/Assets/Plugins/FluentAssertions/Core/Execution/DefaultAssertionStrategy.cs.meta new file mode 100644 index 0000000..ffa4cc2 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/DefaultAssertionStrategy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ded064d2fec0f204290b64dfe5f326e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/Execute.cs b/Assets/Plugins/FluentAssertions/Core/Execution/Execute.cs new file mode 100644 index 0000000..55ce9ad --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/Execute.cs @@ -0,0 +1,23 @@ +using FluentAssertions.Common; + +namespace FluentAssertions.Execution +{ + /// + /// Helper class for verifying a condition and/or throwing a test harness specific exception representing an assertion failure. + /// + public static class Execute + { + /// + /// Gets an object that wraps and executes a conditional or unconditional assertion. + /// + public static AssertionScope Assertion + { + get + { + Services.Initialize(); + + return AssertionScope.Current; + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/Execute.cs.meta b/Assets/Plugins/FluentAssertions/Core/Execution/Execute.cs.meta new file mode 100644 index 0000000..34d7dc4 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/Execute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8438c164bb2b91944aee225047c96e25 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/GivenSelector.cs b/Assets/Plugins/FluentAssertions/Core/Execution/GivenSelector.cs new file mode 100644 index 0000000..23f1f1c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/GivenSelector.cs @@ -0,0 +1,129 @@ +using System; +using System.Linq; + +namespace FluentAssertions.Execution +{ + /// + /// Represents a chaining object returned from to continue the assertion using + /// an object returned by a selector. + /// + public class GivenSelector + { + #region Private Definitions + + private readonly T subject; + private readonly bool evaluateCondition; + private readonly AssertionScope parentScope; + + #endregion + + public GivenSelector(Func selector, bool evaluateCondition, AssertionScope parentScope) + { + this.evaluateCondition = evaluateCondition; + this.parentScope = parentScope; + + subject = evaluateCondition ? selector() : default(T); + } + + /// + /// Specify the condition that must be satisfied upon the subject selected through a prior selector. + /// + /// + /// If true the assertion will be treated as successful and no exceptions will be thrown. + /// + /// + /// The condition will not be evaluated if the prior assertion failed, nor will + /// throw any exceptions. + /// + public GivenSelector ForCondition(Func predicate) + { + if (evaluateCondition) + { + parentScope.ForCondition(predicate(subject)); + } + + return this; + } + + /// + /// Allows to safely refine the subject for successive assertions, even when the prior assertion has failed. + /// + /// + /// Selector which result is passed to successive calls to . + /// + /// + /// The selector will not be invoked if the prior assertion failed, nor will + /// throw any exceptions. + /// + public GivenSelector Given(Func selector) + { + return new GivenSelector(() => selector(subject), evaluateCondition, parentScope); + } + + /// + /// Sets the failure message when the assertion is not met, or completes the failure message set to a + /// prior call to to . + /// + /// + /// If an expectation was set through a prior call to , then the failure message is appended to that + /// expectation. + /// + /// The format string that represents the failure message. + public ContinuationOfGiven FailWith(string message) + { + return FailWith(message, new object[0]); + } + + /// + /// Sets the failure message when the assertion is not met, or completes the failure message set to a + /// prior call to to . + /// + /// + /// In addition to the numbered -style placeholders, messages may contain a few + /// specialized placeholders as well. For instance, {reason} will be replaced with the reason of the assertion as passed + /// to . Other named placeholders will be replaced with the scope data + /// passed through and . Finally, a description of the + /// current subject can be passed through the {context:description} placeholder. This is used in the message if no + /// explicit context is specified through the constructor. + /// Note that only 10 are supported in combination with a {reason}. + /// If an expectation was set through a prior call to , then the failure message is appended to that + /// expectation. + /// + /// The format string that represents the failure message. + /// Optional arguments to any numbered placeholders. + public ContinuationOfGiven FailWith(string message, params Func[] args) + { + return FailWith(message, args.Select(a => a(subject)).ToArray()); + } + + /// + /// Sets the failure message when the assertion is not met, or completes the failure message set to a + /// prior call to to . + /// + /// + /// In addition to the numbered -style placeholders, messages may contain a few + /// specialized placeholders as well. For instance, {reason} will be replaced with the reason of the assertion as passed + /// to . Other named placeholders will be replaced with the scope data + /// passed through and . Finally, a description of the + /// current subject can be passed through the {context:description} placeholder. This is used in the message if no + /// explicit context is specified through the constructor. + /// Note that only 10 are supported in combination with a {reason}. + /// If an expectation was set through a prior call to , then the failure message is appended to that + /// expectation. + /// + /// The format string that represents the failure message. + /// Optional arguments to any numbered placeholders. + public ContinuationOfGiven FailWith(string message, params object[] args) + { + bool succeeded = parentScope.Succeeded; + + if (evaluateCondition) + { + Continuation continuation = parentScope.FailWith(message, args); + succeeded = continuation.SourceSucceeded; + } + + return new ContinuationOfGiven(this, succeeded); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/GivenSelector.cs.meta b/Assets/Plugins/FluentAssertions/Core/Execution/GivenSelector.cs.meta new file mode 100644 index 0000000..5d78f77 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/GivenSelector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7af38290dfae0614abca9e72153f42a5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/GivenSelectorExtensions.cs b/Assets/Plugins/FluentAssertions/Core/Execution/GivenSelectorExtensions.cs new file mode 100644 index 0000000..325a154 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/GivenSelectorExtensions.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FluentAssertions.Execution +{ + internal static class GivenSelectorExtensions + { + public static ContinuationOfGiven> AssertCollectionIsNotNullOrEmpty( + this GivenSelector> givenSelector, int length) + { + return givenSelector + .AssertCollectionIsNotNull() + .Then + .AssertEitherCollectionIsNotEmpty(length); + } + + public static ContinuationOfGiven> AssertCollectionIsNotNull( + this GivenSelector> givenSelector) + { + return givenSelector + .ForCondition(items => !ReferenceEquals(items, null)) + .FailWith("but found collection is ."); + } + + public static ContinuationOfGiven> AssertEitherCollectionIsNotEmpty( + this GivenSelector> givenSelector, int length) + { + return givenSelector + .ForCondition(items => !EitherIsEmpty(length, items.Count())) + .FailWith("but found empty collection."); + } + + private static bool EitherIsEmpty(int length1, int length2) + { + return ((length1 == 0) && (length2 > 0)) || ((length1 > 0) && (length2 == 0)); + } + + public static ContinuationOfGiven AssertCollectionHasEnoughItems(this GivenSelector> givenSelector, + int length) + { + return givenSelector + .Given(items => items.ToArray()) + .AssertCollectionHasEnoughItems(length); + } + + public static ContinuationOfGiven AssertCollectionHasEnoughItems(this GivenSelector givenSelector, int length) + { + return givenSelector + .Given(items => items.ToArray()) + .ForCondition(items => items.Length >= length) + .FailWith("but {0} contains {1} item(s) less.", items => items, items => length - items.Length); + } + + public static ContinuationOfGiven AssertCollectionHasNotTooManyItems(this GivenSelector givenSelector, + int length) + { + return givenSelector + .Given(items => items.ToArray()) + .ForCondition(items => items.Length <= length) + .FailWith("but {0} contains {1} item(s) too many.", items => items, items => items.Length - length); + } + + public static ContinuationOfGiven AssertCollectionsHaveSameCount(this GivenSelector> givenSelector, + int length) + { + return givenSelector + .AssertEitherCollectionIsNotEmpty(length) + .Then + .AssertCollectionHasEnoughItems(length) + .Then + .AssertCollectionHasNotTooManyItems(length); + } + + public static void AssertCollectionsHaveSameItems(this GivenSelector givenSelector, + TExpected[] expected, Func findIndex) + { + givenSelector + .Given(actual => new {Items = actual, Index = findIndex(actual, expected)}) + .ForCondition(diff => diff.Index == -1) + .FailWith("but {0} differs at index {1}.", diff => diff.Items, diff => diff.Index); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/GivenSelectorExtensions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Execution/GivenSelectorExtensions.cs.meta new file mode 100644 index 0000000..7629d14 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/GivenSelectorExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d527a77950dd59b42ab2ae145e52ee93 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/IAssertionStrategy.cs b/Assets/Plugins/FluentAssertions/Core/Execution/IAssertionStrategy.cs new file mode 100644 index 0000000..5db6668 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/IAssertionStrategy.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; + +namespace FluentAssertions.Execution +{ + /// + /// Defines a strategy for handling failures in a . + /// + public interface IAssertionStrategy + { + /// + /// Returns the messages for the assertion failures that happened until now. + /// + IEnumerable FailureMessages { get; } + + /// + /// Instructs the strategy to handle a assertion failure. + /// + void HandleFailure(string message); + + /// + /// Discards and returns the failure messages that happened up to now. + /// + IEnumerable DiscardFailures(); + + /// + /// Will throw a combined exception for any failures have been collected since was called. + /// + void ThrowIfAny(IDictionary context); + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/IAssertionStrategy.cs.meta b/Assets/Plugins/FluentAssertions/Core/Execution/IAssertionStrategy.cs.meta new file mode 100644 index 0000000..5b8fb23 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/IAssertionStrategy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 70d4ad000cfc05d4ea3941142be82162 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/ICloneable2.cs b/Assets/Plugins/FluentAssertions/Core/Execution/ICloneable2.cs new file mode 100644 index 0000000..b4d0935 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/ICloneable2.cs @@ -0,0 +1,17 @@ +namespace FluentAssertions.Execution +{ + /// + /// Custom version of ICloneable that works on all frameworks. + /// + public interface ICloneable2 + { + /// + /// Creates a new object that is a copy of the current instance. + /// + /// + /// + /// A new object that is a copy of this instance. + /// + object Clone(); + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/ICloneable2.cs.meta b/Assets/Plugins/FluentAssertions/Core/Execution/ICloneable2.cs.meta new file mode 100644 index 0000000..0abf0bd --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/ICloneable2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 471b253b1d81a5e4487a1bee61f9f808 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/MessageBuilder.cs b/Assets/Plugins/FluentAssertions/Core/Execution/MessageBuilder.cs new file mode 100644 index 0000000..9b89616 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/MessageBuilder.cs @@ -0,0 +1,107 @@ +#region + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using FluentAssertions.Common; +using FluentAssertions.Formatting; + +#endregion + +namespace FluentAssertions.Execution +{ + /// + /// Encapsulates expanding the various placeholders supported in a failure message. + /// + internal class MessageBuilder + { + #region Private Definitions + + private readonly bool useLineBreaks; + + private readonly char[] blanks = {'\r', '\n', ' ', '\t'}; + + /// + /// Represents the phrase that can be used in as a placeholder for the reason of an assertion. + /// + private const string ReasonTag = "{reason}"; + + #endregion + + public MessageBuilder(bool useLineBreaks) + { + this.useLineBreaks = useLineBreaks; + } + + public string Build(string message, object[] messageArgs, string reason, ContextDataItems contextData) + { + string result = SubstituteReasonTag(message, SanitizeReason(reason)); + result = SubstituteContextualTags(result, contextData); + result = FormatArgumentPlaceholders(result, messageArgs); + return result; + } + + private string SubstituteReasonTag(string failureMessage, string reason) + { + return Regex.Replace(failureMessage, ReasonTag, reason); + } + + private string SubstituteContextualTags(string message, ContextDataItems contextData) + { + var regex = new Regex(@"\{(?[a-z|A-Z]+)(?:\:(?[a-z|A-Z|\s]+))?\}"); + return regex.Replace(message, match => + { + string key = match.Groups["key"].Value; + return + contextData.AsStringOrDefault(key)?.Replace("{", "{{").Replace("}", "}}") ?? + match.Groups["default"].Value; + }); + } + + private string FormatArgumentPlaceholders(string failureMessage, object[] failureArgs) + { + string[] values = failureArgs.Select(a => Formatter.ToString(a, useLineBreaks)).ToArray(); + + string formattedMessage = string.Format(failureMessage, values); + return formattedMessage.Replace("{{{{", "{{").Replace("}}}}", "}}"); + } + + private string SanitizeReason(string reason) + { + if (!string.IsNullOrEmpty(reason)) + { + reason = EnsurePrefix("because", reason); + reason = reason.Replace("{", "{{").Replace("}", "}}"); + + return StartsWithBlank(reason) ? reason : " " + reason; + } + + return ""; + } + + // SMELL: looks way too complex just to retain the leading whitepsace + private string EnsurePrefix(string prefix, string text) + { + string leadingBlanks = ExtractLeadingBlanksFrom(text); + string textWithoutLeadingBlanks = text.Substring(leadingBlanks.Length); + + return !textWithoutLeadingBlanks.StartsWith(prefix, StringComparison.CurrentCultureIgnoreCase) + ? leadingBlanks + prefix + " " + textWithoutLeadingBlanks + : text; + } + + private string ExtractLeadingBlanksFrom(string text) + { + string trimmedText = text.TrimStart(blanks); + int leadingBlanksCount = text.Length - trimmedText.Length; + + return text.Substring(0, leadingBlanksCount); + } + + private bool StartsWithBlank(string text) + { + return (text.Length > 0) && blanks.Any(blank => text[0] == blank); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/MessageBuilder.cs.meta b/Assets/Plugins/FluentAssertions/Core/Execution/MessageBuilder.cs.meta new file mode 100644 index 0000000..3fd7d6f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/MessageBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c6462ce1a2203de4d9f48d985f9aa72f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/Reportability.cs b/Assets/Plugins/FluentAssertions/Core/Execution/Reportability.cs new file mode 100644 index 0000000..a835b01 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/Reportability.cs @@ -0,0 +1,11 @@ +namespace FluentAssertions.Execution +{ + /// + /// Determines whether data associated with an should be included in the assertion failure. + /// + internal enum Reportability + { + Hidden, + Reportable + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Execution/Reportability.cs.meta b/Assets/Plugins/FluentAssertions/Core/Execution/Reportability.cs.meta new file mode 100644 index 0000000..eb802e0 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Execution/Reportability.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8285f9f86a7b1d545b992268336e3b87 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/FluentDateTimeExtensions.cs b/Assets/Plugins/FluentAssertions/Core/FluentDateTimeExtensions.cs new file mode 100644 index 0000000..b0453cd --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/FluentDateTimeExtensions.cs @@ -0,0 +1,194 @@ +using System; +using System.Diagnostics; + +namespace FluentAssertions +{ + /// + /// Extension methods on to allow for a more fluent way of specifying a . + /// + /// + /// Instead of
    + ///
    + /// new DateTime(2011, 3, 10)
    + ///
    + /// you can write 3.March(2011)
    + ///
    + /// Or even
    + ///
    + /// 3.March(2011).At(09, 30) + ///
    + /// + [DebuggerNonUserCode] + public static class FluentDateTimeExtensions + { + /// + /// Returns a new value for the specified and + /// in the month January. + /// + public static DateTime January(this int day, int year) + { + return new DateTime(year, 1, day); + } + + /// + /// Returns a new value for the specified and + /// in the month February. + /// + public static DateTime February(this int day, int year) + { + return new DateTime(year, 2, day); + } + + /// + /// Returns a new value for the specified and + /// in the month March. + /// + public static DateTime March(this int day, int year) + { + return new DateTime(year, 3, day); + } + + /// + /// Returns a new value for the specified and + /// in the month April. + /// + public static DateTime April(this int day, int year) + { + return new DateTime(year, 4, day); + } + + /// + /// Returns a new value for the specified and + /// in the month May. + /// + public static DateTime May(this int day, int year) + { + return new DateTime(year, 5, day); + } + + /// + /// Returns a new value for the specified and + /// in the month June. + /// + public static DateTime June(this int day, int year) + { + return new DateTime(year, 6, day); + } + + /// + /// Returns a new value for the specified and + /// in the month July. + /// + public static DateTime July(this int day, int year) + { + return new DateTime(year, 7, day); + } + + /// + /// Returns a new value for the specified and + /// in the month August. + /// + public static DateTime August(this int day, int year) + { + return new DateTime(year, 8, day); + } + + /// + /// Returns a new value for the specified and + /// in the month September. + /// + public static DateTime September(this int day, int year) + { + return new DateTime(year, 9, day); + } + + /// + /// Returns a new value for the specified and + /// in the month October. + /// + public static DateTime October(this int day, int year) + { + return new DateTime(year, 10, day); + } + + /// + /// Returns a new value for the specified and + /// in the month November. + /// + public static DateTime November(this int day, int year) + { + return new DateTime(year, 11, day); + } + + /// + /// Returns a new value for the specified and + /// in the month December. + /// + public static DateTime December(this int day, int year) + { + return new DateTime(year, 12, day); + } + + /// + /// Returns a new value for the specified and . + /// + public static DateTime At(this DateTime date, TimeSpan time) + { + return new DateTime(date.Year, date.Month, date.Day, time.Hours, time.Minutes, time.Seconds); + } + + /// + /// Returns a new value for the specified and time with the specified + /// , and optionally . + /// + public static DateTime At(this DateTime date, int hours, int minutes, int seconds = 0, int milliseconds = 0) + { + return new DateTime(date.Year, date.Month, date.Day, hours, minutes, seconds, milliseconds); + } + + /// + /// Returns a new value for the specified and time with the specified + /// , and optionally . + /// + public static DateTimeOffset At(this DateTimeOffset date, int hours, int minutes, int seconds = 0, int milliseconds = 0) + { + return new DateTimeOffset(date.Year, date.Month, date.Day, hours, minutes, seconds, milliseconds, date.Offset); + } + + /// + /// Returns a new value for the specified and time with + /// the kind set to . + /// + public static DateTime AsUtc(this DateTime dateTime) + { + return DateTime.SpecifyKind(dateTime, DateTimeKind.Utc); + } + + /// + /// Returns a new value for the specified and time with + /// the kind set to . + /// + public static DateTime AsLocal(this DateTime dateTime) + { + return DateTime.SpecifyKind(dateTime, DateTimeKind.Local); + } + + /// + /// Returns a new value that is the current before the + /// specified . + /// + public static DateTime Before(this TimeSpan timeDifference, DateTime sourceDateTime) + { + return sourceDateTime.Subtract(timeDifference); + } + + /// + /// Returns a new value that is the current after the + /// specified . + /// + public static DateTime After(this TimeSpan timeDifference, DateTime sourceDateTime) + { + return sourceDateTime.Add(timeDifference); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/FluentDateTimeExtensions.cs.meta b/Assets/Plugins/FluentAssertions/Core/FluentDateTimeExtensions.cs.meta new file mode 100644 index 0000000..27ccff7 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/FluentDateTimeExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 29b0ff2468d8ad04289c4c48bd02f7f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting.meta b/Assets/Plugins/FluentAssertions/Core/Formatting.meta new file mode 100644 index 0000000..c7573f8 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9043c1e5e33193d41a5f79a230cc5421 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/AggregateExceptionValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/AggregateExceptionValueFormatter.cs new file mode 100644 index 0000000..ddba4ce --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/AggregateExceptionValueFormatter.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace FluentAssertions.Formatting +{ + public class AggregateExceptionValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is AggregateException; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + var exception = (AggregateException)value; + if (exception.InnerExceptions.Count == 1) + { + return "(aggregated) " + Formatter.ToString(exception.InnerException); + } + else + { + var builder = new StringBuilder(); + + builder.AppendFormat("{0} (aggregated) exceptions:\n", exception.InnerExceptions.Count); + + foreach (Exception innerException in exception.InnerExceptions) + { + builder.AppendLine(); + builder.AppendLine(Formatter.ToString(innerException)); + } + + return builder.ToString(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/AggregateExceptionValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/AggregateExceptionValueFormatter.cs.meta new file mode 100644 index 0000000..e7e6d06 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/AggregateExceptionValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5413070175b647f40a0fe978e40fa382 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/AttributeBasedFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/AttributeBasedFormatter.cs new file mode 100644 index 0000000..2fb500b --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/AttributeBasedFormatter.cs @@ -0,0 +1,109 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; + +using FluentAssertions.Common; + +namespace FluentAssertions.Formatting +{ + /// + /// Specialized value formatter that looks for static methods in the caller's assembly marked with the + /// . + /// + public class AttributeBasedFormatter : IValueFormatter + { + private MethodInfo[] formatters; + private ValueFormatterDetectionMode detectionMode = ValueFormatterDetectionMode.Disabled; + + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return IsScanningEnabled && (value != null) && (GetFormatter(value) != null); + } + + private static bool IsScanningEnabled + { + get { return (Configuration.Current.ValueFormatterDetectionMode != ValueFormatterDetectionMode.Disabled); } + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + MethodInfo method = GetFormatter(value); + return (string)method.Invoke(null, new[] + { + value + }); + } + + private MethodInfo GetFormatter(object value) + { + return Formatters.FirstOrDefault(m => m.GetParameters().Single().ParameterType == value.GetType()); + } + + public MethodInfo[] Formatters + { + get + { + HandleValueFormatterDetectionModeChanges(); + + return formatters ?? (formatters = FindCustomFormatters()); + } + } + + private void HandleValueFormatterDetectionModeChanges() + { + if (detectionMode != Configuration.Current.ValueFormatterDetectionMode) + { + detectionMode = Configuration.Current.ValueFormatterDetectionMode; + formatters = null; + } + } + + private MethodInfo[] FindCustomFormatters() + { + var query = + from type in Services.Reflector.GetAllTypesFromAppDomain(Applicable) + where type != null + from method in type.GetMethods(BindingFlags.Static | BindingFlags.Public) + where method.IsStatic + where method.HasAttribute() + where method.GetParameters().Count() == 1 + select method; + + return query.ToArray(); + } + + private static bool Applicable(Assembly assembly) + { + var configuration = Configuration.Current; + ValueFormatterDetectionMode mode = configuration.ValueFormatterDetectionMode; + + return ((mode == ValueFormatterDetectionMode.Scan) || ( + (mode == ValueFormatterDetectionMode.Specific) && + assembly.FullName.Split(',')[0].Equals(configuration.ValueFormatterAssembly, StringComparison.CurrentCultureIgnoreCase))); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/AttributeBasedFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/AttributeBasedFormatter.cs.meta new file mode 100644 index 0000000..4a656db --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/AttributeBasedFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f5886b0ef24c63a4eaf21da0f4bb5e14 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/ByteValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/ByteValueFormatter.cs new file mode 100644 index 0000000..89ca8e6 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/ByteValueFormatter.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using System.Globalization; + +namespace FluentAssertions.Formatting +{ + public class ByteValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is byte; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + return "0x" + ((byte)value).ToString("X2"); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/ByteValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/ByteValueFormatter.cs.meta new file mode 100644 index 0000000..3a76c08 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/ByteValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7a7e58b05bb2a6a40a1b621c7d097720 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/DateTimeOffsetValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/DateTimeOffsetValueFormatter.cs new file mode 100644 index 0000000..226e260 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/DateTimeOffsetValueFormatter.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +using FluentAssertions.Common; + +namespace FluentAssertions.Formatting +{ + public class DateTimeOffsetValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return (value is DateTime) || (value is DateTimeOffset); + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + DateTimeOffset dateTime; + + if (value is DateTime) + { + dateTime = ((DateTime)value).ToDateTimeOffset(); + } + else + { + dateTime = (DateTimeOffset) value; + } + + var fragments = new List(); + + if (HasDate(dateTime)) + { + fragments.Add(dateTime.ToString("yyyy-MM-dd")); + } + + if (HasTime(dateTime)) + { + string format = HasMilliSeconds(dateTime) ? "HH:mm:ss.fff" : "HH:mm:ss"; + fragments.Add(dateTime.ToString(format)); + } + + if (dateTime.Offset > TimeSpan.Zero) + { + fragments.Add("+" + Formatter.ToString(dateTime.Offset)); + } + + if (dateTime.Offset < TimeSpan.Zero) + { + fragments.Add(Formatter.ToString(dateTime.Offset)); + } + + if (!fragments.Any()) + { + if (HasMilliSeconds(dateTime)) + { + fragments.Add("0001-01-01 00:00:00." + dateTime.ToString("fff")); + } + else + { + fragments.Add("0001-01-01 00:00:00.000"); + } + } + + return "<" + string.Join(" ", fragments.ToArray()) + ">"; + } + + private static bool HasTime(DateTimeOffset dateTime) + { + return (dateTime.Hour != 0) || (dateTime.Minute != 0) || (dateTime.Second != 0); + } + + private static bool HasDate(DateTimeOffset dateTime) + { + return (dateTime.Day != 1) || (dateTime.Month != 1) || (dateTime.Year != 1); + } + + private static bool HasMilliSeconds(DateTimeOffset dateTime) + { + return (dateTime.Millisecond > 0); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/DateTimeOffsetValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/DateTimeOffsetValueFormatter.cs.meta new file mode 100644 index 0000000..9140f2e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/DateTimeOffsetValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7304f75776ff5ac4dbdfd62effa116be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/DecimalValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/DecimalValueFormatter.cs new file mode 100644 index 0000000..fd93308 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/DecimalValueFormatter.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using System.Globalization; + +namespace FluentAssertions.Formatting +{ + public class DecimalValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is decimal; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + return ((decimal)value).ToString(CultureInfo.InvariantCulture) + "M"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/DecimalValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/DecimalValueFormatter.cs.meta new file mode 100644 index 0000000..0982866 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/DecimalValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b2aedd3093d24f429bafb86ff152101 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/DefaultValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/DefaultValueFormatter.cs new file mode 100644 index 0000000..3c6ad86 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/DefaultValueFormatter.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using FluentAssertions.Common; +using FluentAssertions.Equivalency; + +namespace FluentAssertions.Formatting +{ + public class DefaultValueFormatter : IValueFormatter + { + #region Private Definitions + + private const int RootLevel = 0; + private const int SpacesPerIndentionLevel = 3; + + #endregion + + /// + /// Determines whether this instance can handle the specified value. + /// + /// The value. + /// + /// true if this instance can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return true; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, + int nestedPropertyLevel = 0) + { + if (value.GetType() == typeof (object)) + { + return string.Format("System.Object (HashCode={0})", value.GetHashCode()); + } + + string prefix = (useLineBreaks ? Environment.NewLine : ""); + + if (HasDefaultToStringImplementation(value)) + { + if (!processedObjects.Contains(value)) + { + processedObjects.Add(value); + return prefix + GetTypeAndPublicPropertyValues(value, nestedPropertyLevel, processedObjects); + } + else + { + return string.Format("{{Cyclic reference to type {0} detected}}", value.GetType()); + } + } + + return prefix + value; + } + + private static bool HasDefaultToStringImplementation(object value) + { + return ReferenceEquals(value.ToString(), null) || value.ToString().Equals(value.GetType().ToString()); + } + + private static string GetTypeAndPublicPropertyValues(object obj, int nestedPropertyLevel, IList processedObjects) + { + var builder = new StringBuilder(); + + if (nestedPropertyLevel == RootLevel) + { + builder.AppendLine(); + builder.AppendLine(); + } + + var type = obj.GetType(); + builder.AppendLine(type.FullName); + builder.AppendLine(CreateWhitespaceForLevel(nestedPropertyLevel) + "{"); + + IEnumerable properties = type.GetNonPrivateMembers(); + foreach (var propertyInfo in properties.OrderBy(pi => pi.Name)) + { + builder.AppendLine(GetPropertyValueTextFor(obj, propertyInfo, nestedPropertyLevel + 1, processedObjects)); + } + + builder.AppendFormat("{0}}}", CreateWhitespaceForLevel(nestedPropertyLevel)); + + return builder.ToString(); + } + + private static string GetPropertyValueTextFor(object value, SelectedMemberInfo selectedMemberInfo, int nextMemberNestingLevel, + IList processedObjects) + { + object propertyValue; + + try + { + propertyValue = selectedMemberInfo.GetValue(value, null); + } + catch (Exception ex) + { + propertyValue = string.Format("[Member '{0}' threw an exception: '{1}']", selectedMemberInfo.Name, ex.Message); + } + + return string.Format("{0}{1} = {2}", + CreateWhitespaceForLevel(nextMemberNestingLevel), + selectedMemberInfo.Name, + Formatter.ToString(propertyValue, false, processedObjects, nextMemberNestingLevel)); + } + + private static string CreateWhitespaceForLevel(int level) + { + return new string(' ', level*SpacesPerIndentionLevel); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/DefaultValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/DefaultValueFormatter.cs.meta new file mode 100644 index 0000000..55ec8b0 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/DefaultValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b75b0f9ede7fff94fae63afd33c25d48 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/DoubleValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/DoubleValueFormatter.cs new file mode 100644 index 0000000..8e87567 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/DoubleValueFormatter.cs @@ -0,0 +1,62 @@ +using System.Collections.Generic; +using System.Globalization; +using System.Text.RegularExpressions; + +namespace FluentAssertions.Formatting +{ + public class DoubleValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is double; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + double doubleValue = (double)value; + + if (double.IsPositiveInfinity(doubleValue)) + { + return typeof(double).Name + "." + nameof(double.PositiveInfinity); + } + + if (double.IsNegativeInfinity(doubleValue)) + { + return typeof(double).Name + "." + nameof(double.NegativeInfinity); + } + + if (double.IsNaN(doubleValue)) + { + return doubleValue.ToString(CultureInfo.InvariantCulture); + } + + string formattedValue = doubleValue.ToString("R", CultureInfo.InvariantCulture); + + return (formattedValue.IndexOf('.') == -1) && (formattedValue.IndexOf('E') == -1) + ? formattedValue + ".0" + : formattedValue; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/DoubleValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/DoubleValueFormatter.cs.meta new file mode 100644 index 0000000..e507f2a --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/DoubleValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9ef9de836199faa4cb6ed09741c90027 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/EnumerableValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/EnumerableValueFormatter.cs new file mode 100644 index 0000000..fe9cca3 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/EnumerableValueFormatter.cs @@ -0,0 +1,58 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; + +namespace FluentAssertions.Formatting +{ + public class EnumerableValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is IEnumerable; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + var enumerable = ((IEnumerable)value).Cast().ToArray(); + if (enumerable.Any()) + { + string postfix = ""; + + int maxItems = 32; + if (enumerable.Length > maxItems) + { + postfix = $", ...{enumerable.Length - maxItems} more..."; + enumerable = enumerable.Take(maxItems).ToArray(); + } + + return "{" + string.Join(", ", enumerable.Select(obj => Formatter.ToString(obj, useLineBreaks, processedObjects, nestedPropertyLevel)).ToArray()) + postfix + "}"; + } + else + { + return "{empty}"; + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/EnumerableValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/EnumerableValueFormatter.cs.meta new file mode 100644 index 0000000..b540518 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/EnumerableValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fd16e91439050df479660065ddc3e136 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/ExceptionValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/ExceptionValueFormatter.cs new file mode 100644 index 0000000..277785e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/ExceptionValueFormatter.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace FluentAssertions.Formatting +{ + public class ExceptionValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is Exception; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + var exception = (Exception)value; + + var builder = new StringBuilder(); + builder.AppendFormat("{0} with message \"{1}\"\n", exception.GetType().FullName, exception.Message); + + if (exception.StackTrace != null) + { + foreach (string line in exception.StackTrace.Split(new[] { Environment.NewLine }, StringSplitOptions.None)) + { + builder.AppendLine(" " + line); + } + } + + return builder.ToString(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/ExceptionValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/ExceptionValueFormatter.cs.meta new file mode 100644 index 0000000..85ba1b9 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/ExceptionValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed27b57539d443a4da80dce2de66b0cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/ExpressionValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/ExpressionValueFormatter.cs new file mode 100644 index 0000000..1321ea1 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/ExpressionValueFormatter.cs @@ -0,0 +1,42 @@ +using System.Collections.Generic; +using System.Linq.Expressions; + +namespace FluentAssertions.Formatting +{ + public class ExpressionValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is Expression; + } + + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, + int nestedPropertyLevel = 0) + { + return value.ToString().Replace(" = ", " == "); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/ExpressionValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/ExpressionValueFormatter.cs.meta new file mode 100644 index 0000000..03d384f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/ExpressionValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f522321d072ea564a86095c1ae701db2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/Formatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/Formatter.cs new file mode 100644 index 0000000..ded1cd0 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/Formatter.cs @@ -0,0 +1,123 @@ +using System.Collections.Generic; +using System.Linq; + +using FluentAssertions.Common; + +namespace FluentAssertions.Formatting +{ + /// + /// Provides services for formatting an object being used in an assertion in a human readable format. + /// + public static class Formatter + { + #region Private Definitions + + private static readonly List customFormatters = new List(); + + private static readonly List defaultFormatters = new List + { + new AttributeBasedFormatter(), + new PropertyInfoFormatter(), + new NullValueFormatter(), + new GuidValueFormatter(), + new DateTimeOffsetValueFormatter(), + new TimeSpanValueFormatter(), + new Int32ValueFormatter(), + new Int64ValueFormatter(), + new DoubleValueFormatter(), + new SingleValueFormatter(), + new DecimalValueFormatter(), + new ByteValueFormatter(), + new UInt32ValueFormatter(), + new UInt64ValueFormatter(), + new Int16ValueFormatter(), + new UInt16ValueFormatter(), + new SByteValueFormatter(), + new StringValueFormatter(), + new ExpressionValueFormatter(), + new ExceptionValueFormatter(), + new EnumerableValueFormatter(), + new DefaultValueFormatter(), + }; + + #endregion + + /// + /// A list of objects responsible for formatting the objects represented by placeholders. + /// + public static IEnumerable Formatters + { + get { return customFormatters.Concat(defaultFormatters); } + } + + /// + /// Returns a human-readable representation of a particular object. + /// + /// The value for which to create a . + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// Indicates whether the formatter should use line breaks when the specific supports it. + /// + /// + /// A that represents this instance. + /// + public static string ToString(object value, bool useLineBreaks = false, IList processedObjects = null, int nestedPropertyLevel = 0) + { + Services.Initialize(); + + if (processedObjects == null) + { + processedObjects = new List(); + } + + const int MaxDepth = 15; + if (nestedPropertyLevel > MaxDepth) + { + return "{Maximum recursion depth was reached...}"; + } + + IValueFormatter firstFormatterThatCanHandleValue = Formatters.First(f => f.CanHandle(value)); + return firstFormatterThatCanHandleValue.ToString(value, useLineBreaks, processedObjects, nestedPropertyLevel); + } + + /// + /// Removes a custom formatter that was previously added though . + /// + public static void RemoveFormatter(IValueFormatter formatter) + { + if (customFormatters.Contains(formatter)) + { + customFormatters.Remove(formatter); + } + } + + /// + /// Ensures a custom formatter is included in the chain, just before the default formatter is executed. + /// + public static void AddFormatter(IValueFormatter formatter) + { + if (!customFormatters.Contains(formatter)) + { + customFormatters.Insert(0, formatter); + } + } + + /// + /// Allows a platform-specific assembly to add formatters without affecting the ones added by callers of . + /// + /// + internal static void AddPlatformFormatters(IValueFormatter[] formatters) + { + foreach (var formatter in formatters) + { + if (!defaultFormatters.Contains(formatter)) + { + defaultFormatters.Insert(0, formatter); + } + } + } + } +} diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/Formatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/Formatter.cs.meta new file mode 100644 index 0000000..3a9c759 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/Formatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f3def366d40c194e90b532daada92ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/GuidValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/GuidValueFormatter.cs new file mode 100644 index 0000000..ecadac5 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/GuidValueFormatter.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; + +namespace FluentAssertions.Formatting +{ + public class GuidValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is Guid; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + return "{" + value + "}"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/GuidValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/GuidValueFormatter.cs.meta new file mode 100644 index 0000000..c7d566f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/GuidValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1c93b8a89ee1c1243a4a631c7d86e5be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/IValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/IValueFormatter.cs new file mode 100644 index 0000000..751462b --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/IValueFormatter.cs @@ -0,0 +1,33 @@ +using System.Collections.Generic; + +namespace FluentAssertions.Formatting +{ + public interface IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + bool CanHandle(object value); + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0); + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/IValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/IValueFormatter.cs.meta new file mode 100644 index 0000000..07f5e47 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/IValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0eb4295eda62f604292c6fa2276182f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/Int16ValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/Int16ValueFormatter.cs new file mode 100644 index 0000000..0822bcd --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/Int16ValueFormatter.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using System.Globalization; + +namespace FluentAssertions.Formatting +{ + public class Int16ValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is short; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + return ((short)value).ToString(CultureInfo.InvariantCulture) + "s"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/Int16ValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/Int16ValueFormatter.cs.meta new file mode 100644 index 0000000..16e6e87 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/Int16ValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24a9d3d30225881499807a50ef3659ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/Int32ValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/Int32ValueFormatter.cs new file mode 100644 index 0000000..4be93b2 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/Int32ValueFormatter.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using System.Globalization; + +namespace FluentAssertions.Formatting +{ + public class Int32ValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is int; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + return ((int)value).ToString(CultureInfo.InvariantCulture); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/Int32ValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/Int32ValueFormatter.cs.meta new file mode 100644 index 0000000..4bf7ea6 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/Int32ValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7620394ccfe1dbf4fb70d0cbea532bb3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/Int64ValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/Int64ValueFormatter.cs new file mode 100644 index 0000000..a81d268 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/Int64ValueFormatter.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using System.Globalization; + +namespace FluentAssertions.Formatting +{ + public class Int64ValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is long; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + return ((long)value).ToString(CultureInfo.InvariantCulture) + "L"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/Int64ValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/Int64ValueFormatter.cs.meta new file mode 100644 index 0000000..c1c91a1 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/Int64ValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 450f43c52bf6f344d8bf2dd93813e23a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/NullValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/NullValueFormatter.cs new file mode 100644 index 0000000..d7f6b97 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/NullValueFormatter.cs @@ -0,0 +1,39 @@ +using System.Collections.Generic; + +namespace FluentAssertions.Formatting +{ + public class NullValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return ReferenceEquals(value, null); + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + return ""; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/NullValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/NullValueFormatter.cs.meta new file mode 100644 index 0000000..89f46ba --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/NullValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3691dd2c86b4daa40ad941bcee9b4fe4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/PropertyInfoFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/PropertyInfoFormatter.cs new file mode 100644 index 0000000..29accff --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/PropertyInfoFormatter.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using System.Reflection; + +namespace FluentAssertions.Formatting +{ + public class PropertyInfoFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is PropertyInfo; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + return ((PropertyInfo)value).Name; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/PropertyInfoFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/PropertyInfoFormatter.cs.meta new file mode 100644 index 0000000..dd4dc33 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/PropertyInfoFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fbbb8ed5fe0501e45a2135e4bb23a0ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/SByteValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/SByteValueFormatter.cs new file mode 100644 index 0000000..433eaa4 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/SByteValueFormatter.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using System.Globalization; + +namespace FluentAssertions.Formatting +{ + public class SByteValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is sbyte; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + return ((sbyte)value).ToString(CultureInfo.InvariantCulture) + "y"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/SByteValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/SByteValueFormatter.cs.meta new file mode 100644 index 0000000..b1feb71 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/SByteValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 41a7969ee1d36fa49bff5f075c8bfb02 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/SingleValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/SingleValueFormatter.cs new file mode 100644 index 0000000..86bf5fb --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/SingleValueFormatter.cs @@ -0,0 +1,57 @@ +using System.Collections.Generic; +using System.Globalization; + +namespace FluentAssertions.Formatting +{ + public class SingleValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is float; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + float singleValue = (float)value; + + if (float.IsPositiveInfinity(singleValue)) + { + return typeof(float).Name + "." + nameof(float.PositiveInfinity); + } + + if (float.IsNegativeInfinity(singleValue)) + { + return typeof(float).Name + "." + nameof(float.NegativeInfinity); + } + + if (float.IsNaN(singleValue)) + { + return singleValue.ToString(CultureInfo.InvariantCulture); + } + + return singleValue.ToString("R", CultureInfo.InvariantCulture) + "F"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/SingleValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/SingleValueFormatter.cs.meta new file mode 100644 index 0000000..2abe8d4 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/SingleValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0cd8821a85da76f4494f7478af5b8ded +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/StringValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/StringValueFormatter.cs new file mode 100644 index 0000000..ef6ba50 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/StringValueFormatter.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using FluentAssertions.Common; + +namespace FluentAssertions.Formatting +{ + public class StringValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is string; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + return (useLineBreaks ? Environment.NewLine : "") + "\"" + value.ToString().Escape() + "\""; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/StringValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/StringValueFormatter.cs.meta new file mode 100644 index 0000000..196a910 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/StringValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9af805497420fba4db22bb766e93383c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/TimeSpanValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/TimeSpanValueFormatter.cs new file mode 100644 index 0000000..b42af2c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/TimeSpanValueFormatter.cs @@ -0,0 +1,142 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FluentAssertions.Formatting +{ + public class TimeSpanValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is TimeSpan; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + var timeSpan = (TimeSpan) value; + + if (timeSpan == TimeSpan.MinValue) + { + return "min time span"; + } + + if (timeSpan == TimeSpan.MaxValue) + { + return "max time span"; + } + + IEnumerable fragments = GetNonZeroFragments(timeSpan); + + if (!fragments.Any()) + { + return "default"; + } + + string sign = (timeSpan.TotalMilliseconds >= 0) ? "" : "-"; + + if (fragments.Count() == 1) + { + return sign + fragments.Single(); + } + else + { + return sign + JoinUsingWritingStyle(fragments); + } + } + + private static IEnumerable GetNonZeroFragments(TimeSpan timeSpan) + { + TimeSpan absoluteTimespan = timeSpan.Duration(); + + var fragments = new List(); + + AddDaysIfNotZero(absoluteTimespan, fragments); + AddHoursIfNotZero(absoluteTimespan, fragments); + AddMinutesIfNotZero(absoluteTimespan, fragments); + AddSecondsIfNotZero(absoluteTimespan, fragments); + AddMicrosecondsIfNotZero(absoluteTimespan, fragments); + + return fragments; + } + + private static void AddMicrosecondsIfNotZero(TimeSpan timeSpan, List fragments) + { + if (timeSpan.Ticks > 0 && timeSpan.Ticks < TimeSpan.TicksPerMillisecond) + { + var microSeconds = timeSpan.Ticks / (double)TimeSpan.TicksPerMillisecond * 1000; + fragments.Add(microSeconds.ToString("0.0") + "us"); + } + } + + private static void AddSecondsIfNotZero(TimeSpan timeSpan, List fragments) + { + if ((timeSpan.Seconds > 0) || (timeSpan.Milliseconds > 0)) + { + string result = timeSpan.Seconds.ToString(); + + if (timeSpan.Milliseconds > 0) + { + result += "." + timeSpan.Milliseconds.ToString("000"); + } + + fragments.Add(result + "s"); + } + } + + private static void AddMinutesIfNotZero(TimeSpan timeSpan, List fragments) + { + if (timeSpan.Minutes > 0) + { + fragments.Add(timeSpan.Minutes + "m"); + } + } + + private static void AddHoursIfNotZero(TimeSpan timeSpan, List fragments) + { + if (timeSpan.Hours > 0) + { + fragments.Add(timeSpan.Hours + "h"); + } + } + + private static void AddDaysIfNotZero(TimeSpan timeSpan, List fragments) + { + if (timeSpan.Days > 0) + { + fragments.Add(timeSpan.Days + "d"); + } + } + + private static string JoinUsingWritingStyle(IEnumerable fragments) + { + return string.Join(", ", AllButLastFragment(fragments)) + " and " + fragments.Last(); + } + + private static string[] AllButLastFragment(IEnumerable fragments) + { + return fragments.Take(fragments.Count() - 1).ToArray(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/TimeSpanValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/TimeSpanValueFormatter.cs.meta new file mode 100644 index 0000000..134c538 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/TimeSpanValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fe25913c031e5e444924c3fc28dfe67a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/UInt16ValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/UInt16ValueFormatter.cs new file mode 100644 index 0000000..e05b484 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/UInt16ValueFormatter.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using System.Globalization; + +namespace FluentAssertions.Formatting +{ + public class UInt16ValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is ushort; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + return ((ushort)value).ToString(CultureInfo.InvariantCulture) + "us"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/UInt16ValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/UInt16ValueFormatter.cs.meta new file mode 100644 index 0000000..7677093 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/UInt16ValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48832247c843f584a943a75ebd7b8a7d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/UInt32ValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/UInt32ValueFormatter.cs new file mode 100644 index 0000000..5b487d7 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/UInt32ValueFormatter.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using System.Globalization; + +namespace FluentAssertions.Formatting +{ + public class UInt32ValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is uint; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + return ((uint)value).ToString(CultureInfo.InvariantCulture) + "u"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/UInt32ValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/UInt32ValueFormatter.cs.meta new file mode 100644 index 0000000..84c1928 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/UInt32ValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e4727ead0b5f76498912619a3fd526a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/UInt64ValueFormatter.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/UInt64ValueFormatter.cs new file mode 100644 index 0000000..95f269e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/UInt64ValueFormatter.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using System.Globalization; + +namespace FluentAssertions.Formatting +{ + public class UInt64ValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return value is ulong; + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + return ((ulong)value).ToString(CultureInfo.InvariantCulture) + "UL"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/UInt64ValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/UInt64ValueFormatter.cs.meta new file mode 100644 index 0000000..b319a33 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/UInt64ValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 200a63fe75ea5cb47868d14541acf29f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/ValueFormatterAttribute.cs b/Assets/Plugins/FluentAssertions/Core/Formatting/ValueFormatterAttribute.cs new file mode 100644 index 0000000..d78b54f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/ValueFormatterAttribute.cs @@ -0,0 +1,13 @@ +using System; + +namespace FluentAssertions.Formatting +{ + /// + /// Marks a static method as a kind of for a particular type. + /// + [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] + public class ValueFormatterAttribute : Attribute + { + + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Formatting/ValueFormatterAttribute.cs.meta b/Assets/Plugins/FluentAssertions/Core/Formatting/ValueFormatterAttribute.cs.meta new file mode 100644 index 0000000..3531cc9 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Formatting/ValueFormatterAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6476cb5ca807120428a7edf057de3a4a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/InternalAssertionExtensions.cs b/Assets/Plugins/FluentAssertions/Core/InternalAssertionExtensions.cs new file mode 100644 index 0000000..d3eb222 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/InternalAssertionExtensions.cs @@ -0,0 +1,478 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Reflection; + +using FluentAssertions.Collections; +using FluentAssertions.Common; +using FluentAssertions.Equivalency; +using FluentAssertions.Numeric; +using FluentAssertions.Primitives; +using FluentAssertions.Types; + +namespace FluentAssertions +{ +#if false + /// + /// Contains extension methods for custom assertions in unit tests. + /// + [DebuggerNonUserCode] + internal static class InternalAssertionExtensions + { + /// + /// Invokes the specified action on an subject so that you can chain it with any of the ShouldThrow or ShouldNotThrow + /// overloads. + /// + public static Action Invoking(this T subject, Action action) + { + return () => action(subject); + } + + /// + /// Forces enumerating a collection. Should be used to assert that a method that uses the + /// yield keyword throws a particular exception. + /// + public static Action Enumerating(this Func enumerable) + { + return () => ForceEnumeration(enumerable); + } + + /// + /// Forces enumerating a collection. Should be used to assert that a method that uses the + /// yield keyword throws a particular exception. + /// + public static Action Enumerating(this Func> enumerable) + { + return () => ForceEnumeration(() => (IEnumerable)enumerable()); + } + + private static void ForceEnumeration(Func enumerable) + { + foreach (object item in enumerable()) + { + // Do nothing + } + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + public static ObjectAssertions Should(this object actualValue) + { + return new ObjectAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + public static BooleanAssertions Should(this bool actualValue) + { + return new BooleanAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + public static NullableBooleanAssertions Should(this bool? actualValue) + { + return new NullableBooleanAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + public static GuidAssertions Should(this Guid actualValue) + { + return new GuidAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + public static NullableGuidAssertions Should(this Guid? actualValue) + { + return new NullableGuidAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + public static NonGenericCollectionAssertions Should(this IEnumerable actualValue) + { + return new NonGenericCollectionAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + public static GenericCollectionAssertions Should(this IEnumerable actualValue) + { + return new GenericCollectionAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + public static StringCollectionAssertions Should(this IEnumerable @this) + { + return new StringCollectionAssertions(@this); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + public static GenericDictionaryAssertions Should(this IDictionary actualValue) + { + return new GenericDictionaryAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + public static DateTimeOffsetAssertions Should(this DateTime actualValue) + { + return new DateTimeOffsetAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + public static NullableDateTimeOffsetAssertions Should(this DateTime? actualValue) + { + return new NullableDateTimeOffsetAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + public static ComparableTypeAssertions Should(this IComparable comparableValue) + { + return new ComparableTypeAssertions(comparableValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + public static NumericAssertions Should(this int actualValue) + { + return new NumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + public static NullableNumericAssertions Should(this int? actualValue) + { + return new NullableNumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + public static NumericAssertions Should(this decimal actualValue) + { + return new NumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + public static NullableNumericAssertions Should(this decimal? actualValue) + { + return new NullableNumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + public static NumericAssertions Should(this byte actualValue) + { + return new NumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + public static NullableNumericAssertions Should(this byte? actualValue) + { + return new NullableNumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + public static NumericAssertions Should(this short actualValue) + { + return new NumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + public static NullableNumericAssertions Should(this short? actualValue) + { + return new NullableNumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + public static NumericAssertions Should(this long actualValue) + { + return new NumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + public static NullableNumericAssertions Should(this long? actualValue) + { + return new NullableNumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + public static NumericAssertions Should(this float actualValue) + { + return new NumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + public static NullableNumericAssertions Should(this float? actualValue) + { + return new NullableNumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + public static NumericAssertions Should(this double actualValue) + { + return new NumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + public static NullableNumericAssertions Should(this double? actualValue) + { + return new NullableNumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + public static StringAssertions Should(this string actualValue) + { + return new StringAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + public static SimpleTimeSpanAssertions Should(this TimeSpan actualValue) + { + return new SimpleTimeSpanAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + public static NullableSimpleTimeSpanAssertions Should(this TimeSpan? actualValue) + { + return new NullableSimpleTimeSpanAssertions(actualValue); + } + + /// + /// Returns a object that can be used to assert the + /// current . + /// + public static TypeAssertions Should(this Type subject) + { + return new TypeAssertions(subject); + } + + /// + /// Returns a object that can be used to assert the + /// current . + /// + public static TypeSelectorAssertions Should(this TypeSelector typeSelector) + { + return new TypeSelectorAssertions(typeSelector.ToArray()); + } + + /// + /// Returns a object that can be used to assert the current . + /// + /// + public static MethodInfoAssertions Should(this MethodInfo methodInfo) + { + return new MethodInfoAssertions(methodInfo); + } + + /// + /// Returns a object that can be used to assert the methods returned by the + /// current . + /// + /// + public static MethodInfoSelectorAssertions Should(this MethodInfoSelector methodSelector) + { + return new MethodInfoSelectorAssertions(methodSelector.ToArray()); + } + + /// + /// Returns a object that can be used to assert the + /// current . + /// + /// + public static PropertyInfoAssertions Should(this PropertyInfo propertyInfo) + { + return new PropertyInfoAssertions(propertyInfo); + } + + /// + /// Returns a object that can be used to assert the properties returned by the + /// current . + /// + /// + public static PropertyInfoSelectorAssertions Should(this PropertyInfoSelector propertyInfoSelector) + { + return new PropertyInfoSelectorAssertions(propertyInfoSelector.ToArray()); + } + + /// + /// Asserts that an object is equivalent to another object. + /// + /// + /// Objects are equivalent when both object graphs have equally named properties with the same value, + /// irrespective of the type of those objects. Two properties are also equal if one type can be converted to another and the result is equal. + /// The type of a collection property is ignored as long as the collection implements and all + /// items in the collection are structurally equal. + /// Notice that actual behavior is determined by the instance of the + /// class. + /// + /// + /// An optional formatted phrase as is supported by explaining why the + /// assertion is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static void ShouldBeEquivalentTo(this T subject, object expectation, string because = "", + params object[] becauseArgs) + { + ShouldBeEquivalentTo(subject, expectation, config => config, because, becauseArgs); + } + + /// + /// Asserts that an object is equivalent to another object. + /// + /// + /// Objects are equivalent when both object graphs have equally named properties with the same value, + /// irrespective of the type of those objects. Two properties are also equal if one type can be converted to another and the result is equal. + /// The type of a collection property is ignored as long as the collection implements and all + /// items in the collection are structurally equal. + /// + /// + /// A reference to the configuration object that can be used + /// to influence the way the object graphs are compared. You can also provide an alternative instance of the + /// class. + /// + /// + /// An optional formatted phrase as is supported by explaining why the + /// assertion is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static void ShouldBeEquivalentTo(this T subject, object expectation, + Func, EquivalencyAssertionOptions> config, string because = "", + params object[] becauseArgs) + { + IEquivalencyAssertionOptions options = config(AssertionOptions.CloneDefaults()); + + var context = new EquivalencyValidationContext + { + Subject = subject, + Expectation = expectation, + CompileTimeType = typeof(T), + Because = because, + BecauseArgs = becauseArgs, + Tracer = options.TraceWriter + }; + + new EquivalencyValidator(options).AssertEquality(context); + } + + public static void ShouldAllBeEquivalentTo(this IEnumerable subject, IEnumerable expectation, + string because = "", params object[] becauseArgs) + { + ShouldAllBeEquivalentTo(subject, expectation, config => config, because, becauseArgs); + } + + public static void ShouldAllBeEquivalentTo(this IEnumerable subject, IEnumerable expectation, + Func, EquivalencyAssertionOptions> config, string because = "", + params object[] becauseArgs) + { + IEquivalencyAssertionOptions options = config(AssertionOptions.CloneDefaults()); + + var context = new EquivalencyValidationContext + { + Subject = subject, + Expectation = expectation, + CompileTimeType = typeof(T), + Because = because, + BecauseArgs = becauseArgs, + Tracer = options.TraceWriter + }; + + new EquivalencyValidator(options).AssertEquality(context); + } + + /// + /// Safely casts the specified object to the type specified through . + /// + /// + /// Has been introduced to allow casting objects without breaking the fluent API. + /// + /// + public static TTo As(this object subject) + { + return subject is TTo ? (TTo)subject : default(TTo); + } + } +#endif +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/InternalAssertionExtensions.cs.meta b/Assets/Plugins/FluentAssertions/Core/InternalAssertionExtensions.cs.meta new file mode 100644 index 0000000..8a5546f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/InternalAssertionExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b95715a484edd404e82a6d062cdfef38 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Numeric.meta b/Assets/Plugins/FluentAssertions/Core/Numeric.meta new file mode 100644 index 0000000..4e3e1e9 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Numeric.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0872c304349aa0a489f3087c737d0cad +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Numeric/ComparableTypeAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Numeric/ComparableTypeAssertions.cs new file mode 100644 index 0000000..443d027 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Numeric/ComparableTypeAssertions.cs @@ -0,0 +1,198 @@ +using System; +using System.Diagnostics; +using FluentAssertions.Execution; +using FluentAssertions.Primitives; + +namespace FluentAssertions.Numeric +{ + /// + /// Contains a number of methods to assert that an is in the expected state. + /// + [DebuggerNonUserCode] + public class ComparableTypeAssertions : ReferenceTypeAssertions, ComparableTypeAssertions> + { + private const int Equal = 0; + + public ComparableTypeAssertions(IComparable value) + { + Subject = value; + } + + /// + /// Asserts that the subject is considered equal to another object according to the implementation of . + /// + /// + /// The object to pass to the subject's method. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> Be(T expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(ReferenceEquals(Subject, expected) || (Subject.CompareTo(expected) == Equal)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {0}{reason}, but found {1}.", expected, Subject); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the subject is not equal to another object according to its implementation of . + /// + /// + /// The object to pass to the subject's method. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> NotBe(T expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.CompareTo(expected) != Equal) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect object to be equal to {0}{reason}.", expected); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the subject is less than another object according to its implementation of . + /// + /// + /// The object to pass to the subject's method. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeLessThan(T expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.CompareTo(expected) < Equal) + .BecauseOf(because, becauseArgs) + .FailWith("Expected object {0} to be less than {1}{reason}.", Subject, expected); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the subject is less than or equal to another object according to its implementation of . + /// + /// + /// The object to pass to the subject's method. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeLessOrEqualTo(T expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.CompareTo(expected) <= Equal) + .BecauseOf(because, becauseArgs) + .FailWith("Expected object {0} to be less or equal to {1}{reason}.", Subject, expected); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the subject is greater than another object according to its implementation of . + /// + /// + /// The object to pass to the subject's method. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeGreaterThan(T expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.CompareTo(expected) > Equal) + .BecauseOf(because, becauseArgs) + .FailWith("Expected object {0} to be greater than {1}{reason}.", Subject, expected); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the subject is greater than or equal to another object according to its implementation of . + /// + /// + /// The object to pass to the subject's method. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeGreaterOrEqualTo(T expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.CompareTo(expected) >= Equal) + .BecauseOf(because, becauseArgs) + .FailWith("Expected object {0} to be greater or equal to {1}{reason}.", Subject, expected); + + return new AndConstraint>(this); + } + + /// + /// Asserts that a value is within a range. + /// + /// + /// Where the range is continuous or incremental depends on the actual type of the value. + /// + /// + /// The minimum valid value of the range. + /// + /// + /// The maximum valid value of the range. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeInRange(T minimumValue, T maximumValue, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition((Subject.CompareTo(minimumValue) >= Equal) && (Subject.CompareTo(maximumValue) <= Equal)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected object to be between {0} and {1}{reason}, but found {2}.", + minimumValue, maximumValue, Subject); + + return new AndConstraint>(this); + } + + /// + /// Returns the type of the subject the assertion applies on. + /// + protected override string Context + { + get { return "object"; } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Numeric/ComparableTypeAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Numeric/ComparableTypeAssertions.cs.meta new file mode 100644 index 0000000..1ff2c29 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Numeric/ComparableTypeAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 62b1422ffd0d3424fbe1f02ef4058708 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Numeric/NullableNumericAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Numeric/NullableNumericAssertions.cs new file mode 100644 index 0000000..d180be6 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Numeric/NullableNumericAssertions.cs @@ -0,0 +1,83 @@ +using System.Diagnostics; +using FluentAssertions.Execution; + +namespace FluentAssertions.Numeric +{ + [DebuggerNonUserCode] + public class NullableNumericAssertions : NumericAssertions where T : struct + { + public NullableNumericAssertions(T? value) : base(value) + { + } + + /// + /// Asserts that a nullable numeric value is not null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> HaveValue(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!ReferenceEquals(Subject, null)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a value{reason}."); + + return new AndConstraint>(this); + } + + /// + /// Asserts that a nullable numeric value is not null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> NotBeNull(string because = "", params object[] becauseArgs) + { + return HaveValue(because, becauseArgs); + } + + /// + /// Asserts that a nullable numeric value is null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> NotHaveValue(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(ReferenceEquals(Subject, null)) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect a value{reason}, but found {0}.", Subject); + + return new AndConstraint>(this); + } + + /// + /// Asserts that a nullable numeric value is null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeNull(string because = "", params object[] becauseArgs) + { + return NotHaveValue(because, becauseArgs); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Numeric/NullableNumericAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Numeric/NullableNumericAssertions.cs.meta new file mode 100644 index 0000000..abbee87 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Numeric/NullableNumericAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b30ce027a6a242145b23a57ed7c9ebe6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Numeric/NumericAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Numeric/NumericAssertions.cs new file mode 100644 index 0000000..991a34c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Numeric/NumericAssertions.cs @@ -0,0 +1,356 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; + +using FluentAssertions.Execution; + + +namespace FluentAssertions.Numeric +{ + /// + /// Contains a number of methods to assert that an is in the expected state. + /// + [DebuggerNonUserCode] + public class NumericAssertions where T : struct + { + public NumericAssertions(object value) + { + if (!ReferenceEquals(value, null)) + { + Subject = value as IComparable; + if (Subject == null) + { + throw new InvalidOperationException("This class only supports types implementing IComparable."); + } + } + } + + public IComparable Subject { get; private set; } + + /// + /// Asserts that the integral number value is exactly the same as the value. + /// + /// The expected value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> Be(T expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(ReferenceEquals(Subject, expected) || ((!ReferenceEquals(Subject, null) && Subject.CompareTo(expected) == 0))) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:value} to be {0}{reason}, but found {1}.", expected, Subject); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the integral number value is exactly the same as the value. + /// + /// The expected value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> Be(T? expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(ReferenceEquals(Subject, expected) || ((!ReferenceEquals(Subject, null) && Subject.CompareTo(expected) == 0))) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:value} to be {0}{reason}, but found {1}.", expected, Subject); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the integral number value is not the same as the value. + /// + /// The unexpected value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> NotBe(T unexpected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.CompareTo(unexpected) != 0) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect {0}{reason}.", unexpected); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the integral number value is not the same as the value. + /// + /// The unexpected value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> NotBe(T? unexpected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.CompareTo(unexpected) != 0) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect {0}{reason}.", unexpected); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the numeric value is greater than zero. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BePositive(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.CompareTo(default(T)) > 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected positive value{reason}, but found {0}", Subject); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the numeric value is less than zero. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeNegative(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.CompareTo(default(T)) < 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected negative value{reason}, but found {0}", Subject); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the numeric value is less than the specified value. + /// + /// The value to compare the current numeric value with. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeLessThan(T expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.CompareTo(expected) < 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a value less than {0}{reason}, but found {1}.", expected, Subject); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the numeric value is less than or equal to the specified value. + /// + /// The value to compare the current numeric value with. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeLessOrEqualTo(T expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.CompareTo(expected) <= 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a value less or equal to {0}{reason}, but found {1}.", expected, Subject); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the numeric value is greater than the specified value. + /// + /// The value to compare the current numeric value with. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeGreaterThan(T expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.CompareTo(expected) > 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a value greater than {0}{reason}, but found {1}.", expected, Subject); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the numeric value is greater than or equal to the specified value. + /// + /// The value to compare the current numeric value with. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeGreaterOrEqualTo(T expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.CompareTo(expected) >= 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a value greater or equal to {0}{reason}, but found {1}.", expected, Subject); + + return new AndConstraint>(this); + } + + /// + /// Asserts that a value is within a range. + /// + /// + /// Where the range is continuous or incremental depends on the actual type of the value. + /// + /// + /// The minimum valid value of the range. + /// + /// + /// The maximum valid value of the range. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeInRange(T minimumValue, T maximumValue, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition((Subject.CompareTo(minimumValue) >= 0) && (Subject.CompareTo(maximumValue) <= 0)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected value to be between {0} and {1}{reason}, but found {2}.", + minimumValue, maximumValue, Subject); + + return new AndConstraint>(this); + } + + /// + /// Asserts that a value is one of the specified . + /// + /// + /// The values that are valid. + /// + public AndConstraint> BeOneOf(params T[] validValues) + { + return BeOneOf(validValues, string.Empty); + } + + /// + /// Asserts that a value is one of the specified . + /// + /// + /// The values that are valid. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeOneOf(IEnumerable validValues, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(validValues.Contains((T)Subject)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected value to be one of {0}{reason}, but found {1}.", validValues, Subject); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the object is of the specified type . + /// + /// + /// The type that the subject is supposed to be of. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> BeOfType(Type expectedType, string because = "", params object[] becauseArgs) + { + Type subjectType = Subject.GetType(); + if (expectedType.IsGenericTypeDefinition() && subjectType.IsGenericType()) + { + subjectType.GetGenericTypeDefinition().Should().Be(expectedType, because, becauseArgs); + } + else + { + subjectType.Should().Be(expectedType, because, becauseArgs); + } + + return new AndConstraint>(this); + } + + /// + /// Asserts that the object is not of the specified type . + /// + /// + /// The type that the subject is not supposed to be of. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> NotBeOfType(Type expectedType, string because = "", params object[] becauseArgs) + { + Subject.GetType().Should().NotBe(expectedType, because, becauseArgs); + + return new AndConstraint>(this); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Numeric/NumericAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Numeric/NumericAssertions.cs.meta new file mode 100644 index 0000000..83dbf1d --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Numeric/NumericAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6f09431c29a312b43a4858a62c211f30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/NumericAssertionsExtensions.cs b/Assets/Plugins/FluentAssertions/Core/NumericAssertionsExtensions.cs new file mode 100644 index 0000000..e74854b --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/NumericAssertionsExtensions.cs @@ -0,0 +1,204 @@ +using System; +using FluentAssertions.Execution; +using FluentAssertions.Numeric; + +namespace FluentAssertions +{ + /// + /// Contains a number of extension methods for floating point . + /// + public static class NumericAssertionsExtensions + { + /// + /// Asserts a floating point value approximates another value as close as possible. + /// + /// The object that is being extended. + /// + /// The expected value to compare the actual value with. + /// + /// + /// The maximum amount of which the two values may differ. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static AndConstraint> BeApproximately(this NullableNumericAssertions parent, + float expectedValue, float precision, string because = "", + params object [] becauseArgs) + { + Execute.Assertion + .ForCondition(parent.Subject != null) + .BecauseOf(because, becauseArgs) + .FailWith("Expected value to approximate {0} +/- {1}{reason}, but it was .", expectedValue, precision); + + var nonNullableAssertions = new NumericAssertions((float) parent.Subject); + nonNullableAssertions.BeApproximately(expectedValue, precision, because, becauseArgs); + + return new AndConstraint>(parent); + } + + /// + /// Asserts a floating point value approximates another value as close as possible. + /// + /// The object that is being extended. + /// + /// The expected value to compare the actual value with. + /// + /// + /// The maximum amount of which the two values may differ. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static AndConstraint> BeApproximately(this NumericAssertions parent, + float expectedValue, float precision, string because = "", + params object [] becauseArgs) + { + float actualDifference = Math.Abs(expectedValue - (float)parent.Subject); + + Execute.Assertion + .ForCondition(actualDifference <= precision) + .BecauseOf(because, becauseArgs) + .FailWith("Expected value {0} to approximate {1} +/- {2}{reason}, but it differed by {3}.", + parent.Subject, expectedValue, precision, actualDifference); + + return new AndConstraint>(parent); + } + + /// + /// Asserts a double value approximates another value as close as possible. + /// + /// The object that is being extended. + /// + /// The expected value to compare the actual value with. + /// + /// + /// The maximum amount of which the two values may differ. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static AndConstraint> BeApproximately(this NullableNumericAssertions parent, + double expectedValue, double precision, string because = "", + params object [] becauseArgs) + { + Execute.Assertion + .ForCondition(parent.Subject != null) + .BecauseOf(because, becauseArgs) + .FailWith("Expected value to approximate {0} +/- {1}{reason}, but it was .", expectedValue, precision); + + var nonNullableAssertions = new NumericAssertions((double) parent.Subject); + BeApproximately(nonNullableAssertions, expectedValue, precision, because, becauseArgs); + + return new AndConstraint>(parent); + } + + /// + /// Asserts a double value approximates another value as close as possible. + /// + /// The object that is being extended. + /// + /// The expected value to compare the actual value with. + /// + /// + /// The maximum amount of which the two values may differ. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static AndConstraint> BeApproximately(this NumericAssertions parent, + double expectedValue, double precision, string because = "", + params object [] becauseArgs) + { + double actualDifference = Math.Abs(expectedValue - (double) parent.Subject); + + Execute.Assertion + .ForCondition(actualDifference <= precision) + .BecauseOf(because, becauseArgs) + .FailWith("Expected value {0} to approximate {1} +/- {2}{reason}, but it differed by {3}.", + parent.Subject, expectedValue, precision, actualDifference); + + return new AndConstraint>(parent); + } + + /// + /// Asserts a decimal value approximates another value as close as possible. + /// + /// The object that is being extended. + /// + /// The expected value to compare the actual value with. + /// + /// + /// The maximum amount of which the two values may differ. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static AndConstraint> BeApproximately(this NullableNumericAssertions parent, + decimal expectedValue, decimal precision, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(parent.Subject != null) + .BecauseOf(because, becauseArgs) + .FailWith("Expected value to approximate {0} +/- {1}{reason}, but it was .", expectedValue, precision); + + var nonNullableAssertions = new NumericAssertions((decimal)parent.Subject); + BeApproximately(nonNullableAssertions, expectedValue, precision, because, becauseArgs); + + return new AndConstraint>(parent); + } + + /// + /// Asserts a decimal value approximates another value as close as possible. + /// + /// The object that is being extended. + /// + /// The expected value to compare the actual value with. + /// + /// + /// The maximum amount of which the two values may differ. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static AndConstraint> BeApproximately(this NumericAssertions parent, + decimal expectedValue, decimal precision, string because = "", + params object[] becauseArgs) + { + decimal actualDifference = Math.Abs(expectedValue - (decimal)parent.Subject); + + Execute.Assertion + .ForCondition(actualDifference <= precision) + .BecauseOf(because, becauseArgs) + .FailWith("Expected value {0} to approximate {1} +/- {2}{reason}, but it differed by {3}.", + parent.Subject, expectedValue, precision, actualDifference); + + return new AndConstraint>(parent); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/NumericAssertionsExtensions.cs.meta b/Assets/Plugins/FluentAssertions/Core/NumericAssertionsExtensions.cs.meta new file mode 100644 index 0000000..c5defc9 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/NumericAssertionsExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 065272ad542e9574a88c6e3ff44ab3f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives.meta b/Assets/Plugins/FluentAssertions/Core/Primitives.meta new file mode 100644 index 0000000..af91abf --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9f21a6b1f84e9664b8645751bc6ba406 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/BooleanAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/BooleanAssertions.cs new file mode 100644 index 0000000..dbe4ecb --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/BooleanAssertions.cs @@ -0,0 +1,84 @@ +using System; +using System.Diagnostics; +using FluentAssertions.Execution; + +namespace FluentAssertions.Primitives +{ + /// + /// Contains a number of methods to assert that a is in the expected state. + /// + [DebuggerNonUserCode] + public class BooleanAssertions + { + public BooleanAssertions(bool? value) + { + Subject = value; + } + + /// + /// Gets the object which value is being asserted. + /// + public bool? Subject { get; private set; } + + /// + /// Asserts that the value is false. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeFalse(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue && !Subject.Value) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {0}{reason}, but found {1}.", false, Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that the value is true. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeTrue(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue && Subject.Value) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {0}{reason}, but found {1}.", true, Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that the value is equal to the specified value. + /// + /// The expected value + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Be(bool expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue && Subject.Value.Equals(expected)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:boolean} to be {0}{reason}, but found {1}.", expected, Subject); + + return new AndConstraint(this); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/BooleanAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/BooleanAssertions.cs.meta new file mode 100644 index 0000000..905b897 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/BooleanAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c086a9419900a5e4fbf79484dc91fc86 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeAssertions.cs new file mode 100644 index 0000000..6baf2ec --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeAssertions.cs @@ -0,0 +1,831 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using FluentAssertions.Execution; +using System.Linq; + +namespace FluentAssertions.Primitives +{ + /// + /// Contains a number of methods to assert that a is in the expected state. + /// + /// + /// You can use the for a more fluent way of specifying a . + /// + [DebuggerNonUserCode] + public class DateTimeAssertions + { + public DateTimeAssertions(DateTime? value) + { + Subject = value; + } + + /// + /// Gets the object which value is being asserted. + /// + public DateTime? Subject { get; private set; } + + /// + /// Asserts that the current is exactly equal to the value. + /// + /// The expected value + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Be(DateTime expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue && (Subject.Value == expected)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:date and time} to be {0}{reason}, but found {1}.", + expected, Subject.HasValue ? Subject.Value : default(DateTime?)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current or is not equal to the value. + /// + /// The unexpected value + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBe(DateTime unexpected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!Subject.HasValue || (Subject.Value != unexpected)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:date and time} not to be {0}{reason}, but it is.", unexpected); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is within the specified number of milliseconds (default = 20 ms) + /// from the specified value. + /// + /// + /// Use this assertion when, for example the database truncates datetimes to nearest 20ms. If you want to assert to the exact datetime, + /// use . + /// + /// + /// The expected time to compare the actual value with. + /// + /// + /// The maximum amount of milliseconds which the two values may differ. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeCloseTo(DateTime nearbyTime, int precision = 20, string because = "", + params object[] becauseArgs) + { + long distanceToMinInMs = (long) (nearbyTime - DateTime.MinValue).TotalMilliseconds; + DateTime minimumValue = nearbyTime.AddMilliseconds(-Math.Min(precision, distanceToMinInMs)); + + long distanceToMaxInMs = (long) (DateTime.MaxValue - nearbyTime).TotalMilliseconds; + DateTime maximumValue = nearbyTime.AddMilliseconds(Math.Min(precision, distanceToMaxInMs)); + + Execute.Assertion + .ForCondition(Subject.HasValue && (Subject.Value >= minimumValue) && (Subject.Value <= maximumValue)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:date and time} to be within {0} ms from {1}{reason}, but found {2}.", + precision, + nearbyTime, Subject.HasValue ? Subject.Value : default(DateTime?)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is not within the specified number of milliseconds (default = 20 ms) + /// from the specified value. + /// + /// + /// Use this assertion when, for example the database truncates datetimes to nearest 20ms. If you want to assert to the exact datetime, + /// use . + /// + /// + /// The time to compare the actual value with. + /// + /// + /// The maximum amount of milliseconds which the two values must differ. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeCloseTo(DateTime distantTime, int precision = 20, string because = "", + params object[] becauseArgs) + { + long distanceToMinInMs = (long)(distantTime - DateTime.MinValue).TotalMilliseconds; + DateTime minimumValue = distantTime.AddMilliseconds(-Math.Min(precision, distanceToMinInMs)); + + long distanceToMaxInMs = (long)(DateTime.MaxValue - distantTime).TotalMilliseconds; + DateTime maximumValue = distantTime.AddMilliseconds(Math.Min(precision, distanceToMaxInMs)); + + Execute.Assertion + .ForCondition(Subject.HasValue && ((Subject.Value < minimumValue) || (Subject.Value > maximumValue))) + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected {context:date and time} to not be within {0} ms from {1}{reason}, but found {2}.", + precision, + distantTime, Subject.HasValue ? Subject.Value : default(DateTime?)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is before the specified value. + /// + /// The that the current value is expected to be before. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeBefore(DateTime expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue && Subject.Value.CompareTo(expected) < 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a {context:date and time} before {0}{reason}, but found {1}.", expected, + Subject.HasValue ? Subject.Value : default(DateTime?)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is not before the specified value. + /// + /// The that the current value is not expected to be before. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeBefore(DateTime unexpected, string because = "", + params object[] becauseArgs) + { + return BeOnOrAfter(unexpected, because, becauseArgs); + } + + /// + /// Asserts that the current is either on, or before the specified value. + /// + /// The that the current value is expected to be on or before. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeOnOrBefore(DateTime expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue && Subject.Value.CompareTo(expected) <= 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a {context:date and time} on or before {0}{reason}, but found {1}.", expected, + Subject.HasValue ? Subject.Value : default(DateTime?)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is neither on, nor before the specified value. + /// + /// The that the current value is not expected to be on nor before. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeOnOrBefore(DateTime unexpected, string because = "", + params object[] becauseArgs) + { + return BeAfter(unexpected, because, becauseArgs); + } + + /// + /// Asserts that the current is after the specified value. + /// + /// The that the current value is expected to be after. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeAfter(DateTime expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue && Subject.Value.CompareTo(expected) > 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a {context:date and time} after {0}{reason}, but found {1}.", expected, + Subject.HasValue ? Subject.Value : default(DateTime?)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is not after the specified value. + /// + /// The that the current value is not expected to be after. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeAfter(DateTime unexpected, string because = "", + params object[] becauseArgs) + { + return BeOnOrBefore(unexpected, because, becauseArgs); + } + + /// + /// Asserts that the current is either on, or after the specified value. + /// + /// The that the current value is expected to be on or after. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeOnOrAfter(DateTime expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue && Subject.Value.CompareTo(expected) >= 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a {context:date and time} on or after {0}{reason}, but found {1}.", expected, + Subject.HasValue ? Subject.Value : default(DateTime?)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is neither on, nor after the specified value. + /// + /// The that the current value is expected not to be on nor after. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeOnOrAfter(DateTime unexpected, string because = "", + params object[] becauseArgs) + { + return BeBefore(unexpected, because, becauseArgs); + } + + /// + /// Asserts that the current has the year. + /// + /// The expected year of the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveYear(int expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:year} to be {0}{reason}, but found a DateTime.", expected) + .Then + .ForCondition(Subject.Value.Year == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:year} to be {0}{reason}, but found {1}.", expected, + Subject.Value.Year); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current does not have the year. + /// + /// The year that should not be in the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotHaveYear(int unexpected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:year} not to be {0}{reason}, but found a DateTime.", unexpected) + .Then + .ForCondition(Subject.Value.Year != unexpected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:year} not to be {0}{reason}, but found it is.", unexpected, + Subject.Value.Year); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current has the month. + /// + /// The expected month of the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveMonth(int expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:month} to be {0}{reason}, but found a DateTime.", expected) + .Then + .ForCondition(Subject.Value.Month == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:month} to be {0}{reason}, but found {1}.", expected, Subject.Value.Month); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current does not have the month. + /// + /// The month that should not be in the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotHaveMonth(int unexpected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:month} not to be {0}{reason}, but found a DateTime.", unexpected) + .Then + .ForCondition(Subject.Value.Month != unexpected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:month} not to be {0}{reason}, but found it is.", unexpected, + Subject.Value.Month); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current has the day. + /// + /// The expected day of the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveDay(int expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:day} to be {0}{reason}, but found a DateTime.", expected) + .Then + .ForCondition(Subject.Value.Day == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:day} to be {0}{reason}, but found {1}.", expected, Subject.Value.Day); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current does not have the day. + /// + /// The day that should not be in the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotHaveDay(int unexpected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:day} not to be {0}{reason}, but found a DateTime.", unexpected) + .Then + .ForCondition(Subject.Value.Day != unexpected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:day} not to be {0}{reason}, but found it is.", unexpected, + Subject.Value.Day); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current has the hour. + /// + /// The expected hour of the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveHour(int expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:hour} to be {0}{reason}, but found a DateTime.", expected) + .Then + .ForCondition(Subject.Value.Hour == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:hour} to be {0}{reason}, but found {1}.", expected, Subject.Value.Hour); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current does not have the hour. + /// + /// The hour that should not be in the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotHaveHour(int unexpected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:hour} not to be {0}{reason}, but found a DateTime.", unexpected) + .Then + .ForCondition(Subject.Value.Hour != unexpected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:hour} not to be {0}{reason}, but found it is.", unexpected, + Subject.Value.Hour); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current has the minute. + /// + /// The expected minutes of the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveMinute(int expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:minute} to be {0}{reason}, but found a DateTime.", expected) + .Then + .ForCondition(Subject.Value.Minute == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:minute} to be {0}{reason}, but found {1}.", expected, Subject.Value.Minute); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current does not have the minute. + /// + /// The minute that should not be in the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotHaveMinute(int unexpected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:minute} not to be {0}{reason}, but found a DateTime.", unexpected) + .Then + .ForCondition(Subject.Value.Minute != unexpected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:minute} not to be {0}{reason}, but found it is.", unexpected, + Subject.Value.Minute); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current has the second. + /// + /// The expected seconds of the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveSecond(int expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:second} to be {0}{reason}, but found a DateTime.", expected) + .Then + .ForCondition(Subject.Value.Second == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:second} to be {0}{reason}, but found {1}.", expected, Subject.Value.Second); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current does not have the second. + /// + /// The second that should not be in the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotHaveSecond(int unexpected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:second} not to be {0}{reason}, but found a DateTime.", unexpected) + .Then + .ForCondition(Subject.Value.Second != unexpected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:second} not to be {0}{reason}, but found it is.", unexpected, + Subject.Value.Second); + + return new AndConstraint(this); + } + + /// + /// Returns a object that can be used to assert that the current + /// exceeds the specified compared to another . + /// + /// + /// The amount of time that the current should exceed compared to another . + /// + public DateTimeRangeAssertions BeMoreThan(TimeSpan timeSpan) + { + return new DateTimeRangeAssertions(this, Subject, TimeSpanCondition.MoreThan, timeSpan); + } + + /// + /// Returns a object that can be used to assert that the current + /// is equal to or exceeds the specified compared to another . + /// + /// + /// The amount of time that the current should be equal or exceed compared to + /// another . + /// + public DateTimeRangeAssertions BeAtLeast(TimeSpan timeSpan) + { + return new DateTimeRangeAssertions(this, Subject, TimeSpanCondition.AtLeast, timeSpan); + } + + /// + /// Returns a object that can be used to assert that the current + /// differs exactly the specified compared to another . + /// + /// + /// The amount of time that the current should differ exactly compared to another . + /// + public DateTimeRangeAssertions BeExactly(TimeSpan timeSpan) + { + return new DateTimeRangeAssertions(this, Subject, TimeSpanCondition.Exactly, timeSpan); + } + + /// + /// Returns a object that can be used to assert that the current + /// is within the specified compared to another . + /// + /// + /// The amount of time that the current should be within another . + /// + public DateTimeRangeAssertions BeWithin(TimeSpan timeSpan) + { + return new DateTimeRangeAssertions(this, Subject, TimeSpanCondition.Within, timeSpan); + } + + /// + /// Returns a object that can be used to assert that the current + /// differs at maximum the specified compared to another . + /// + /// + /// The maximum amount of time that the current should differ compared to another . + /// + public DateTimeRangeAssertions BeLessThan(TimeSpan timeSpan) + { + return new DateTimeRangeAssertions(this, Subject, TimeSpanCondition.LessThan, timeSpan); + } + + /// + /// Asserts that the current has the date. + /// + /// The expected date portion of the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeSameDateAs(DateTime expected, string because = "", + params object[] becauseArgs) + { + var expectedDate = expected.Date; + + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a {context:date and time} with date {0}{reason}, but found a DateTime.", expectedDate) + .Then + .ForCondition(Subject.Value.Date == expectedDate) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a {context:date and time} with date {0}{reason}, but found {1}.", expectedDate, Subject.Value); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is not the date. + /// + /// The date that is not to match the date portion of the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeSameDateAs(DateTime unexpected, string because = "", + params object[] becauseArgs) + { + var unexpectedDate = unexpected.Date; + + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a {context:date and time} that does not have date {0}{reason}, but found a DateTime.", unexpectedDate) + .Then + .ForCondition(Subject.Value.Date != unexpectedDate) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a {context:date and time} that does not have date {0}{reason}, but found it does.", unexpectedDate); + + return new AndConstraint(this); + } + + /// + /// Asserts that the is one of the specified . + /// + /// + /// The values that are valid. + /// + public AndConstraint BeOneOf(params DateTime?[] validValues) + { + return BeOneOf(validValues, String.Empty); + } + + /// + /// Asserts that the is one of the specified . + /// + /// + /// The values that are valid. + /// + public AndConstraint BeOneOf(params DateTime[] validValues) + { + return BeOneOf(validValues.Cast()); + } + + /// + /// Asserts that the is one of the specified . + /// + /// + /// The values that are valid. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeOneOf(IEnumerable validValues, string because = "", params object[] becauseArgs) + { + return BeOneOf(validValues.Cast(), because, becauseArgs); + } + + /// + /// Asserts that the is one of the specified . + /// + /// + /// The values that are valid. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeOneOf(IEnumerable validValues, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(validValues.Contains(Subject)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected value to be one of {0}{reason}, but found {1}.", validValues, Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that the represents a value in the . + /// + /// + /// The expected that the current value must represent. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeIn(DateTimeKind expectedKind, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:kind} to be {0}{reason}, but found a DateTime.", expectedKind) + .Then + .ForCondition(Subject.Value.Kind == expectedKind) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:kind} to be {0}{reason}, but found {1}.", expectedKind, Subject.Value.Kind); + + return new AndConstraint(this); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeAssertions.cs.meta new file mode 100644 index 0000000..2dfe075 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed12b3ba9357a934fb2458ee976f7425 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeOffsetAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeOffsetAssertions.cs new file mode 100644 index 0000000..d7f6793 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeOffsetAssertions.cs @@ -0,0 +1,862 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using FluentAssertions.Execution; + +namespace FluentAssertions.Primitives +{ + /// + /// Contains a number of methods to assert that a is in the expected state. + /// + /// + /// You can use the for a more fluent way of specifying a . + /// + [DebuggerNonUserCode] + public class DateTimeOffsetAssertions + { + public DateTimeOffsetAssertions(DateTimeOffset? value) + { + Subject = value; + } + + /// + /// Gets the object which value is being asserted. + /// + public DateTimeOffset? Subject { get; private set; } + + /// + /// Asserts that the current is exactly equal to the value. + /// + /// The expected value + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Be(DateTimeOffset expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue && (Subject.Value == expected)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:date and time} to be {0}{reason}, but found {1}.", + expected, Subject.HasValue ? Subject.Value : default(DateTimeOffset?)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is not equal to the value. + /// + /// The unexpected value + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBe(DateTimeOffset unexpected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!Subject.HasValue || (Subject.Value != unexpected)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:date and time} not to be {0}{reason}, but it is.", unexpected); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is within the specified number of milliseconds (default = 20 ms) + /// from the specified value. + /// + /// + /// Use this assertion when, for example the database truncates datetimes to nearest 20ms. If you want to assert to the exact datetime, + /// use . + /// + /// + /// The expected time to compare the actual value with. + /// + /// + /// The maximum amount of milliseconds which the two values may differ. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeCloseTo(DateTimeOffset nearbyTime, int precision = 20, + string because = "", + params object[] becauseArgs) + { + long distanceToMinInMs = (long)(nearbyTime - DateTimeOffset.MinValue).TotalMilliseconds; + DateTimeOffset minimumValue = nearbyTime.AddMilliseconds(-Math.Min(precision, distanceToMinInMs)); + + long distanceToMaxInMs = (long)(DateTimeOffset.MaxValue - nearbyTime).TotalMilliseconds; + DateTimeOffset maximumValue = nearbyTime.AddMilliseconds(Math.Min(precision, distanceToMaxInMs)); + + Execute.Assertion + .ForCondition(Subject.HasValue && (Subject.Value >= minimumValue) && (Subject.Value <= maximumValue)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:date and time} to be within {0} ms from {1}{reason}, but found {2}.", + precision, + nearbyTime, Subject.HasValue ? Subject.Value : default(DateTimeOffset?)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is not within the specified number of milliseconds (default = 20 ms) + /// from the specified value. + /// + /// + /// Use this assertion when, for example the database truncates datetimes to nearest 20ms. If you want to assert to the exact datetime, + /// use . + /// + /// + /// The time to compare the actual value with. + /// + /// + /// The maximum amount of milliseconds which the two values must differ. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeCloseTo(DateTimeOffset distantTime, int precision = 20, string because = "", + params object[] becauseArgs) + { + long distanceToMinInMs = (long)(distantTime - DateTimeOffset.MinValue).TotalMilliseconds; + DateTimeOffset minimumValue = distantTime.AddMilliseconds(-Math.Min(precision, distanceToMinInMs)); + + long distanceToMaxInMs = (long)(DateTimeOffset.MaxValue - distantTime).TotalMilliseconds; + DateTimeOffset maximumValue = distantTime.AddMilliseconds(Math.Min(precision, distanceToMaxInMs)); + + Execute.Assertion + .ForCondition(Subject.HasValue && ((Subject.Value < minimumValue) || (Subject.Value > maximumValue))) + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected {context:date and time} to not be within {0} ms from {1}{reason}, but found {2}.", + precision, + distantTime, Subject.HasValue ? Subject.Value : default(DateTimeOffset?)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is before the specified value. + /// + /// The that the current value is expected to be before. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeBefore(DateTimeOffset expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue && Subject.Value.CompareTo(expected) < 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a {context:date and time} before {0}{reason}, but found {1}.", expected, + Subject.HasValue ? Subject.Value : default(DateTimeOffset?)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is not before the specified value. + /// + /// The that the current value is not expected to be before. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeBefore(DateTimeOffset unexpected, string because = "", + params object[] becauseArgs) + { + return BeOnOrAfter(unexpected, because, becauseArgs); + } + + /// + /// Asserts that the current is either on, or before the specified value. + /// + /// The that the current value is expected to be on or before. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeOnOrBefore(DateTimeOffset expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue && Subject.Value.CompareTo(expected) <= 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a {context:date and time} on or before {0}{reason}, but found {1}.", expected, + Subject.HasValue ? Subject.Value : default(DateTimeOffset?)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is neither on, nor before the specified value. + /// + /// The that the current value is not expected to be on nor before. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeOnOrBefore(DateTimeOffset unexpected, string because = "", + params object[] becauseArgs) + { + return BeAfter(unexpected, because, becauseArgs); + } + + /// + /// Asserts that the current is after the specified value. + /// + /// The that the current value is expected to be after. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeAfter(DateTimeOffset expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue && Subject.Value.CompareTo(expected) > 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a {context:date and time} after {0}{reason}, but found {1}.", expected, + Subject.HasValue ? Subject.Value : default(DateTimeOffset?)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is not after the specified value. + /// + /// The that the current value is not expected to be after. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeAfter(DateTimeOffset unexpected, string because = "", + params object[] becauseArgs) + { + return BeOnOrBefore(unexpected, because, becauseArgs); + } + + /// + /// Asserts that the current is either on, or after the specified value. + /// + /// The that the current value is expected to be on or after. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeOnOrAfter(DateTimeOffset expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue && Subject.Value.CompareTo(expected) >= 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a {context:date and time} on or after {0}{reason}, but found {1}.", expected, + Subject.HasValue ? Subject.Value : default(DateTimeOffset?)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is neither on, nor after the specified value. + /// + /// The that the current value is expected not to be on nor after. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeOnOrAfter(DateTimeOffset unexpected, string because = "", + params object[] becauseArgs) + { + return BeBefore(unexpected, because, becauseArgs); + } + + /// + /// Asserts that the current has the year. + /// + /// The expected year of the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveYear(int expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:year} to be {0}{reason}, but found a DateTimeOffset.", expected) + .Then + .ForCondition(Subject.Value.Year == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:year} to be {0}{reason}, but found {1}.", expected, + Subject.Value.Year); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current does not have the year. + /// + /// The year that should not be in the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotHaveYear(int unexpected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:year} not to be {0}{reason}, but found a DateTimeOffset.", unexpected) + .Then + .ForCondition(Subject.Value.Year != unexpected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:year} not to be {0}{reason}, but found it is.", unexpected, + Subject.Value.Year); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current has the month. + /// + /// The expected month of the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveMonth(int expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:month} to be {0}{reason}, but found a DateTimeOffset.", expected) + .Then + .ForCondition(Subject.Value.Month == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:month} to be {0}{reason}, but found {1}.", expected, Subject.Value.Month); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current does not have the month. + /// + /// The month that should not be in the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotHaveMonth(int unexpected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:month} not to be {0}{reason}, but found a DateTimeOffset.", unexpected) + .Then + .ForCondition(Subject.Value.Month != unexpected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:month} not to be {0}{reason}, but found it is.", unexpected, + Subject.Value.Month); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current has the day. + /// + /// The expected day of the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveDay(int expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:day} to be {0}{reason}, but found a DateTimeOffset.", expected) + .Then + .ForCondition(Subject.Value.Day == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:day} to be {0}{reason}, but found {1}.", expected, Subject.Value.Day); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current does not have the day. + /// + /// The day that should not be in the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotHaveDay(int unexpected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:day} not to be {0}{reason}, but found a DateTimeOffset.", unexpected) + .Then + .ForCondition(Subject.Value.Day != unexpected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:day} not to be {0}{reason}, but found it is.", unexpected, + Subject.Value.Day); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current has the hour. + /// + /// The expected hour of the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveHour(int expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:hour} to be {0}{reason}, but found a DateTimeOffset.", expected) + .Then + .ForCondition(Subject.Value.Hour == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:hour} to be {0}{reason}, but found {1}.", expected, Subject.Value.Hour); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current does not have the hour. + /// + /// The hour that should not be in the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotHaveHour(int unexpected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:hour} not to be {0}{reason}, but found a DateTimeOffset.", unexpected) + .Then + .ForCondition(Subject.Value.Hour != unexpected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:hour} not to be {0}{reason}, but found it is.", unexpected, + Subject.Value.Hour); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current has the minute. + /// + /// The expected minutes of the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveMinute(int expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:minute} to be {0}{reason}, but found a DateTimeOffset.", expected) + .Then + .ForCondition(Subject.Value.Minute == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:minute} to be {0}{reason}, but found {1}.", expected, Subject.Value.Minute); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current does not have the minute. + /// + /// The minute that should not be in the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotHaveMinute(int unexpected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:minute} not to be {0}{reason}, but found a DateTimeOffset.", unexpected) + .Then + .ForCondition(Subject.Value.Minute != unexpected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:minute} not to be {0}{reason}, but found it is.", unexpected, + Subject.Value.Minute); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current has the second. + /// + /// The expected seconds of the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveSecond(int expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:second} to be {0}{reason}, but found a DateTimeOffset.", expected) + .Then + .ForCondition(Subject.Value.Second == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:second} to be {0}{reason}, but found {1}.", expected, Subject.Value.Second); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current does not have the second. + /// + /// The second that should not be in the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotHaveSecond(int unexpected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:second} not to be {0}{reason}, but found a DateTimeOffset.", unexpected) + .Then + .ForCondition(Subject.Value.Second != unexpected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:second} not to be {0}{reason}, but found it is.", unexpected, + Subject.Value.Second); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current has the offset. + /// + /// The expected offset of the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveOffset( TimeSpan expected, string because = "", + params object[] becauseArgs ) + { + Execute.Assertion + .ForCondition( Subject.HasValue ) + .BecauseOf( because, becauseArgs ) + .FailWith( "Expected {context:offset} to be {0}{reason}, but found a DateTimeOffset.", expected ) + .Then + .ForCondition( Subject.Value.Offset == expected ) + .BecauseOf( because, becauseArgs ) + .FailWith( "Expected {context:offset} to be {0}{reason}, but found {1}.", expected, Subject.Value.Second ); + + return new AndConstraint( this ); + } + + /// + /// Asserts that the current does not have the offset. + /// + /// The offset that should not be in the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotHaveOffset( TimeSpan unexpected, string because = "", + params object[] becauseArgs ) + { + Execute.Assertion + .ForCondition( Subject.HasValue ) + .BecauseOf( because, becauseArgs ) + .FailWith( "Expected {context:offset} not to be {0}{reason}, but found a DateTimeOffset.", unexpected ) + .Then + .ForCondition( Subject.Value.Offset != unexpected ) + .BecauseOf( because, becauseArgs ) + .FailWith( "Expected {context:offset} not to be {0}{reason}, but found it is.", unexpected, + Subject.Value.Second ); + + return new AndConstraint( this ); + } + + /// + /// Returns a object that can be used to assert that the current + /// exceeds the specified compared to another . + /// + /// + /// The amount of time that the current should exceed compared to another . + /// + public DateTimeOffsetRangeAssertions BeMoreThan(TimeSpan timeSpan) + { + return new DateTimeOffsetRangeAssertions(this, Subject, TimeSpanCondition.MoreThan, timeSpan); + } + + /// + /// Returns a object that can be used to assert that the current + /// is equal to or exceeds the specified compared to another . + /// + /// + /// The amount of time that the current should be equal or exceed compared to + /// another . + /// + public DateTimeOffsetRangeAssertions BeAtLeast(TimeSpan timeSpan) + { + return new DateTimeOffsetRangeAssertions(this, Subject, TimeSpanCondition.AtLeast, timeSpan); + } + + /// + /// Returns a object that can be used to assert that the current + /// differs exactly the specified compared to another . + /// + /// + /// The amount of time that the current should differ exactly compared to another . + /// + public DateTimeOffsetRangeAssertions BeExactly(TimeSpan timeSpan) + { + return new DateTimeOffsetRangeAssertions(this, Subject, TimeSpanCondition.Exactly, timeSpan); + } + + /// + /// Returns a object that can be used to assert that the current + /// is within the specified compared to another . + /// + /// + /// The amount of time that the current should be within another . + /// + public DateTimeOffsetRangeAssertions BeWithin(TimeSpan timeSpan) + { + return new DateTimeOffsetRangeAssertions(this, Subject, TimeSpanCondition.Within, timeSpan); + } + + /// + /// Returns a object that can be used to assert that the current + /// differs at maximum the specified compared to another . + /// + /// + /// The maximum amount of time that the current should differ compared to another . + /// + public DateTimeOffsetRangeAssertions BeLessThan(TimeSpan timeSpan) + { + return new DateTimeOffsetRangeAssertions(this, Subject, TimeSpanCondition.LessThan, timeSpan); + } + + /// + /// Asserts that the current has the date. + /// + /// The expected date portion of the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeSameDateAs(DateTimeOffset expected, string because = "", + params object[] becauseArgs) + { + var expectedDate = expected.Date; + + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a {context:date and time} with date {0}{reason}, but found a DateTimeOffset.", expectedDate) + .Then + .ForCondition(Subject.Value.Date == expectedDate) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a {context:date and time} with date {0}{reason}, but found {1}.", expectedDate, Subject.Value); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is not the date. + /// + /// The date that is not to match the date portion of the current value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeSameDateAs(DateTimeOffset unexpected, string because = "", + params object[] becauseArgs) + { + var unexpectedDate = unexpected.Date; + + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a {context:date and time} that does not have date {0}{reason}, but found a DateTimeOffset.", unexpectedDate) + .Then + .ForCondition(Subject.Value.Date != unexpectedDate) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a {context:date and time} that does not have date {0}{reason}, but found it does.", unexpectedDate); + + return new AndConstraint(this); + } + + /// + /// Asserts that the is one of the specified . + /// + /// + /// The values that are valid. + /// + public AndConstraint BeOneOf(params DateTimeOffset?[] validValues) + { + return BeOneOf(validValues, String.Empty); + } + + /// + /// Asserts that the is one of the specified . + /// + /// + /// The values that are valid. + /// + public AndConstraint BeOneOf(params DateTimeOffset[] validValues) + { + return BeOneOf(validValues.Cast()); + } + + /// + /// Asserts that the is one of the specified . + /// + /// + /// The values that are valid. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeOneOf(IEnumerable validValues, string because = "", params object[] becauseArgs) + { + return BeOneOf(validValues.Cast(), because, becauseArgs); + } + /// + /// Asserts that the is one of the specified . + /// + /// + /// The values that are valid. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeOneOf(IEnumerable validValues, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(validValues.Contains(Subject)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected value to be one of {0}{reason}, but found {1}.", validValues, Subject); + + return new AndConstraint(this); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeOffsetAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeOffsetAssertions.cs.meta new file mode 100644 index 0000000..69660ce --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeOffsetAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cefc21f5e2e7f7a4092a767270ef76b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeOffsetRangeAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeOffsetRangeAssertions.cs new file mode 100644 index 0000000..2022ab1 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeOffsetRangeAssertions.cs @@ -0,0 +1,131 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using FluentAssertions.Common; +using FluentAssertions.Execution; + +namespace FluentAssertions.Primitives +{ + /// + /// Contains a number of methods to assert that two objects differ in the expected way. + /// + /// + /// You can use the and for a more fluent + /// way of specifying a or a . + /// + [DebuggerNonUserCode] + public class DateTimeOffsetRangeAssertions + { + #region Private Definitions + + private readonly DateTimeOffsetAssertions parentAssertions; + private readonly TimeSpanPredicate predicate; + + private readonly Dictionary predicates = new Dictionary + + { + { TimeSpanCondition.MoreThan, new TimeSpanPredicate((ts1, ts2) => ts1 > ts2, "more than") }, + { TimeSpanCondition.AtLeast, new TimeSpanPredicate((ts1, ts2) => ts1 >= ts2, "at least") }, + { TimeSpanCondition.Exactly, new TimeSpanPredicate((ts1, ts2) => ts1 == ts2, "exactly") }, + { TimeSpanCondition.Within, new TimeSpanPredicate((ts1, ts2) => ts1 <= ts2, "within") }, + { TimeSpanCondition.LessThan, new TimeSpanPredicate((ts1, ts2) => ts1 < ts2, "less than") } + }; + + private readonly DateTimeOffset? subject; + private readonly TimeSpan timeSpan; + + #endregion + + protected internal DateTimeOffsetRangeAssertions(DateTimeOffsetAssertions parentAssertions, DateTimeOffset? subject, + TimeSpanCondition condition, + TimeSpan timeSpan) + { + this.parentAssertions = parentAssertions; + this.subject = subject; + this.timeSpan = timeSpan; + + predicate = predicates[condition]; + } + + /// + /// Asserts that a occurs a specified amount of time before another . + /// + /// + /// The to compare the subject with. + /// + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AndConstraint Before(DateTimeOffset target, string because = "", + params object[] becauseArgs) + { + bool success = Execute.Assertion + .ForCondition(subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected date and/or time {0} to be " + predicate.DisplayText + + " {1} before {2}{reason}, but found a DateTime.", + subject, timeSpan, target); + + if (success) + { + var actual = target.Subtract(subject.Value); + + if (!predicate.IsMatchedBy(actual, timeSpan)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected date and/or time {0} to be " + predicate.DisplayText + + " {1} before {2}{reason}, but it differs {3}.", + subject, timeSpan, target, actual); + } + } + + return new AndConstraint(parentAssertions); + } + + /// + /// Asserts that a occurs a specified amount of time after another . + /// + /// + /// The to compare the subject with. + /// + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AndConstraint After(DateTimeOffset target, string because = "", params object[] becauseArgs) + { + bool success = Execute.Assertion + .ForCondition(subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected date and/or time {0} to be " + predicate.DisplayText + + " {1} after {2}{reason}, but found a DateTime.", + subject, timeSpan, target); + + if (success) + { + var actual = subject.Value.Subtract(target); + + if (!predicate.IsMatchedBy(actual, timeSpan)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected date and/or time {0} to be " + predicate.DisplayText + + " {1} after {2}{reason}, but it differs {3}.", + subject, timeSpan, target, actual); + } + } + + return new AndConstraint(parentAssertions); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeOffsetRangeAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeOffsetRangeAssertions.cs.meta new file mode 100644 index 0000000..39615b5 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeOffsetRangeAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 16807cd3f8fdf1a4eb9669846ecd8d83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeRangeAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeRangeAssertions.cs new file mode 100644 index 0000000..f03869e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeRangeAssertions.cs @@ -0,0 +1,131 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using FluentAssertions.Execution; + +namespace FluentAssertions.Primitives +{ + /// + /// Contains a number of methods to assert that two objects differ in the expected way. + /// + /// + /// You can use the and for a more fluent + /// way of specifying a or a . + /// + [DebuggerNonUserCode] + public class DateTimeRangeAssertions + { + #region Private Definitions + + private readonly DateTimeAssertions parentAssertions; + private readonly TimeSpanPredicate predicate; + + private readonly Dictionary predicates = new Dictionary + + { + {TimeSpanCondition.MoreThan, new TimeSpanPredicate((ts1, ts2) => ts1 > ts2, "more than")}, + {TimeSpanCondition.AtLeast, new TimeSpanPredicate((ts1, ts2) => ts1 >= ts2, "at least")}, + {TimeSpanCondition.Exactly, new TimeSpanPredicate((ts1, ts2) => ts1 == ts2, "exactly")}, + {TimeSpanCondition.Within, new TimeSpanPredicate((ts1, ts2) => ts1 <= ts2, "within")}, + {TimeSpanCondition.LessThan, new TimeSpanPredicate((ts1, ts2) => ts1 < ts2, "less than")} + }; + + private readonly DateTime? subject; + private readonly TimeSpan timeSpan; + + #endregion + + protected internal DateTimeRangeAssertions(DateTimeAssertions parentAssertions, DateTime? subject, + TimeSpanCondition condition, + TimeSpan timeSpan) + { + this.parentAssertions = parentAssertions; + this.subject = subject; + this.timeSpan = timeSpan; + + predicate = predicates[condition]; + } + + /// + /// Asserts that a occurs a specified amount of time before another . + /// + /// + /// The to compare the subject with. + /// + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AndConstraint Before(DateTime target, string because = "", + params object[] becauseArgs) + { + bool success = Execute.Assertion + .ForCondition(subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected date and/or time {0} to be " + predicate.DisplayText + + " {1} before {2}{reason}, but found a DateTime.", + subject, timeSpan, target); + + if (success) + { + var actual = target.Subtract(subject.Value); + + if (!predicate.IsMatchedBy(actual, timeSpan)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected date and/or time {0} to be " + predicate.DisplayText + + " {1} before {2}{reason}, but it differs {3}.", + subject, timeSpan, target, actual); + } + } + + return new AndConstraint(parentAssertions); + } + + /// + /// Asserts that a occurs a specified amount of time after another . + /// + /// + /// The to compare the subject with. + /// + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AndConstraint After(DateTime target, string because = "", + params object[] becauseArgs) + { + bool success = Execute.Assertion + .ForCondition(subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected date and/or time {0} to be " + predicate.DisplayText + + " {1} after {2}{reason}, but found a DateTime.", + subject, timeSpan, target); + + if (success) + { + var actual = subject.Value.Subtract(target); + + if (!predicate.IsMatchedBy(actual, timeSpan)) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected date and/or time {0} to be " + predicate.DisplayText + + " {1} after {2}{reason}, but it differs {3}.", + subject, timeSpan, target, actual); + } + } + + return new AndConstraint(parentAssertions); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeRangeAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeRangeAssertions.cs.meta new file mode 100644 index 0000000..13dcf86 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/DateTimeRangeAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9f8ce63c2d6529b4cac24b89052421bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/GuidAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/GuidAssertions.cs new file mode 100644 index 0000000..eba2162 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/GuidAssertions.cs @@ -0,0 +1,130 @@ +using System; +using System.Diagnostics; +using FluentAssertions.Execution; + +namespace FluentAssertions.Primitives +{ + /// + /// Contains a number of methods to assert that a is in the correct state. + /// + [DebuggerNonUserCode] + public class GuidAssertions + { + public GuidAssertions(Guid? value) + { + Subject = value; + } + + /// + /// Gets the object which value is being asserted. + /// + public Guid? Subject { get; private set; } + + #region BeEmpty / NotBeEmpty + + /// + /// Asserts that the is . + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeEmpty(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition((Subject.HasValue) && (Subject.Value == Guid.Empty)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected empty Guid{reason}, but found {0}.", Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that the is not . + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeEmpty(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition((Subject.HasValue) && (Subject.Value != Guid.Empty)) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect empty Guid{reason}."); + + return new AndConstraint(this); + } + + #endregion + + #region Be / NotBe + + /// + /// Asserts that the is equal to the GUID. + /// + /// The expected value to compare the actual value with. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Be(string expected, string because = "", params object[] becauseArgs) + { + var expectedGuid = new Guid(expected); + return Be(expectedGuid, because, becauseArgs); + } + + /// + /// Asserts that the is equal to the GUID. + /// + /// The expected value to compare the actual value with. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Be(Guid expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.Equals(expected)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:Guid} to be {0}{reason}, but found {1}.", expected, Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that the is not equal to the GUID. + /// + /// The unexpected value to compare the actual value with. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBe(Guid unexpected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!Subject.Equals(unexpected)) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect {context:Guid} to be {0}{reason}.", Subject); + + return new AndConstraint(this); + } + + #endregion + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/GuidAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/GuidAssertions.cs.meta new file mode 100644 index 0000000..9cd8ae2 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/GuidAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4826598e85376c440b261c2cad5ebf6c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/NegatedStringStartValidator.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/NegatedStringStartValidator.cs new file mode 100644 index 0000000..34b443f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/NegatedStringStartValidator.cs @@ -0,0 +1,44 @@ +using System; + +namespace FluentAssertions.Primitives +{ + internal class NegatedStringStartValidator : StringValidator + { + private readonly StringComparison stringComparison; + + public NegatedStringStartValidator(string subject, string expected, StringComparison stringComparison, string because, + object[] becauseArgs) : + base(subject, expected, because, becauseArgs) + { + this.stringComparison = stringComparison; + } + + protected override string ExpectationDescription + { + get + { + string predicateDescription = IgnoreCase ? "start with equivalent of" : "start with"; + return "Expected {context:string} that does not " + predicateDescription + " "; + } + } + + private bool IgnoreCase + { + get + { + return (stringComparison == StringComparison.CurrentCultureIgnoreCase) || + (stringComparison == StringComparison.OrdinalIgnoreCase); + } + } + + protected override void ValidateAgainstMismatch() + { + bool isMatch = subject.StartsWith(expected, stringComparison); + if (isMatch) + { + assertion.FailWith(ExpectationDescription + "{0}{reason}, but found {1}.", + expected, subject); + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/NegatedStringStartValidator.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/NegatedStringStartValidator.cs.meta new file mode 100644 index 0000000..1745630 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/NegatedStringStartValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 647b8b9225ac9d646bb0de64d29a1b18 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/NullableBooleanAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableBooleanAssertions.cs new file mode 100644 index 0000000..3d37f23 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableBooleanAssertions.cs @@ -0,0 +1,149 @@ +using System; +using System.Diagnostics; +using FluentAssertions.Execution; + +namespace FluentAssertions.Primitives +{ + /// + /// Contains a number of methods to assert that a nullable is in the expected state. + /// + [DebuggerNonUserCode] + public class NullableBooleanAssertions : BooleanAssertions + { + public NullableBooleanAssertions(bool? value) + : base(value) + { + } + + /// + /// Asserts that a nullable boolean value is not null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveValue(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a value{reason}."); + + return new AndConstraint(this); + } + + /// + /// Asserts that a nullable boolean value is not null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeNull(string because = "", params object[] becauseArgs) + { + return HaveValue(because, becauseArgs); + } + + /// + /// Asserts that a nullable boolean value is null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotHaveValue(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect a value{reason}, but found {0}.", Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that a nullable boolean value is null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeNull(string because = "", params object[] becauseArgs) + { + return NotHaveValue(because, becauseArgs); + } + + /// + /// Asserts that the value is equal to the specified value. + /// + /// The expected value + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Be(bool? expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {0}{reason}, but found {1}.", expected, Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that the value is not false. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeFalse(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!Subject.HasValue || Subject.Value) + .BecauseOf(because, becauseArgs) + .FailWith("Expected nullable boolean not to be {0}{reason}, but found {1}.", false, Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that the value is not true. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeTrue(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!Subject.HasValue || !Subject.Value) + .BecauseOf(because, becauseArgs) + .FailWith("Expected nullable boolean not to be {0}{reason}, but found {1}.", true, Subject); + + return new AndConstraint(this); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/NullableBooleanAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableBooleanAssertions.cs.meta new file mode 100644 index 0000000..a556fcf --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableBooleanAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c888c669899df3843b592fc9d838b0d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/NullableDateTimeAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableDateTimeAssertions.cs new file mode 100644 index 0000000..b19bae9 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableDateTimeAssertions.cs @@ -0,0 +1,112 @@ +using System; +using System.Diagnostics; +using FluentAssertions.Execution; + +namespace FluentAssertions.Primitives +{ + /// + /// Contains a number of methods to assert that a nullable or is in the expected state. + /// + /// + /// You can use the for a more fluent way of specifying a . + /// + [DebuggerNonUserCode] + public class NullableDateTimeAssertions : DateTimeAssertions + { + public NullableDateTimeAssertions(DateTime? expected) + : base(expected) + { + } + + /// + /// Asserts that a nullable value is not null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveValue(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected variable to have a value{reason}, but found {0}", Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that a nullable value is not null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeNull(string because = "", params object[] becauseArgs) + { + return HaveValue(because, becauseArgs); + } + + /// + /// Asserts that a nullable value is null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotHaveValue(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect variable to have a value{reason}, but found {0}", Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that a nullable value is null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeNull(string because = "", params object[] becauseArgs) + { + return NotHaveValue(because, becauseArgs); + } + + /// + /// Asserts that the value is equal to the specified value. + /// + /// The expected value + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Be(DateTime? expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {0}{reason}, but found {1}.", expected, Subject); + + return new AndConstraint(this); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/NullableDateTimeAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableDateTimeAssertions.cs.meta new file mode 100644 index 0000000..b6d5e6a --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableDateTimeAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fdc11fd216aad13448006c17ff39bc45 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/NullableDateTimeOffsetAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableDateTimeOffsetAssertions.cs new file mode 100644 index 0000000..14c0a70 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableDateTimeOffsetAssertions.cs @@ -0,0 +1,115 @@ +using System; +using System.Diagnostics; +using FluentAssertions.Execution; + +namespace FluentAssertions.Primitives +{ + /// + /// Contains a number of methods to assert that a nullable is in the expected state. + /// + /// + /// You can use the for a more fluent way of specifying a . + /// + [DebuggerNonUserCode] + public class NullableDateTimeOffsetAssertions : DateTimeOffsetAssertions + { + public NullableDateTimeOffsetAssertions(DateTimeOffset? expected) + : base(expected) + { + } + + /// + /// Asserts that a nullable value is not null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveValue(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected variable to have a value{reason}, but found {0}", Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that a nullable value is not null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeNull(string because = "", params object[] becauseArgs) + { + return HaveValue(because, becauseArgs); + } + + /// + /// Asserts that a nullable value is null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotHaveValue(string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect variable to have a value{reason}, but found {0}", Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that a nullable value is null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeNull(string because = "", + params object[] becauseArgs) + { + return NotHaveValue(because, becauseArgs); + } + + /// + /// Asserts that the value is equal to the specified value. + /// + /// The expected value + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Be(DateTimeOffset? expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {0}{reason}, but found {1}.", expected, Subject); + + return new AndConstraint(this); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/NullableDateTimeOffsetAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableDateTimeOffsetAssertions.cs.meta new file mode 100644 index 0000000..5406724 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableDateTimeOffsetAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dad515c31c6618c408cb4fd5758cccd2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/NullableGuidAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableGuidAssertions.cs new file mode 100644 index 0000000..e2a6740 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableGuidAssertions.cs @@ -0,0 +1,109 @@ +using System; +using System.Diagnostics; +using FluentAssertions.Execution; + +namespace FluentAssertions.Primitives +{ + /// + /// Contains a number of methods to assert that a nullable is in the expected state. + /// + [DebuggerNonUserCode] + public class NullableGuidAssertions : GuidAssertions + { + public NullableGuidAssertions(Guid? value) + : base(value) + { + } + + /// + /// Asserts that a nullable value is not null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveValue(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a value{reason}."); + + return new AndConstraint(this); + } + + /// + /// Asserts that a nullable value is not null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeNull(string because = "", params object[] becauseArgs) + { + return HaveValue(because, becauseArgs); + } + + /// + /// Asserts that a nullable value is null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotHaveValue(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect a value{reason}, but found {0}.", Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that a nullable value is null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeNull(string because = "", params object[] becauseArgs) + { + return NotHaveValue(because, becauseArgs); + } + + /// + /// Asserts that the value is equal to the specified value. + /// + /// The expected value + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Be(Guid? expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:Guid} to be {0}{reason}, but found {1}.", expected, Subject); + + return new AndConstraint(this); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/NullableGuidAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableGuidAssertions.cs.meta new file mode 100644 index 0000000..49af594 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableGuidAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d3a656f2b92cec444ba5385a8fd029e3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/NullableSimpleTimeSpanAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableSimpleTimeSpanAssertions.cs new file mode 100644 index 0000000..e2b1d29 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableSimpleTimeSpanAssertions.cs @@ -0,0 +1,114 @@ +using System; +using System.Diagnostics; +using FluentAssertions.Common; +using FluentAssertions.Execution; + +namespace FluentAssertions.Primitives +{ + /// + /// Contains a number of methods to assert that a nullable is in the expected state. + /// + /// + /// You can use the for a more fluent way of specifying a . + /// + [DebuggerNonUserCode] + public class NullableSimpleTimeSpanAssertions : SimpleTimeSpanAssertions + { + public NullableSimpleTimeSpanAssertions(TimeSpan? value) + : base(value) + { + } + + /// + /// Asserts that a nullable value is not null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveValue(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a value{reason}."); + + return new AndConstraint(this); + } + + /// + /// Asserts that a nullable value is not null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeNull(string because = "", params object[] becauseArgs) + { + return HaveValue(because, becauseArgs); + } + + /// + /// Asserts that a nullable value is null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotHaveValue(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!Subject.HasValue) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect a value{reason}, but found {0}.", Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that a nullable value is null. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeNull(string because = "", params object[] becauseArgs) + { + return NotHaveValue(because, becauseArgs); + } + + /// + /// Asserts that the value is equal to the specified value. + /// + /// The expected value + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Be(TimeSpan? expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {0}{reason}, but found {1}.", expected, Subject); + + return new AndConstraint(this); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/NullableSimpleTimeSpanAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableSimpleTimeSpanAssertions.cs.meta new file mode 100644 index 0000000..76685f9 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/NullableSimpleTimeSpanAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: abd03ad00949218448fcbee8f94efba2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/ObjectAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/ObjectAssertions.cs new file mode 100644 index 0000000..a0d3fab --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/ObjectAssertions.cs @@ -0,0 +1,131 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Xml.Serialization; +using FluentAssertions.Common; +using FluentAssertions.Equivalency; +using FluentAssertions.Execution; + +namespace FluentAssertions.Primitives +{ + /// + /// Contains a number of methods to assert that an is in the expected state. + /// + [DebuggerNonUserCode] + public class ObjectAssertions : ReferenceTypeAssertions + { + public ObjectAssertions(object value) + { + Subject = value; + } + + /// + /// Asserts that an object equals another object using its implementation. + /// + /// The expected value + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Be(object expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .ForCondition(Subject.IsSameOrEqualTo(expected)) + .FailWith("Expected {context:object} to be {0}{reason}, but found {1}.", expected, + Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that an object does not equal another object using its method. + /// + /// The unexpected value + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AndConstraint NotBe(object unexpected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!Subject.IsSameOrEqualTo(unexpected)) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect {context:object} to be equal to {0}{reason}.", unexpected); + + return new AndConstraint(this); + } + + /// + /// Asserts that an object is an enum and has a specified flag + /// + /// The expected flag. + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AndConstraint HaveFlag(Enum expectedFlag, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .ForCondition(!ReferenceEquals(Subject, null)) + .FailWith("Expected type to be {0}{reason}, but found .", expectedFlag.GetType()) + .Then + .ForCondition(Subject.GetType() == expectedFlag.GetType()) + .FailWith("Expected the enum to be of type {0} type but found {1}{reason}.", expectedFlag.GetType(), Subject.GetType()) + .Then + .Given(() => Subject as Enum) + .ForCondition(@enum => @enum.HasFlag(expectedFlag)) + .FailWith("The enum was expected to have flag {0} but found {1}{reason}.", _ => expectedFlag, @enum => @enum); + + return new AndConstraint(this); + } + + /// + /// Asserts that an object is an enum and does not have a specified flag + /// + /// The unexpected flag. + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AndConstraint NotHaveFlag(Enum unexpectedFlag, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .ForCondition(!ReferenceEquals(Subject, null)) + .FailWith("Expected type to be {0}{reason}, but found .", unexpectedFlag.GetType()) + .Then + .ForCondition(Subject.GetType() == unexpectedFlag.GetType()) + .FailWith("Expected the enum to be of type {0} type but found {1}{reason}.", unexpectedFlag.GetType(), Subject.GetType()) + .Then + .Given(() => Subject as Enum) + .ForCondition(@enum => !@enum.HasFlag(unexpectedFlag)) + .FailWith("Did not expect the enum to have flag {0}{reason}.", unexpectedFlag); + + return new AndConstraint(this); + } + + /// + /// Returns the type of the subject the assertion applies on. + /// + protected override string Context + { + get { return "object"; } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/ObjectAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/ObjectAssertions.cs.meta new file mode 100644 index 0000000..7c601cb --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/ObjectAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8711aa516d517c24aa318a87e223da90 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/ReferenceTypeAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/ReferenceTypeAssertions.cs new file mode 100644 index 0000000..03f8fbe --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/ReferenceTypeAssertions.cs @@ -0,0 +1,286 @@ +using System; +using System.Diagnostics; +using System.Linq.Expressions; + +using FluentAssertions.Execution; + +namespace FluentAssertions.Primitives +{ + /// + /// Contains a number of methods to assert that a reference type object is in the expected state. + /// + [DebuggerNonUserCode] + public abstract class ReferenceTypeAssertions + where TAssertions : ReferenceTypeAssertions + { + /// + /// Gets the object which value is being asserted. + /// + public TSubject Subject { get; protected set; } + + /// + /// Asserts that the current object has not been initialized yet. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeNull(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(ReferenceEquals(Subject, null)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:" + Context + "} to be {reason}, but found {0}.", Subject); + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the current object has been initialized. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeNull(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!ReferenceEquals(Subject, null)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:" + Context + "} not to be {reason}."); + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that an object reference refers to the exact same object as another object reference. + /// + /// The expected object + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AndConstraint BeSameAs(TSubject expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .UsingLineBreaks + .ForCondition(ReferenceEquals(Subject, expected)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:" + Context + "} to refer to {0}{reason}, but found {1}.", expected, Subject); + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that an object reference refers to a different object than another object reference refers to. + /// + /// The unexpected object + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AndConstraint NotBeSameAs(TSubject unexpected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .UsingLineBreaks + .ForCondition(!ReferenceEquals(Subject, unexpected)) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect reference to object {0}{reason}.", unexpected); + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the object is of the specified type . + /// + /// The expected type of the object. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndWhichConstraint BeOfType(string because = "", params object[] becauseArgs) + { + BeOfType(typeof(T), because, becauseArgs); + + return new AndWhichConstraint((TAssertions)this, (T)(object)Subject); + } + + /// + /// Asserts that the object is of the specified type . + /// + /// + /// The type that the subject is supposed to be of. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeOfType(Type expectedType, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!ReferenceEquals(Subject, null)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:type} to be {0}{reason}, but found .", expectedType); + + Type subjectType = Subject.GetType(); + if (expectedType.IsGenericTypeDefinition() && subjectType.IsGenericType()) + { + subjectType.GetGenericTypeDefinition().Should().Be(expectedType, because, becauseArgs); + } + else + { + subjectType.Should().Be(expectedType, because, becauseArgs); + } + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the object is not of the specified type . + /// + /// The type that the subject is not supposed to be of. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeOfType(string because = "", params object[] becauseArgs) + { + NotBeOfType(typeof(T), because, becauseArgs); + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the object is not of the specified type . + /// + /// + /// The type that the subject is not supposed to be of. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeOfType(Type expectedType, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!ReferenceEquals(Subject, null)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:type} not to be {0}{reason}, but found .", expectedType); + + Subject.GetType().Should().NotBe(expectedType, because, becauseArgs); + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the object is assignable to a variable of type . + /// + /// The type to which the object should be assignable. + /// The reason why the object should be assignable to the type. + /// The parameters used when formatting the . + /// An which can be used to chain assertions. + public AndWhichConstraint BeAssignableTo(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject is T) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:" + Context + "} to be assignable to {0}{reason}, but {1} is not", + typeof(T), + Subject.GetType()); + + return new AndWhichConstraint((TAssertions)this, (T)((object)Subject)); + } + + /// + /// Asserts that the object is assignable to a variable of given . + /// + /// The type to which the object should be assignable. + /// The parameters used when formatting the . + /// + /// An which can be used to chain assertions. + public AndConstraint BeAssignableTo(Type type, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!ReferenceEquals(Subject, null)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:type} not to be {0}{reason}, but found .", type); + + Execute.Assertion + .ForCondition(type.IsAssignableFrom(Subject.GetType())) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:" + Context + "} to be assignable to {0}{reason}, but {1} is not", + type, + Subject.GetType()); + + return new AndConstraint((TAssertions)this); + } + + /// + /// Asserts that the is satisfied. + /// + /// The predicate which must be satisfied by the . + /// The reason why the predicate should be satisfied. + /// The parameters used when formatting the . + /// An which can be used to chain assertions. + public AndConstraint Match(Expression> predicate, + string because = "", + params object[] becauseArgs) + { + return Match(predicate, because, becauseArgs); + } + + /// + /// Asserts that the is satisfied. + /// + /// The predicate which must be satisfied by the . + /// The reason why the predicate should be satisfied. + /// The parameters used when formatting the . + /// An which can be used to chain assertions. + public AndConstraint Match(Expression> predicate, + string because = "", + params object[] becauseArgs) + where T : TSubject + { + if (predicate == null) + { + throw new NullReferenceException("Cannot match an object against a predicate."); + } + + Execute.Assertion + .ForCondition(predicate.Compile()((T)Subject)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {0} to match {1}{reason}.", Subject, predicate.Body); + + return new AndConstraint((TAssertions)this); + } + + /// + /// Returns the type of the subject the assertion applies on. + /// + protected abstract string Context { get; } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/ReferenceTypeAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/ReferenceTypeAssertions.cs.meta new file mode 100644 index 0000000..84d07f4 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/ReferenceTypeAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be44ec5fe5a362d4cad2882c0a9553e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/SimpleTimeSpanAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/SimpleTimeSpanAssertions.cs new file mode 100644 index 0000000..6029e6c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/SimpleTimeSpanAssertions.cs @@ -0,0 +1,236 @@ +using System; +using System.Diagnostics; +using FluentAssertions.Execution; + +namespace FluentAssertions.Primitives +{ + /// + /// Contains a number of methods to assert that a nullable is in the expected state. + /// + [DebuggerNonUserCode] + public class SimpleTimeSpanAssertions + { + public SimpleTimeSpanAssertions(TimeSpan? value) + { + Subject = value; + } + + /// + /// Gets the object which value is being asserted. + /// + public TimeSpan? Subject + { + get; + private set; + } + + /// + /// Asserts that the time difference of the current is greater than zero. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BePositive(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.Value.CompareTo(new TimeSpan()) > 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected positive value{reason}, but found {0}", Subject.Value); + + return new AndConstraint(this); + } + + /// + /// Asserts that the time difference of the current is less than zero. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeNegative(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.Value.CompareTo(new TimeSpan()) < 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected negative value{reason}, but found {0}", Subject.Value); + + return new AndConstraint(this); + } + + /// + /// Asserts that the time difference of the current is equal to the + /// specified time. + /// + /// The expected time difference + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Be(TimeSpan expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.Value.CompareTo(expected) == 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {0}{reason}, but found {1}.", expected, Subject.Value); + + return new AndConstraint(this); + } + + /// + /// Asserts that the time difference of the current is not equal to the + /// specified time. + /// + /// The unexpected time difference + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBe(TimeSpan unexpected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.Value.CompareTo(unexpected) != 0) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect {0}{reason}.", unexpected); + + return new AndConstraint(this); + } + + /// + /// Asserts that the time difference of the current is less than the + /// specified time. + /// + /// The time difference to which the current value will be compared + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeLessThan(TimeSpan expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.Value.CompareTo(expected) < 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a value less than {0}{reason}, but found {1}.", expected, Subject.Value); + + return new AndConstraint(this); + } + + /// + /// Asserts that the time difference of the current is less than or equal to the + /// specified time. + /// + /// The time difference to which the current value will be compared + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeLessOrEqualTo(TimeSpan expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.Value.CompareTo(expected) <= 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a value less or equal to {0}{reason}, but found {1}.", expected, Subject.Value); + + return new AndConstraint(this); + } + + /// + /// Asserts that the time difference of the current is greater than the + /// specified time. + /// + /// The time difference to which the current value will be compared + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeGreaterThan(TimeSpan expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.Value.CompareTo(expected) > 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a value greater than {0}{reason}, but found {1}.", expected, Subject.Value); + + return new AndConstraint(this); + } + + /// + /// Asserts that the time difference of the current is greater than or equal to the + /// specified time. + /// + /// The time difference to which the current value will be compared + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeGreaterOrEqualTo(TimeSpan expected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.Value.CompareTo(expected) >= 0) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a value greater or equal to {0}{reason}, but found {1}.", expected, Subject.Value); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is within the specified number of milliseconds (default = 20 ms) + /// from the specified value. + /// + /// + /// Use this assertion when, for example the database truncates datetimes to nearest 20ms. If you want to assert to the exact datetime, + /// use . + /// + /// + /// The expected time to compare the actual value with. + /// + /// + /// The maximum amount of milliseconds which the two values may differ. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeCloseTo(TimeSpan nearbyTime, int precision = 20, string because = "", + params object[] becauseArgs) + { + var minimumValue = new TimeSpan(nearbyTime.Days, nearbyTime.Hours, nearbyTime.Minutes, nearbyTime.Seconds, nearbyTime.Milliseconds - precision); + var maximumValue = new TimeSpan(nearbyTime.Days, nearbyTime.Hours, nearbyTime.Minutes, nearbyTime.Seconds, nearbyTime.Milliseconds + precision); + + Execute.Assertion + .ForCondition(Subject.HasValue && (Subject.Value >= minimumValue) && (Subject.Value <= maximumValue)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {context:time} to be within {0} ms from {1}{reason}, but found {2}.", precision, + nearbyTime, Subject.HasValue ? Subject.Value : default(TimeSpan?)); + + return new AndConstraint(this); + } + } +} diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/SimpleTimeSpanAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/SimpleTimeSpanAssertions.cs.meta new file mode 100644 index 0000000..7e94b6d --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/SimpleTimeSpanAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d8da154ef0d01964a817115ab67da5c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/StringAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/StringAssertions.cs new file mode 100644 index 0000000..8549ee2 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/StringAssertions.cs @@ -0,0 +1,888 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text.RegularExpressions; +using FluentAssertions.Execution; + +using System.Linq; +using JetBrains.Annotations; + +namespace FluentAssertions.Primitives +{ + /// + /// Contains a number of methods to assert that a is in the expected state. + /// + [DebuggerNonUserCode] + public class StringAssertions : ReferenceTypeAssertions + { + /// + /// Initializes a new instance of the class. + /// + public StringAssertions(string value) + { + Subject = value; + } + + /// + /// Asserts that a string is exactly the same as another string, including the casing and any leading or trailing whitespace. + /// + /// The expected string. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Be(string expected, string because = "", params object[] becauseArgs) + { + new StringEqualityValidator(Subject, expected, StringComparison.CurrentCulture, because, becauseArgs).Validate(); + + return new AndConstraint(this); + } + + /// + /// Asserts that the is one of the specified . + /// + /// + /// The values that are valid. + /// + public AndConstraint BeOneOf(params string[] validValues) + { + return BeOneOf(validValues, String.Empty); + } + + /// + /// Asserts that the is one of the specified . + /// + /// + /// The values that are valid. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeOneOf(IEnumerable validValues, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(validValues.Contains(Subject)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected value to be one of {0}{reason}, but found {1}.", validValues, Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string is exactly the same as another string, including any leading or trailing whitespace, with + /// the exception of the casing. + /// + /// + /// The string that the subject is expected to be equivalent to. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeEquivalentTo(string expected, string because = "", + params object[] becauseArgs) + { + var expectation = new StringEqualityValidator( + Subject, expected, StringComparison.CurrentCultureIgnoreCase, because, becauseArgs); + + expectation.Validate(); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string is not exactly the same as the specified , + /// including any leading or trailing whitespace, with the exception of the casing. + /// + /// The string that the subject is not expected to be equivalent to. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBe(string unexpected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject != unexpected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected string not to be {0}{reason}.", unexpected); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string matches a wildcard pattern. + /// + /// + /// The wildcard pattern with which the subject is matched, where * and ? have special meanings. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Match(string wildcardPattern, string because = "", params object[] becauseArgs) + { + new StringWildcardMatchingValidator(Subject, wildcardPattern, because, becauseArgs).Validate(); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string does not match a wildcard pattern. + /// + /// + /// The wildcard pattern with which the subject is matched, where * and ? have special meanings. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotMatch(string wildcardPattern, string because = "", params object[] becauseArgs) + { + new StringWildcardMatchingValidator(Subject, wildcardPattern, because, becauseArgs) + { + Negate = true + }.Validate(); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string matches a wildcard pattern. + /// + /// + /// The wildcard pattern with which the subject is matched, where * and ? have special meanings. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint MatchEquivalentOf(string wildcardPattern, string because = "", + params object[] becauseArgs) + { + var validator = new StringWildcardMatchingValidator(Subject, wildcardPattern, because, becauseArgs) + { + IgnoreCase = true, + IgnoreNewLineDifferences = true + }; + + validator.Validate(); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string does not match a wildcard pattern. + /// + /// + /// The wildcard pattern with which the subject is matched, where * and ? have special meanings. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotMatchEquivalentOf(string wildcardPattern, string because = "", + params object[] becauseArgs) + { + var validator = new StringWildcardMatchingValidator(Subject, wildcardPattern, because, becauseArgs) + { + IgnoreCase = true, + IgnoreNewLineDifferences = true, + Negate = true + }; + + validator.Validate(); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string matches a regular expression. + /// + /// + /// The regular expression with which the subject is matched. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint MatchRegex(string regularExpression, string because = "", params object[] becauseArgs) + { + if (regularExpression == null) + { + throw new NullReferenceException("Cannot match string against ."); + } + + Execute.Assertion + .ForCondition(!ReferenceEquals(Subject, null)) + .UsingLineBreaks + .BecauseOf(because, becauseArgs) + .FailWith("Expected string to match regex {0}{reason}, but it was .", regularExpression); + + bool isMatch; + try + { + isMatch = Regex.IsMatch(Subject, regularExpression); + } + catch (ArgumentException) + { + throw new ArgumentException( + string.Format( + "Cannot match string against \"{0}\" because it is not a valid regular expression.", + regularExpression)); + } + + Execute.Assertion + .ForCondition(isMatch) + .BecauseOf(because, becauseArgs) + .UsingLineBreaks + .FailWith("Expected string to match regex {0}{reason}, but {1} does not match.", regularExpression, Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string does not match a regular expression. + /// + /// + /// The regular expression with which the subject is matched. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotMatchRegex(string regularExpression, string because = "", params object[] becauseArgs) + { + if (regularExpression == null) + { + throw new NullReferenceException("Cannot match string against ."); + } + + Execute.Assertion + .ForCondition(!ReferenceEquals(Subject, null)) + .UsingLineBreaks + .BecauseOf(because, becauseArgs) + .FailWith("Expected string to not match regex {0}{reason}, but it was .", regularExpression); + + bool isMatch; + try + { + isMatch = Regex.IsMatch(Subject, regularExpression); + } + catch (ArgumentException) + { + throw new ArgumentException( + string.Format( + "Cannot match string against \"{0}\" because it is not a valid regular expression.", + regularExpression)); + } + + Execute.Assertion + .ForCondition(!isMatch) + .BecauseOf(because, becauseArgs) + .UsingLineBreaks + .FailWith("Did not expect string to match regex {0}{reason}, but {1} matches.", regularExpression, Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string starts exactly with the specified value, + /// including the casing and any leading or trailing whitespace. + /// + /// The string that the subject is expected to start with. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint StartWith(string expected, string because = "", params object[] becauseArgs) + { + if (expected == null) + { + throw new NullReferenceException("Cannot compare start of string with ."); + } + + if (expected.Length == 0) + { + throw new ArgumentException("Cannot compare start of string with empty string."); + } + + new StringStartValidator(Subject, expected, StringComparison.CurrentCulture, because, becauseArgs).Validate(); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string does not start with the specified value, + /// including the casing and any leading or trailing whitespace. + /// + /// The string that the subject is not expected to start with. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotStartWith(string unexpected, string because = "", params object[] becauseArgs) + { + if (unexpected == null) + { + throw new NullReferenceException("Cannot compare start of string with ."); + } + + if (unexpected.Length == 0) + { + throw new ArgumentException("Cannot compare start of string with empty string."); + } + + new NegatedStringStartValidator(Subject, unexpected, StringComparison.CurrentCulture, because, becauseArgs).Validate(); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string starts with the specified , + /// including any leading or trailing whitespace, with the exception of the casing. + /// + /// The string that the subject is expected to start with. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint StartWithEquivalent(string expected, string because = "", + params object[] becauseArgs) + { + if (expected == null) + { + throw new NullReferenceException("Cannot compare string start equivalence with ."); + } + + if (expected.Length == 0) + { + throw new ArgumentException("Cannot compare string start equivalence with empty string."); + } + + new StringStartValidator(Subject, expected, StringComparison.CurrentCultureIgnoreCase, because, becauseArgs).Validate(); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string does not start with the specified value, + /// including any leading or trailing whitespace, with the exception of the casing. + /// + /// The string that the subject is not expected to start with. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotStartWithEquivalentOf(string unexpected, string because = "", params object[] becauseArgs) + { + if (unexpected == null) + { + throw new NullReferenceException("Cannot compare start of string with ."); + } + + if (unexpected.Length == 0) + { + throw new ArgumentException("Cannot compare start of string with empty string."); + } + + new NegatedStringStartValidator(Subject, unexpected, StringComparison.CurrentCultureIgnoreCase, because, becauseArgs).Validate(); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string ends exactly with the specified , + /// including the casing and any leading or trailing whitespace. + /// + /// The string that the subject is expected to end with. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint EndWith(string expected, string because = "", params object[] becauseArgs) + { + if (expected == null) + { + throw new NullReferenceException("Cannot compare string end with ."); + } + + if (expected.Length == 0) + { + throw new ArgumentException("Cannot compare string end with empty string."); + } + + if (Subject == null) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected string {0} to end with {1}{reason}.", Subject, expected); + } + + if (Subject.Length < expected.Length) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected string to end with {0}{reason}, but {1} is too short.", expected, Subject); + } + + Execute.Assertion + .ForCondition(Subject.EndsWith(expected)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected string {0} to end with {1}{reason}.", Subject, expected); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string does not end exactly with the specified , + /// including the casing and any leading or trailing whitespace. + /// + /// The string that the subject is not expected to end with. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotEndWith(string unexpected, string because = "", params object[] becauseArgs) + { + if (unexpected == null) + { + throw new NullReferenceException("Cannot compare end of string with ."); + } + + if (unexpected.Length == 0) + { + throw new ArgumentException("Cannot compare end of string with empty string."); + } + + if (Subject == null) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected string that does not end with {1}, but found {0}.", Subject, unexpected); + } + + Execute.Assertion + .ForCondition(!Subject.EndsWith(unexpected)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected string {0} not to end with {1}{reason}.", Subject, unexpected); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string ends with the specified , + /// including any leading or trailing whitespace, with the exception of the casing. + /// + /// The string that the subject is expected to end with. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint EndWithEquivalent(string expected, string because = "", params object[] becauseArgs) + { + if (expected == null) + { + throw new NullReferenceException("Cannot compare string end equivalence with ."); + } + + if (expected.Length == 0) + { + throw new ArgumentException("Cannot compare string end equivalence with empty string."); + } + + if (Subject == null) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected string that ends with equivalent of {0}{reason}, but found {1}.", expected, Subject); + } + + if (Subject.Length < expected.Length) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected string to end with equivalent of {0}{reason}, but {1} is too short.", expected, Subject); + } + + Execute.Assertion + .ForCondition(Subject.EndsWith(expected, StringComparison.CurrentCultureIgnoreCase)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected string that ends with equivalent of {0}{reason}, but found {1}.", expected, Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string does not end with the specified , + /// including any leading or trailing whitespace, with the exception of the casing. + /// + /// The string that the subject is not expected to end with. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotEndWithEquivalentOf(string unexpected, string because = "", params object[] becauseArgs) + { + if (unexpected == null) + { + throw new NullReferenceException("Cannot compare end of string with ."); + } + + if (unexpected.Length == 0) + { + throw new ArgumentException("Cannot compare end of string with empty string."); + } + + if (Subject == null) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected string that does not end with equivalent of {0}, but found {1}.", unexpected, Subject); + } + + Execute.Assertion + .ForCondition(!Subject.EndsWith(unexpected, StringComparison.CurrentCultureIgnoreCase)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected string that does not end with equivalent of {0}{reason}, but found {1}.", unexpected, Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string contains another (fragment of a) string. + /// + /// + /// The (fragment of a) string that the current string should contain. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Contain(string expected, string because = "", params object[] becauseArgs) + { + if (expected == null) + { + throw new ArgumentException("Cannot assert string containment against ."); + } + + if (expected.Length == 0) + { + throw new ArgumentException("Cannot assert string containment against an empty string."); + } + + Execute.Assertion + .ForCondition(Contains(Subject, expected, StringComparison.Ordinal)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected string {0} to contain {1}{reason}.", Subject, expected); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string contains the specified , + /// including any leading or trailing whitespace, with the exception of the casing. + /// + /// The string that the subject is expected to contain. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint ContainEquivalentOf(string expected, string because = "", params object[] becauseArgs) + { + if (expected == null) + { + throw new ArgumentException("Cannot assert string containment against ."); + } + + if (expected.Length == 0) + { + throw new ArgumentException("Cannot assert string containment against an empty string."); + } + + Execute.Assertion + .ForCondition(Contains(Subject, expected, StringComparison.CurrentCultureIgnoreCase)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected string to contain equivalent of {0}{reason} but found {1}", expected, Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string does not contain another (fragment of a) string. + /// + /// + /// The (fragment of a) string that the current string should not contain. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotContain(string expected, string because = "", + params object[] becauseArgs) + { + if (expected == null) + { + throw new ArgumentException("Cannot assert string containment against ."); + } + + if (expected.Length == 0) + { + throw new ArgumentException("Cannot assert string containment against an empty string."); + } + + Execute.Assertion + .ForCondition(!Contains(Subject, expected, StringComparison.Ordinal)) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect string {0} to contain {1}{reason}.", Subject, expected); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string does not contain the specified string, + /// including any leading or trailing whitespace, with the exception of the casing. + /// + /// The string that the subject is not expected to contain. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotContainEquivalentOf(string unexpected, string because = "", + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!Contains(Subject, unexpected, StringComparison.CurrentCultureIgnoreCase)) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect string to contain equivalent of {0}{reason} but found {1}", unexpected, Subject); + + return new AndConstraint(this); + } + + static bool Contains(string actual, string expected, StringComparison comparison) + { + return (actual ?? "").IndexOf(expected ?? "", comparison) >= 0; + } + + /// + /// Asserts that a string is . + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeEmpty(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition((Subject != null) && (Subject.Length == 0)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected empty string{reason}, but found {0}.", Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string is not . + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeEmpty(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.Length > 0) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect empty string{reason}."); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string has the specified length. + /// + /// The expected length of the string + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveLength(int expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.Length == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected string with length {0}{reason}, but found string {1} with length {2}.", + expected, Subject, Subject.Length); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string is neither null nor . + /// + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AndConstraint NotBeNullOrEmpty(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!string.IsNullOrEmpty(Subject)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected string not to be or empty{reason}, but found {0}.", Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string is either null or . + /// + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AndConstraint BeNullOrEmpty(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(string.IsNullOrEmpty(Subject)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected string to be or empty{reason}, but found {0}.", Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string is neither null nor nor white space + /// + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AndConstraint NotBeNullOrWhiteSpace(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!IsBlank(Subject)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected string not to be or whitespace{reason}, but found {0}.", Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that a string is either null or or white space + /// + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public AndConstraint BeNullOrWhiteSpace(string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(IsBlank(Subject)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected string to be or whitespace{reason}, but found {0}.", Subject); + + return new AndConstraint(this); + } + + private static bool IsBlank(string value) + { + return (value == null) || string.IsNullOrEmpty(value.Trim()); + } + + /// + /// Returns the type of the subject the assertion applies on. + /// + protected override string Context + { + get { return "string"; } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/StringAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/StringAssertions.cs.meta new file mode 100644 index 0000000..35a4682 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/StringAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28fa804c1a05b474ab0dbf1a8e817678 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/StringEqualityValidator.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/StringEqualityValidator.cs new file mode 100644 index 0000000..3816b8e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/StringEqualityValidator.cs @@ -0,0 +1,68 @@ +using System; +using FluentAssertions.Common; + +namespace FluentAssertions.Primitives +{ + internal class StringEqualityValidator : StringValidator + { + private readonly StringComparison comparisonMode; + + public StringEqualityValidator(string subject, string expected, StringComparison comparisonMode, string because, + object[] becauseArgs) : + base(subject, expected, because, becauseArgs) + { + this.comparisonMode = comparisonMode; + } + + protected override bool ValidateAgainstSuperfluousWhitespace() + { + return assertion + .ForCondition(!((expected.Length > subject.Length) && expected.TrimEnd().Equals(subject, comparisonMode))) + .FailWith(ExpectationDescription + "{0}{reason}, but it misses some extra whitespace at the end.", expected) + .Then + .ForCondition(!((subject.Length > expected.Length) && subject.TrimEnd().Equals(expected, comparisonMode))) + .FailWith(ExpectationDescription + "{0}{reason}, but it has unexpected whitespace at the end.", expected) + .SourceSucceeded; + } + + protected override bool ValidateAgainstLengthDifferences() + { + return assertion + .ForCondition(subject.Length == expected.Length) + .FailWith( + ExpectationDescription + "{0} with a length of {1}{reason}, but {2} has a length of {3}.", + expected, expected.Length, subject, subject.Length) + .SourceSucceeded; + + } + + protected override void ValidateAgainstMismatch() + { + int indexOfMismatch = subject.IndexOfFirstMismatch(expected, comparisonMode); + if (indexOfMismatch != -1) + { + assertion.FailWith( + ExpectationDescription + "{0}{reason}, but {1} differs near " + subject.IndexedSegmentAt(indexOfMismatch) + ".", + expected, subject); + } + } + + protected override string ExpectationDescription + { + get + { + string predicateDescription = IgnoreCase ? "be equivalent to" : "be"; + return "Expected {context:string} to " + predicateDescription + " "; + } + } + + private bool IgnoreCase + { + get + { + return (comparisonMode == StringComparison.CurrentCultureIgnoreCase) || + (comparisonMode == StringComparison.OrdinalIgnoreCase); + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/StringEqualityValidator.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/StringEqualityValidator.cs.meta new file mode 100644 index 0000000..4129758 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/StringEqualityValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 45adad46e8ae8744982de2d4f2f2b7c5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/StringStartValidator.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/StringStartValidator.cs new file mode 100644 index 0000000..2ab724b --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/StringStartValidator.cs @@ -0,0 +1,56 @@ +using System; +using FluentAssertions.Common; + +namespace FluentAssertions.Primitives +{ + internal class StringStartValidator : StringValidator + { + private readonly StringComparison stringComparison; + + public StringStartValidator(string subject, string expected, StringComparison stringComparison, string because, + object[] becauseArgs) : + base(subject, expected, because, becauseArgs) + { + this.stringComparison = stringComparison; + } + + protected override string ExpectationDescription + { + get + { + string predicateDescription = IgnoreCase ? "start with equivalent of" : "start with"; + return "Expected {context:string} to " + predicateDescription + " "; + } + } + + private bool IgnoreCase + { + get + { + return (stringComparison == StringComparison.CurrentCultureIgnoreCase) || + (stringComparison == StringComparison.OrdinalIgnoreCase); + } + } + + protected override bool ValidateAgainstLengthDifferences() + { + return assertion + .ForCondition(subject.Length >= expected.Length) + .FailWith(ExpectationDescription + "{0}{reason}, but {1} is too short.", expected, subject) + .SourceSucceeded; + } + + protected override void ValidateAgainstMismatch() + { + bool isMismatch = !subject.StartsWith(expected, stringComparison); + if (isMismatch) + { + int indexOfMismatch = subject.IndexOfFirstMismatch(expected, stringComparison); + + assertion.FailWith( + ExpectationDescription + "{0}{reason}, but {1} differs near " + subject.IndexedSegmentAt(indexOfMismatch) + ".", + expected, subject); + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/StringStartValidator.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/StringStartValidator.cs.meta new file mode 100644 index 0000000..3c902d3 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/StringStartValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc89a45aa4f105b4086624f1f3ee9c9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/StringValidator.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/StringValidator.cs new file mode 100644 index 0000000..c932b74 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/StringValidator.cs @@ -0,0 +1,80 @@ +using System; +using FluentAssertions.Execution; + +namespace FluentAssertions.Primitives +{ + /// + /// Dedicated class for comparing two strings and generating consistent error messages. + /// + internal abstract class StringValidator + { + #region Private Definition + + protected readonly string subject; + protected readonly string expected; + protected AssertionScope assertion; + private const int HumanReadableLength = 8; + + #endregion + + protected StringValidator(string subject, string expected, string because, object[] becauseArgs) + { + assertion = Execute.Assertion.BecauseOf(because, becauseArgs); + + this.subject = subject; + this.expected = expected; + } + + public void Validate() + { + if ((expected != null) || (subject != null)) + { + if (ValidateAgainstNulls()) + { + if (IsLongOrMultiline(expected) || IsLongOrMultiline(subject)) + { + assertion = assertion.UsingLineBreaks; + } + + if (ValidateAgainstSuperfluousWhitespace()) + { + if (ValidateAgainstLengthDifferences()) + { + ValidateAgainstMismatch(); + } + } + } + } + } + + private bool ValidateAgainstNulls() + { + if (((expected == null) && (subject != null)) || ((expected != null) && (subject == null))) + { + assertion.FailWith(ExpectationDescription + "{0}{reason}, but found {1}.", expected, subject); + return false; + } + + return true; + } + + private bool IsLongOrMultiline(string value) + { + return (value.Length > HumanReadableLength) || value.Contains(Environment.NewLine); + } + + protected virtual bool ValidateAgainstSuperfluousWhitespace() + { + return true; + } + + protected virtual bool ValidateAgainstLengthDifferences() + { + return true; + } + + protected abstract void ValidateAgainstMismatch(); + + protected abstract string ExpectationDescription { get; } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/StringValidator.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/StringValidator.cs.meta new file mode 100644 index 0000000..a1dbf3b --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/StringValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2af5944e851c220479d91cb2b138f526 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/StringWildcardMatchingValidator.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/StringWildcardMatchingValidator.cs new file mode 100644 index 0000000..4a90185 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/StringWildcardMatchingValidator.cs @@ -0,0 +1,82 @@ +using System.Text; +using System.Text.RegularExpressions; + +using FluentAssertions.Common; + +namespace FluentAssertions.Primitives +{ + internal class StringWildcardMatchingValidator : StringValidator + { + public StringWildcardMatchingValidator(string subject, string expected, string because, object[] becauseArgs) + : base(subject, expected, because, becauseArgs) + { + } + + protected override void ValidateAgainstMismatch() + { + if (!IsMatch && !Negate) + { + assertion.FailWith(ExpectationDescription + "but {1} does not.", expected, subject); + } + + if (IsMatch && Negate) + { + assertion.FailWith(ExpectationDescription + "but {1} matches.", expected, subject); + } + } + + private bool IsMatch + { + get + { + var options = IgnoreCase ? RegexOptions.IgnoreCase : RegexOptions.None; + + return Regex.IsMatch(CleanNewLines(subject), ConvertWildcardToRegEx(CleanNewLines(expected)), options | RegexOptions.Singleline); + } + } + + private string ConvertWildcardToRegEx(string wildcardExpression) + { + return "^" + Regex.Escape(wildcardExpression).Replace("\\*", ".*").Replace("\\?", ".") + "$"; + } + + private string CleanNewLines(string input) + { + if (input == null) + { + return null; + } + + return IgnoreNewLineDifferences ? input.RemoveNewLines() : input; + } + + protected override string ExpectationDescription + { + get + { + var builder = new StringBuilder(); + builder.Append(Negate ? "Did not expect " : "Expected "); + builder.Append("{context:string}"); + builder.Append(IgnoreCase ? " to match the equivalent of" : " to match"); + builder.Append(" {0}{reason}, "); + + return builder.ToString(); + } + } + + /// + /// Gets or sets a value indicating whether the subject should not match the pattern. + /// + public bool Negate { get; set; } + + /// + /// Gets or sets a value indicating whether the matching process should ignore any casing difference. + /// + public bool IgnoreCase { get; set; } + + /// + /// Ignores the difference between environment newline differences + /// + public bool IgnoreNewLineDifferences { get; set; } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/StringWildcardMatchingValidator.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/StringWildcardMatchingValidator.cs.meta new file mode 100644 index 0000000..e466371 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/StringWildcardMatchingValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a2a734d490124c4a93aea12a6d60c9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/TimeSpanCondition.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/TimeSpanCondition.cs new file mode 100644 index 0000000..0d430eb --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/TimeSpanCondition.cs @@ -0,0 +1,11 @@ +namespace FluentAssertions.Primitives +{ + public enum TimeSpanCondition + { + MoreThan, + AtLeast, + Exactly, + Within, + LessThan + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/TimeSpanCondition.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/TimeSpanCondition.cs.meta new file mode 100644 index 0000000..91d2899 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/TimeSpanCondition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 91697937732de104bb47768eaf1c779c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/TimeSpanPredicate.cs b/Assets/Plugins/FluentAssertions/Core/Primitives/TimeSpanPredicate.cs new file mode 100644 index 0000000..9c2dffd --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/TimeSpanPredicate.cs @@ -0,0 +1,29 @@ +using System; + +namespace FluentAssertions.Primitives +{ + /// + /// Provides the logic and the display text for a . + /// + internal class TimeSpanPredicate + { + private readonly string displayText; + private readonly Func lambda; + + public TimeSpanPredicate(Func lambda, string displayText) + { + this.lambda = lambda; + this.displayText = displayText; + } + + public string DisplayText + { + get { return displayText; } + } + + public bool IsMatchedBy(TimeSpan actual, TimeSpan expected) + { + return lambda(actual, expected); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Primitives/TimeSpanPredicate.cs.meta b/Assets/Plugins/FluentAssertions/Core/Primitives/TimeSpanPredicate.cs.meta new file mode 100644 index 0000000..2eb5879 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Primitives/TimeSpanPredicate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de58b29dea8496a47b5b024425d032de +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Specialized.meta b/Assets/Plugins/FluentAssertions/Core/Specialized.meta new file mode 100644 index 0000000..582ab35 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Specialized.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e94fe0d068e9f8543add6a2a40bbc246 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Specialized/ActionAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Specialized/ActionAssertions.cs new file mode 100644 index 0000000..9728bee --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Specialized/ActionAssertions.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; + +using FluentAssertions.Execution; +using FluentAssertions.Primitives; + +namespace FluentAssertions.Specialized +{ + /// + /// Contains a number of methods to assert that an yields the expected result. + /// + [DebuggerNonUserCode] + public class ActionAssertions : ReferenceTypeAssertions + { + private readonly IExtractExceptions extractor; + + public ActionAssertions(Action subject, IExtractExceptions extractor) + { + this.extractor = extractor; + Subject = subject; + } + + /// + /// Asserts that the current throws an exception of type . + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public ExceptionAssertions ShouldThrow(string because = "", params object[] becauseArgs) + where TException : Exception + { + Exception actualException = InvokeSubjectWithInterception(); + IEnumerable expectedExceptions = extractor.OfType(actualException); + + Execute.Assertion + .ForCondition(actualException != null) + .BecauseOf(because, becauseArgs) + .FailWith("Expected a <{0}> to be thrown{reason}, but no exception was thrown.", typeof(TException)); + + Execute.Assertion + .ForCondition(expectedExceptions.Any()) + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected a <{0}> to be thrown{reason}, but found a <{1}>: {3}.", + typeof (TException), actualException.GetType(), + Environment.NewLine, + actualException); + + return new ExceptionAssertions(expectedExceptions); + } + + /// + /// Asserts that the current does not throw an exception of type . + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public void ShouldNotThrow(string because = "", params object[] becauseArgs) where TException : Exception + { + Exception actualException = InvokeSubjectWithInterception(); + IEnumerable expectedExceptions = extractor.OfType(actualException); + + if (actualException != null) + { + Execute.Assertion + .ForCondition(!expectedExceptions.Any()) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect {0}{reason}, but found {1}.", typeof (TException), actualException); + } + } + + /// + /// Asserts that the current does not throw any exception. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public void ShouldNotThrow(string because = "", params object[] becauseArgs) + { + try + { + Subject(); + } + catch (Exception exception) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect any exception{reason}, but found {0}", exception); + } + } + + private Exception InvokeSubjectWithInterception() + { + Exception actualException = null; + + try + { + Subject(); + } + catch (Exception exc) + { + actualException = exc; + } + return actualException; + } + + /// + /// Returns the type of the subject the assertion applies on. + /// + protected override string Context + { + get { return "action"; } + } + } +} diff --git a/Assets/Plugins/FluentAssertions/Core/Specialized/ActionAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Specialized/ActionAssertions.cs.meta new file mode 100644 index 0000000..1c3e5bc --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Specialized/ActionAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a173ebc50ba17274199c55eba79af6e1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Specialized/AsyncFunctionAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Specialized/AsyncFunctionAssertions.cs new file mode 100644 index 0000000..97692af --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Specialized/AsyncFunctionAssertions.cs @@ -0,0 +1,158 @@ +using System; +using System.Diagnostics; +using System.Linq; +using System.Threading.Tasks; + +using FluentAssertions.Execution; + +namespace FluentAssertions.Specialized +{ + /// + /// Contains a number of methods to assert that an asynchronous method yields the expected result. + /// + [DebuggerNonUserCode] + public class AsyncFunctionAssertions + { + private readonly IExtractExceptions extractor; + + public AsyncFunctionAssertions(Func subject, IExtractExceptions extractor) + { + this.extractor = extractor; + Subject = subject; + } + + /// + /// Gets the that is being asserted. + /// + public Func Subject { get; private set; } + + /// + /// Asserts that the current throws an exception of type . + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public ExceptionAssertions ShouldThrow(string because = "", params object[] becauseArgs) + where TException : Exception + { + Exception exception = InvokeSubjectWithInterception(); + var exceptions = extractor.OfType(exception); + + Execute.Assertion + .ForCondition(exception != null) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {0}{reason}, but no exception was thrown.", typeof(TException)); + + Execute.Assertion + .ForCondition(exceptions.Any()) + .BecauseOf(because, becauseArgs) + .FailWith("Expected {0}{reason}, but found {1}.", typeof(TException), exception); + + return new ExceptionAssertions(exceptions); + } + + /// + /// Asserts that the current does not throw any exception. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public void ShouldNotThrow(string because = "", params object[] becauseArgs) + { + try + { +#if NETSTANDARD1_3 + Task.Run(Subject).Wait(); +#else + Task.Factory.StartNew(() => Subject().Wait()).Wait(); +#endif + } + catch (Exception exception) + { + while (exception is AggregateException) + { + exception = exception.InnerException; + } + + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect any exception{reason}, but found a {0} with message {1}.", + exception.GetType(), exception.Message); + } + } + + /// + /// Asserts that the current does not throw an exception of type . + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public void ShouldNotThrow(string because = "", params object[] becauseArgs) + { + try + { +#if NETSTANDARD1_3 + Task.Run(Subject).Wait(); +#else + Task.Factory.StartNew(() => Subject().Wait()).Wait(); +#endif + } + catch (Exception exception) + { + while (exception is AggregateException) + { + exception = exception.InnerException; + } + + if (exception != null) + { + Execute.Assertion + .ForCondition(!(exception is TException)) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect {0}{reason}, but found one with message {1}.", + typeof(TException), exception.Message); + } + } + } + + private Exception InvokeSubjectWithInterception() + { + Exception actualException = null; + + try + { +#if NETSTANDARD1_3 + Task.Run(Subject).Wait(); +#else + Task.Factory.StartNew(() => Subject().Wait()).Wait(); +#endif + } + catch (Exception exception) + { + var ar = exception as AggregateException; + if (ar?.InnerException is AggregateException) + { + actualException = ar.InnerException; + } + else + { + actualException = exception; + } + } + + return actualException; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Specialized/AsyncFunctionAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Specialized/AsyncFunctionAssertions.cs.meta new file mode 100644 index 0000000..08ca98d --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Specialized/AsyncFunctionAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65f08ea38e75a4a49a21f62c0f5743bf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Specialized/ExceptionAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Specialized/ExceptionAssertions.cs new file mode 100644 index 0000000..d1649e9 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Specialized/ExceptionAssertions.cs @@ -0,0 +1,277 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Linq.Expressions; + +using FluentAssertions.Common; +using FluentAssertions.Equivalency; +using FluentAssertions.Execution; +using FluentAssertions.Formatting; +using FluentAssertions.Primitives; + +namespace FluentAssertions.Specialized +{ + /// + /// Contains a number of methods to assert that an is in the correct state. + /// + [DebuggerNonUserCode] + public class ExceptionAssertions : + ReferenceTypeAssertions, ExceptionAssertions> + where TException : Exception + { + #region Private Definitions + + private static readonly ExceptionMessageAssertion outerMessageAssertion = new ExceptionMessageAssertion(); + + private static readonly ExceptionMessageAssertion innerMessageAssertion = new ExceptionMessageAssertion + { + Context = "inner exception message" + }; + + #endregion + + public ExceptionAssertions(IEnumerable exceptions) + { + Subject = exceptions; + } + + /// + /// Gets the exception object of the exception thrown. + /// + public TException And + { + get { return SingleSubject; } + } + + /// + /// Gets the exception object of the exception thrown. + /// + public TException Which + { + get { return And; } + } + + /// + /// Returns the type of the subject the assertion applies on. + /// + protected override string Context + { + get { return "exception"; } + } + + /// + /// Asserts that the thrown exception has a message that matches + /// depending on the specified matching mode. + /// + /// + /// The expected message of the exception. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public virtual ExceptionAssertions WithMessage(string expectedMessage, string because = "", + params object[] becauseArgs) + { + AssertionScope assertion = Execute.Assertion.BecauseOf(because, becauseArgs).UsingLineBreaks; + + assertion + .ForCondition(Subject.Any()) + .FailWith("Expected exception with message {0}{reason}, but no exception was thrown.", expectedMessage); + + outerMessageAssertion.Execute(Subject.Select(exc => exc.Message).ToArray(), expectedMessage, because, becauseArgs); + + return this; + } + + /// + /// Asserts that the thrown exception contains an inner exception of type . + /// + /// The expected type of the inner exception. + public ExceptionAssertions WithInnerException() + { + return WithInnerException(null, null); + } + + /// + /// Asserts that the thrown exception contains an inner exception of the exact type (and not a derived exception type). + /// + /// The expected type of the inner exception. + public ExceptionAssertions WithInnerExceptionExactly() + { + return WithInnerExceptionExactly(null, null); + } + + /// + /// Asserts that the thrown exception contains an inner exception of type . + /// + /// The expected type of the inner exception. + /// The reason why the inner exception should be of the supplied type. + /// The parameters used when formatting the . + public virtual ExceptionAssertions WithInnerException(string because, + params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject != null) + .BecauseOf(because, becauseArgs) + .FailWith("Expected inner {0}{reason}, but no exception was thrown.", typeof(TInnerException)); + + Execute.Assertion + .ForCondition(Subject.Any(e => e.InnerException != null)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected inner {0}{reason}, but the thrown exception has no inner exception.", + typeof(TInnerException)); + + Execute.Assertion + .ForCondition(Subject.Any(e => e.InnerException is TInnerException)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected inner {0}{reason}, but found {1}.", typeof(TInnerException), SingleSubject.InnerException); + + return this; + } + + /// + /// Asserts that the thrown exception contains an inner exception of the exact type (and not a derived exception type). + /// + /// The expected type of the inner exception. + /// The reason why the inner exception should be of the supplied type. + /// The parameters used when formatting the . + public virtual ExceptionAssertions WithInnerExceptionExactly(string because, + params object[] becauseArgs) + { + WithInnerException(because, becauseArgs); + + Execute.Assertion + .ForCondition(Subject.Any(e => e.InnerException.GetType() == typeof(TInnerException))) + .BecauseOf(because, becauseArgs) + .FailWith("Expected inner {0}{reason}, but found {1}.", typeof(TInnerException), SingleSubject.InnerException); + + return this; + } + + /// + /// Asserts that the thrown exception contains an inner exception with the . + /// + /// The expected message of the inner exception. + /// + /// The reason why the message of the inner exception should match . + /// + /// The parameters used when formatting the . + public virtual ExceptionAssertions WithInnerMessage(string expectedInnerMessage, string because = "", + params object[] becauseArgs) + { + AssertionScope assertion = Execute.Assertion + .BecauseOf(because, becauseArgs) + .UsingLineBreaks; + + assertion + .ForCondition(Subject.Any()) + .FailWith("Expected inner exception{reason}, but no exception was thrown."); + + assertion + .ForCondition(Subject.Any(e => e.InnerException != null)) + .FailWith("Expected inner exception{reason}, but the thrown exception has no inner exception."); + + string[] subjectInnerMessage = Subject.Select(e => e.InnerException.Message).ToArray(); + + innerMessageAssertion.Execute(subjectInnerMessage, expectedInnerMessage, because, becauseArgs); + + return this; + } + + /// + /// Asserts that the exception matches a particular condition. + /// + /// + /// The condition that the exception must match. + /// + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public ExceptionAssertions Where(Expression> exceptionExpression, + string because = "", params object[] becauseArgs) + { + Func condition = exceptionExpression.Compile(); + Execute.Assertion + .ForCondition(condition(SingleSubject)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected exception where {0}{reason}, but the condition was not met by:\r\n\r\n{1}", + exceptionExpression.Body, Subject); + + return this; + } + + private TException SingleSubject + { + get + { + if (Subject.Count() > 1) + { + string thrownExceptions = BuildExceptionsString(Subject); + Services.ThrowException( + string.Format( + "More than one exception was thrown. FluentAssertions cannot determine which Exception was meant.{0}{1}", + Environment.NewLine, thrownExceptions)); + } + + return Subject.Single(); + } + } + + private static string BuildExceptionsString(IEnumerable exceptions) + { + return string.Join(Environment.NewLine, + exceptions.Select( + exception => + "\t" + Formatter.ToString(exception))); + } + + private class ExceptionMessageAssertion + { + public ExceptionMessageAssertion() + { + Context = "exception message"; + } + + public string Context { get; set; } + + public void Execute(IEnumerable messages, string expectation, string because, params object[] becauseArgs) + { + using (new AssertionScope()) + { + var results = new AssertionResultSet(); + + foreach (string message in messages) + { + using (var scope = new AssertionScope()) + { + scope.AddNonReportable("context", Context); + + message.Should().MatchEquivalentOf(expectation, because, becauseArgs); + + results.AddSet(message, scope.Discard()); + } + + if (results.ContainsSuccessfulSet) + { + break; + } + } + + foreach (string failure in results.SelectClosestMatchFor()) + { + AssertionScope.Current.FailWith(failure.Replace("{", "{{").Replace("}", "}}")); + } + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Specialized/ExceptionAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Specialized/ExceptionAssertions.cs.meta new file mode 100644 index 0000000..b5e3bf0 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Specialized/ExceptionAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c4d3651b255c924bac9461db7916270 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Specialized/IExtractExceptions.cs b/Assets/Plugins/FluentAssertions/Core/Specialized/IExtractExceptions.cs new file mode 100644 index 0000000..dacb371 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Specialized/IExtractExceptions.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; + +namespace FluentAssertions.Specialized +{ + public interface IExtractExceptions + { + IEnumerable OfType(Exception actualException) where T : Exception; + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Specialized/IExtractExceptions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Specialized/IExtractExceptions.cs.meta new file mode 100644 index 0000000..02997a8 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Specialized/IExtractExceptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5963a1713fdf019449e17eaad5e32918 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/TimeSpanConversionExtensions.cs b/Assets/Plugins/FluentAssertions/Core/TimeSpanConversionExtensions.cs new file mode 100644 index 0000000..8045503 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/TimeSpanConversionExtensions.cs @@ -0,0 +1,120 @@ +using System; +using FluentAssertions.Common; + +namespace FluentAssertions +{ + /// + /// Extension methods on to allow for a more fluent way of specifying a . + /// + /// + /// Instead of
    + ///
    + /// TimeSpan.FromHours(12)
    + ///
    + /// you can write
    + ///
    + /// 12.Hours()
    + ///
    + /// Or even
    + ///
    + /// 12.Hours().And(30.Minutes()). + ///
    + /// + public static class TimeSpanConversionExtensions + { + /// + /// Returns a based on a number of ticks. + /// + public static TimeSpan Ticks(this int ticks) + { + return TimeSpan.FromTicks(ticks); + } + + /// + /// Returns a based on a number of milliseconds. + /// + public static TimeSpan Milliseconds(this int milliseconds) + { + return TimeSpan.FromMilliseconds(milliseconds); + } + + /// + /// Returns a based on a number of seconds. + /// + public static TimeSpan Seconds(this int seconds) + { + return TimeSpan.FromSeconds(seconds); + } + + /// + /// Returns a based on a number of seconds, and add the specified + /// . + /// + public static TimeSpan Seconds(this int seconds, TimeSpan offset) + { + return TimeSpan.FromSeconds(seconds).Add(offset); + } + + /// + /// Returns a based on a number of minutes. + /// + public static TimeSpan Minutes(this int minutes) + { + return TimeSpan.FromMinutes(minutes); + } + + /// + /// Returns a based on a number of minutes, and add the specified + /// . + /// + public static TimeSpan Minutes(this int minutes, TimeSpan offset) + { + return TimeSpan.FromMinutes(minutes).Add(offset); + } + + /// + /// Returns a based on a number of hours. + /// + public static TimeSpan Hours(this int hours) + { + return TimeSpan.FromHours(hours); + } + + /// + /// Returns a based on a number of hours, and add the specified + /// . + /// + public static TimeSpan Hours(this int hours, TimeSpan offset) + { + return TimeSpan.FromHours(hours).Add(offset); + } + + /// + /// Returns a based on a number of days. + /// + public static TimeSpan Days(this int days) + { + return TimeSpan.FromDays(days); + } + + /// + /// Returns a based on a number of days, and add the specified + /// . + /// + public static TimeSpan Days(this int days, TimeSpan offset) + { + return TimeSpan.FromDays(days).Add(offset); + } + + /// + /// Convenience method for chaining multiple calls to the methods provided by this class. + /// + /// + /// 23.Hours().And(59.Minutes()) + /// + public static TimeSpan And(this TimeSpan sourceTime, TimeSpan offset) + { + return sourceTime.Add(offset); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/TimeSpanConversionExtensions.cs.meta b/Assets/Plugins/FluentAssertions/Core/TimeSpanConversionExtensions.cs.meta new file mode 100644 index 0000000..570892e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/TimeSpanConversionExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12ca8999a2e2d6b4ab1f9050eea6317f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Tracing.meta b/Assets/Plugins/FluentAssertions/Core/Tracing.meta new file mode 100644 index 0000000..a7cfe4f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Tracing.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e526810b3acf1f546a5634599c102e6b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Tracing/ITraceWriter.cs b/Assets/Plugins/FluentAssertions/Core/Tracing/ITraceWriter.cs new file mode 100644 index 0000000..74534b0 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Tracing/ITraceWriter.cs @@ -0,0 +1,14 @@ +using System; + +namespace FluentAssertions.Equivalency +{ + /// + /// Defines the contract for an object that is used by Fluent Assertions to provide tracing in the equivalency API + /// + public interface ITraceWriter + { + void AddSingle(string trace); + IDisposable AddBlock(string trace); + string ToString(); + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Tracing/ITraceWriter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Tracing/ITraceWriter.cs.meta new file mode 100644 index 0000000..e9b04a5 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Tracing/ITraceWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 968f37afc0d5f084387bf4f9f6d7eb0c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Tracing/StringBuilderTraceWriter.cs b/Assets/Plugins/FluentAssertions/Core/Tracing/StringBuilderTraceWriter.cs new file mode 100644 index 0000000..15b5770 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Tracing/StringBuilderTraceWriter.cs @@ -0,0 +1,42 @@ +using System; +using System.Text; + +namespace FluentAssertions.Equivalency +{ + public class StringBuilderTraceWriter : ITraceWriter + { + private readonly StringBuilder builder = new StringBuilder(); + private int depth = 1; + + public void AddSingle(string trace) + { + WriteLine(trace); + } + + public IDisposable AddBlock(string trace) + { + WriteLine(trace); + WriteLine("{"); + depth++; + + return new Disposable(() => + { + depth--; + WriteLine("}"); + }); + } + + private void WriteLine(string trace) + { + foreach (string traceLine in trace.Split(new[] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)) + { + builder.AppendLine(new string(' ', depth * 2) + traceLine); + } + } + + public override string ToString() + { + return builder.ToString(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Tracing/StringBuilderTraceWriter.cs.meta b/Assets/Plugins/FluentAssertions/Core/Tracing/StringBuilderTraceWriter.cs.meta new file mode 100644 index 0000000..41ff505 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Tracing/StringBuilderTraceWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 21082576ed8b84a49b8efd7d81538ae6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/TypeEnumerableExtensions.cs b/Assets/Plugins/FluentAssertions/Core/TypeEnumerableExtensions.cs new file mode 100644 index 0000000..d1a8dea --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/TypeEnumerableExtensions.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; + +using FluentAssertions.Types; + +namespace FluentAssertions +{ + /// + /// Extension methods for filtering a collection of types. + /// + public static class TypeEnumerableExtensions + { + /// + /// Filters to only include types decorated with a particular attribute. + /// + public static IEnumerable ThatAreDecoratedWith(this IEnumerable types) + { + return new TypeSelector(types).ThatAreDecoratedWith(); + } + + /// + /// Filters to only include types where the namespace of type is exactly . + /// + public static IEnumerable ThatAreInNamespace(this IEnumerable types, string @namespace) + { + return new TypeSelector(types).ThatAreInNamespace(@namespace); + } + + /// + /// Filters to only include types where the namespace of type is starts with . + /// + public static IEnumerable ThatAreUnderNamespace(this IEnumerable types, string @namespace) + { + return new TypeSelector(types).ThatAreUnderNamespace(@namespace); + } + + /// + /// Filters to only include types that subclass the specified type, but NOT the same type. + /// + public static IEnumerable ThatDeriveFrom(this IEnumerable types) + { + return new TypeSelector(types).ThatDeriveFrom(); + } + + /// + /// Determines whether a type implements an interface (but is not the interface itself). + /// + public static IEnumerable ThatImplement(this IEnumerable types) + { + return new TypeSelector(types).ThatImplement(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/TypeEnumerableExtensions.cs.meta b/Assets/Plugins/FluentAssertions/Core/TypeEnumerableExtensions.cs.meta new file mode 100644 index 0000000..289341a --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/TypeEnumerableExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12f702f6e235ce4468afb91ba0c65563 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/TypeExtensions.cs b/Assets/Plugins/FluentAssertions/Core/TypeExtensions.cs new file mode 100644 index 0000000..558ae2d --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/TypeExtensions.cs @@ -0,0 +1,56 @@ +using System; +using System.Diagnostics; +using System.Linq; +using System.Reflection; + +using FluentAssertions.Types; + +namespace FluentAssertions +{ + /// + /// Extension methods for getting method and property selectors for a type. + /// + [DebuggerNonUserCode] + public static class TypeExtensions + { + /// + /// Returns the types that are visible outside the specified . + /// + public static TypeSelector Types(this Assembly assembly) + { + return new TypeSelector(assembly.GetTypes()); + } + + /// + /// Returns a method selector for the current . + /// + public static MethodInfoSelector Methods(this Type type) + { + return new MethodInfoSelector(type); + } + + /// + /// Returns a method selector for the current . + /// + public static MethodInfoSelector Methods(this TypeSelector typeSelector) + { + return new MethodInfoSelector(typeSelector.ToList()); + } + + /// + /// Returns a property selector for the current . + /// + public static PropertyInfoSelector Properties(this Type type) + { + return new PropertyInfoSelector(type); + } + + /// + /// Returns a property selector for the current . + /// + public static PropertyInfoSelector Properties(this TypeSelector typeSelector) + { + return new PropertyInfoSelector(typeSelector.ToList()); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/TypeExtensions.cs.meta b/Assets/Plugins/FluentAssertions/Core/TypeExtensions.cs.meta new file mode 100644 index 0000000..105e2de --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/TypeExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0262ae43a2ee20a44b04ffa7fa7f1733 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Types.meta b/Assets/Plugins/FluentAssertions/Core/Types.meta new file mode 100644 index 0000000..3c07ff6 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ed64a45f05814724e9bf8cf9309a1117 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Types/AllTypes.cs b/Assets/Plugins/FluentAssertions/Core/Types/AllTypes.cs new file mode 100644 index 0000000..8433419 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/AllTypes.cs @@ -0,0 +1,26 @@ +using System.Reflection; + +namespace FluentAssertions.Types +{ + /// + /// Static class that allows for a 'fluent' selection of the types from an . + /// + /// + /// AllTypes.From(myAssembly)
    + /// .ThatImplement<ISomeInterface>
    + /// .Should()
    + /// .BeDecoratedWith<SomeAttribute>() + ///
    + public static class AllTypes + { + /// + /// Returns a for selecting the types that are visible outside the + /// specified . + /// + /// The assembly from which to select the types. + public static TypeSelector From(Assembly assembly) + { + return assembly.Types(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Types/AllTypes.cs.meta b/Assets/Plugins/FluentAssertions/Core/Types/AllTypes.cs.meta new file mode 100644 index 0000000..683276e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/AllTypes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9f2a272f03f06af488b713fdc425b683 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Types/ConstructorInfoAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Types/ConstructorInfoAssertions.cs new file mode 100644 index 0000000..5897607 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/ConstructorInfoAssertions.cs @@ -0,0 +1,38 @@ +using System; +using System.Diagnostics; +using System.Reflection; + +namespace FluentAssertions.Types +{ + /// + /// Contains a number of methods to assert that a is in the expected state. + /// + [DebuggerNonUserCode] + public class ConstructorInfoAssertions : MethodBaseAssertions + { + /// + /// Initializes a new instance of the class. + /// + /// The constructorInfo from which to select properties. + public ConstructorInfoAssertions(ConstructorInfo constructorInfo) + { + Subject = constructorInfo; + } + + internal static string GetDescriptionFor(ConstructorInfo constructorInfo) + { + return String.Format("{0}({1})", + constructorInfo.DeclaringType, GetParameterString(constructorInfo)); + } + + internal override string SubjectDescription + { + get { return GetDescriptionFor(Subject); } + } + + protected override string Context + { + get { return "constructor"; } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Types/ConstructorInfoAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Types/ConstructorInfoAssertions.cs.meta new file mode 100644 index 0000000..3b0d0f9 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/ConstructorInfoAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f31a2fd320a8ca34eb4f97d8a53912f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Types/MemberInfoAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Types/MemberInfoAssertions.cs new file mode 100644 index 0000000..b2e5586 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/MemberInfoAssertions.cs @@ -0,0 +1,134 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using FluentAssertions.Common; +using FluentAssertions.Execution; +using FluentAssertions.Primitives; + +namespace FluentAssertions.Types +{ + /// + /// Contains a number of methods to assert that a is in the expected state. + /// + [DebuggerNonUserCode] + public abstract class MemberInfoAssertions : ReferenceTypeAssertions + where TSubject : MemberInfo + where TAssertions : MemberInfoAssertions + { + /// + /// Asserts that the selected member is decorated with the specified . + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndWhichConstraint, TAttribute> BeDecoratedWith( + string because = "", params object[] becauseArgs) + where TAttribute : Attribute + { + return BeDecoratedWith(attr => true, because, becauseArgs); + } + + /// + /// Asserts that the selected member is not decorated with the specified . + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeDecoratedWith( + string because = "", params object[] becauseArgs) + where TAttribute : Attribute + { + return NotBeDecoratedWith(attr => true, because, becauseArgs); + } + + /// + /// Asserts that the selected member is decorated with an attribute of type + /// that matches the specified . + /// + /// + /// The predicate that the attribute must match. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndWhichConstraint, TAttribute> BeDecoratedWith( + Expression> isMatchingAttributePredicate, + string because = "", params object[] becauseArgs) + where TAttribute : Attribute + { + string failureMessage = String.Format("Expected {0} {1}" + + " to be decorated with {2}{{reason}}, but that attribute was not found.", + Context, SubjectDescription, typeof (TAttribute)); + + IEnumerable attributes = Subject.GetMatchingAttributes(isMatchingAttributePredicate); + + Execute.Assertion + .ForCondition(attributes.Any()) + .BecauseOf(because, becauseArgs) + .FailWith(failureMessage); + + return new AndWhichConstraint, TAttribute>(this, attributes); + } + + /// + /// Asserts that the selected member is not decorated with an attribute of type + /// that matches the specified . + /// + /// + /// The predicate that the attribute must match. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeDecoratedWith( + Expression> isMatchingAttributePredicate, + string because = "", params object[] becauseArgs) + where TAttribute : Attribute + { + string failureMessage = String.Format("Expected {0} {1}" + + " to not be decorated with {2}{{reason}}, but that attribute was found.", + Context, SubjectDescription, typeof(TAttribute)); + + IEnumerable attributes = Subject.GetMatchingAttributes(isMatchingAttributePredicate); + + Execute.Assertion + .ForCondition(!attributes.Any()) + .BecauseOf(because, becauseArgs) + .FailWith(failureMessage); + + return new AndConstraint((TAssertions)this); + } + + protected override string Context + { + get { return "member"; } + } + + internal virtual string SubjectDescription + { + get + { + return String.Format("{0}.{1}", Subject.DeclaringType, Subject.Name); + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Types/MemberInfoAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Types/MemberInfoAssertions.cs.meta new file mode 100644 index 0000000..63c365e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/MemberInfoAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 071d5c9bc96c46f4bb62c638e8d143e9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Types/MethodBaseAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Types/MethodBaseAssertions.cs new file mode 100644 index 0000000..a5c6002 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/MethodBaseAssertions.cs @@ -0,0 +1,54 @@ +using System; +using System.Diagnostics; +using System.Linq; +using System.Reflection; +using FluentAssertions.Common; +using FluentAssertions.Execution; + +namespace FluentAssertions.Types +{ + /// + /// Contains a number of methods to assert that a is in the expected state. + /// + [DebuggerNonUserCode] + public abstract class MethodBaseAssertions : MemberInfoAssertions + where TSubject : MethodBase + where TAssertions : MethodBaseAssertions + { + /// + /// Asserts that the selected member has the specified C# . + /// + /// The expected C# access modifier. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveAccessModifier( + CSharpAccessModifier accessModifier, string because = "", params object[] becauseArgs) + { + Execute.Assertion.ForCondition(accessModifier == Subject.GetCSharpAccessModifier()) + .BecauseOf(because, becauseArgs) + .FailWith("Expected method " + Subject.Name + " to be {0}{reason}, but it is {1}.", + accessModifier, Subject.GetCSharpAccessModifier()); + + return new AndConstraint((TAssertions)this); + } + + protected override string Context + { + get { return "methodBase"; } + } + + internal static string GetParameterString(MethodBase methodBase) + { + var parameterTypes = methodBase.GetParameters().Select(p => p.ParameterType); + + return !parameterTypes.Any() + ? String.Empty + : parameterTypes.Select(p => p.FullName).Aggregate((p, c) => p + ", " + c); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Types/MethodBaseAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Types/MethodBaseAssertions.cs.meta new file mode 100644 index 0000000..ecc07f4 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/MethodBaseAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cbb9f410b39aa7f4f91528a2147a6480 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Types/MethodInfoAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Types/MethodInfoAssertions.cs new file mode 100644 index 0000000..bfd6c6c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/MethodInfoAssertions.cs @@ -0,0 +1,142 @@ +using System; +using System.Diagnostics; +using System.Reflection; +using FluentAssertions.Common; +using FluentAssertions.Execution; + +namespace FluentAssertions.Types +{ + /// + /// Contains a number of methods to assert that a is in the expected state. + /// + [DebuggerNonUserCode] + public class MethodInfoAssertions : + MethodBaseAssertions + { + public MethodInfoAssertions(MethodInfo methodInfo) + { + Subject = methodInfo; + } + + /// + /// Asserts that the selected method is virtual. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeVirtual( + string because = "", params object[] becauseArgs) + { + string failureMessage = "Expected method " + + SubjectDescription + + " to be virtual{reason}, but it is not virtual."; + + Execute.Assertion + .ForCondition(!Subject.IsNonVirtual()) + .BecauseOf(because, becauseArgs) + .FailWith(failureMessage); + + return new AndConstraint(this); + } + + /// + /// Asserts that the selected method is async. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndConstraint BeAsync(string because = "", params object[] becauseArgs) + { + string failureMessage = "Expected subject " + + SubjectDescription + + " to be async{reason}, but it is not."; + + Execute.Assertion + .ForCondition(Subject.IsAsync()) + .BecauseOf(because, becauseArgs) + .FailWith(failureMessage); + + return new AndConstraint(this); + } + + /// + /// Asserts that the selected MethodInfo returns void. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> ReturnVoid(string because = "", params object[] becauseArgs) + { + Execute.Assertion.ForCondition(typeof(void) == Subject.ReturnType) + .BecauseOf(because, becauseArgs) + .FailWith("Expected the return type of method " + Subject.Name + " to be void {reason}, but it is {0}.", + Subject.ReturnType.FullName); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the selected MethodInfo returns . + /// + /// The expected return type. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> Return(Type returnType, string because = "", params object[] becauseArgs) + { + Execute.Assertion.ForCondition(returnType == Subject.ReturnType) + .BecauseOf(because, becauseArgs) + .FailWith("Expected the return type of method " + Subject.Name + " to be {0} {reason}, but it is {1}.", + returnType, Subject.ReturnType.FullName); + + return new AndConstraint>(this); + } + + /// + /// Asserts that the selected MethodInfo returns . + /// + /// The expected return type. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint> Return(string because = "", params object[] becauseArgs) + { + return Return(typeof (TReturn), because, becauseArgs); + } + + + internal static string GetDescriptionFor(MethodInfo method) + { + string returnTypeName = method.ReturnType.Name; + + return String.Format("{0} {1}.{2}", returnTypeName, + method.DeclaringType, method.Name); + } + + internal override string SubjectDescription + { + get { return GetDescriptionFor(Subject); } + } + + protected override string Context + { + get { return "method"; } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Types/MethodInfoAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Types/MethodInfoAssertions.cs.meta new file mode 100644 index 0000000..7d3143a --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/MethodInfoAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19949ed99ba69b0498e1335a6ffea497 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Types/MethodInfoSelector.cs b/Assets/Plugins/FluentAssertions/Core/Types/MethodInfoSelector.cs new file mode 100644 index 0000000..ad88a09 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/MethodInfoSelector.cs @@ -0,0 +1,118 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +namespace FluentAssertions.Types +{ + /// + /// Allows for fluent selection of methods of a type through reflection. + /// + public class MethodInfoSelector : IEnumerable + { + private IEnumerable selectedMethods = new List(); + + /// + /// Initializes a new instance of the class. + /// + /// The type from which to select methods. + public MethodInfoSelector(Type type) + : this(new[]{type}) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The types from which to select methods. + public MethodInfoSelector(IEnumerable types) + { + selectedMethods = types.SelectMany(t => t + .GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .Where(method => !HasSpecialName(method))); + } + + /// + /// Only select the methods that are public or internal. + /// + public MethodInfoSelector ThatArePublicOrInternal + { + get + { + selectedMethods = selectedMethods.Where(method => method.IsPublic || method.IsAssembly); + return this; + } + } + + /// + /// Only select the methods without a return value + /// + public MethodInfoSelector ThatReturnVoid + { + get + { + selectedMethods = selectedMethods.Where(method => method.ReturnType == typeof (void)); + return this; + } + } + + /// + /// Only select the methods that return the specified type + /// + public MethodInfoSelector ThatReturn() + { + selectedMethods = selectedMethods.Where(method => method.ReturnType == typeof(TReturn)); + return this; + } + + /// + /// Only select the methods that are decorated with an attribute of the specified type. + /// + public MethodInfoSelector ThatAreDecoratedWith() + { + selectedMethods = selectedMethods.Where(method => method.GetCustomAttributes(false).OfType().Any()); + return this; + } + + /// + /// The resulting objects. + /// + public MethodInfo[] ToArray() + { + return selectedMethods.ToArray(); + } + + /// + /// Determines whether the specified method has a special name (like properties and events). + /// + private bool HasSpecialName(MethodInfo method) + { + return (method.Attributes & MethodAttributes.SpecialName) == MethodAttributes.SpecialName; + } + + /// + /// Returns an enumerator that iterates through the collection. + /// + /// + /// A that can be used to iterate through the collection. + /// + /// 1 + public IEnumerator GetEnumerator() + { + return selectedMethods.GetEnumerator(); + } + + /// + /// Returns an enumerator that iterates through a collection. + /// + /// + /// An object that can be used to iterate through the collection. + /// + /// 2 + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Types/MethodInfoSelector.cs.meta b/Assets/Plugins/FluentAssertions/Core/Types/MethodInfoSelector.cs.meta new file mode 100644 index 0000000..e714ec6 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/MethodInfoSelector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c34b50aa3cc647d4180cbcb64c5f4260 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Types/MethodInfoSelectorAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Types/MethodInfoSelectorAssertions.cs new file mode 100644 index 0000000..e0e1f5d --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/MethodInfoSelectorAssertions.cs @@ -0,0 +1,136 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using FluentAssertions.Common; +using FluentAssertions.Execution; + +namespace FluentAssertions.Types +{ + /// + /// Contains assertions for the objects returned by the parent . + /// + [DebuggerNonUserCode] + public class MethodInfoSelectorAssertions + { + /// + /// Initializes a new instance of the class. + /// + /// The methods to assert. + public MethodInfoSelectorAssertions(IEnumerable methods) + { + SubjectMethods = methods; + } + + /// + /// Gets the object which value is being asserted. + /// + public IEnumerable SubjectMethods { get; private set; } + + /// + /// Asserts that the selected methods are virtual. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeVirtual(string because = "", params object[] becauseArgs) + { + IEnumerable nonVirtualMethods = GetAllNonVirtualMethodsFromSelection(); + + string failureMessage = + "Expected all selected methods to be virtual{reason}, but the following methods are not virtual:\r\n" + + GetDescriptionsFor(nonVirtualMethods); + + Execute.Assertion + .ForCondition(!nonVirtualMethods.Any()) + .BecauseOf(because, becauseArgs) + .FailWith(failureMessage); + + return new AndConstraint(this); + } + + private MethodInfo[] GetAllNonVirtualMethodsFromSelection() + { + var query = + from method in SubjectMethods + where method.IsNonVirtual() + select method; + + return query.ToArray(); + } + + /// + /// Asserts that the selected methods are decorated with the specified . + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeDecoratedWith(string because = "", params object[] becauseArgs) + where TAttribute : Attribute + { + return BeDecoratedWith(attr => true, because, becauseArgs); + } + + /// + /// Asserts that the selected methods are decorated with an attribute of type + /// that matches the specified . + /// + /// + /// The predicate that the attribute must match. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeDecoratedWith( + Expression> isMatchingAttributePredicate, string because = "", params object[] becauseArgs) + where TAttribute : Attribute + { + IEnumerable methodsWithoutAttribute = GetMethodsWithout(isMatchingAttributePredicate); + + string failureMessage = + "Expected all selected methods to be decorated with {0}{reason}, but the following methods are not:\r\n" + + GetDescriptionsFor(methodsWithoutAttribute); + + Execute.Assertion + .ForCondition(!methodsWithoutAttribute.Any()) + .BecauseOf(because, becauseArgs) + .FailWith(failureMessage, typeof(TAttribute)); + + return new AndConstraint(this); + } + + private MethodInfo[] GetMethodsWithout(Expression> isMatchingPredicate) + where TAttribute : Attribute + { + return SubjectMethods.Where(method => !method.HasMatchingAttribute(isMatchingPredicate)).ToArray(); + } + + private static string GetDescriptionsFor(IEnumerable methods) + { + return string.Join(Environment.NewLine, + methods.Select(MethodInfoAssertions.GetDescriptionFor).ToArray()); + } + + /// + /// Returns the type of the subject the assertion applies on. + /// + protected string Context + { + get { return "method"; } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Types/MethodInfoSelectorAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Types/MethodInfoSelectorAssertions.cs.meta new file mode 100644 index 0000000..31777bb --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/MethodInfoSelectorAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd43386a45ad3c146afa93d989761f01 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoAssertions.cs new file mode 100644 index 0000000..a06b4b4 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoAssertions.cs @@ -0,0 +1,232 @@ +using System; +using System.Diagnostics; +using System.Reflection; +using FluentAssertions.Common; +using FluentAssertions.Execution; + +namespace FluentAssertions.Types +{ + /// + /// Contains a number of methods to assert that a is in the expected state. + /// + [DebuggerNonUserCode] + public class PropertyInfoAssertions : + MemberInfoAssertions + { + public PropertyInfoAssertions(PropertyInfo propertyInfo) + { + Subject = propertyInfo; + } + + /// + /// Asserts that the selected property is virtual. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeVirtual( + string because = "", params object[] becauseArgs) + { + string failureMessage = "Expected property " + + GetDescriptionFor(Subject) + + " to be virtual{reason}, but it is not."; + + Execute.Assertion + .ForCondition(Subject.IsVirtual()) + .BecauseOf(because, becauseArgs) + .FailWith(failureMessage); + + return new AndConstraint(this); + } + + /// + /// Asserts that the selected property has a setter. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeWritable( + string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.CanWrite) + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected {context:property} {0} to have a setter{reason}.", + Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that the selected property has a setter with the specified C# access modifier. + /// + /// The expected C# access modifier. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeWritable(CSharpAccessModifier accessModifier, string because = "", params object[] becauseArgs) + { + Subject.Should().BeWritable(because, becauseArgs); + + Subject.GetSetMethod(true).Should().HaveAccessModifier(accessModifier, because, becauseArgs); + + return new AndConstraint(this); + } + + /// + /// Asserts that the selected property does not have a setter. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeWritable( + string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!Subject.CanWrite) + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected {context:property} {0} not to have a setter{reason}.", + Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that the selected property has a getter. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeReadable(string because = "", params object[] becauseArgs) + { + Execute.Assertion.ForCondition(Subject.CanRead) + .BecauseOf(because, becauseArgs) + .FailWith("Expected property " + Subject.Name + " to have a getter{reason}, but it does not."); + + return new AndConstraint(this); + } + + /// + /// Asserts that the selected property has a getter with the specified C# access modifier. + /// + /// The expected C# access modifier. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeReadable(CSharpAccessModifier accessModifier, string because = "", params object[] becauseArgs) + { + Subject.Should().BeReadable(because, becauseArgs); + + Subject.GetGetMethod(true).Should().HaveAccessModifier(accessModifier, because, becauseArgs); + + return new AndConstraint(this); + } + + /// + /// Asserts that the selected property does not have a getter. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeReadable( + string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!Subject.CanRead) + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected {context:property} {0} not to have a getter{reason}.", + Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that the selected property returns a specified type. + /// + /// The expected type of the property. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Return(Type propertyType, + string because = "", params object[] becauseArgs) + { + Execute.Assertion.ForCondition(Subject.PropertyType == propertyType) + .BecauseOf(because, becauseArgs) + .FailWith("Expected Type of property " + Subject.Name + " to be {0}{reason}, but it is {1}.", propertyType, Subject.PropertyType); + + + return new AndConstraint(this); + } + + /// + /// Asserts that the selected PropertyInfo returns . + /// + /// The expected return type. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Return(string because = "", params object[] becauseArgs) + { + return Return(typeof(TReturn), because, becauseArgs); + } + + internal static string GetDescriptionFor(PropertyInfo property) + { + string propTypeName = property.PropertyType.Name; + return String.Format("{0} {1}.{2}", propTypeName, + property.DeclaringType, property.Name); + } + + internal override string SubjectDescription + { + get { return GetDescriptionFor(Subject); } + } + + /// + /// Returns the type of the subject the assertion applies on. + /// + protected override string Context + { + get { return "property"; } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoAssertions.cs.meta new file mode 100644 index 0000000..112a29d --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f4fbbe01ec476ff4899f875bbe920ff6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoSelector.cs b/Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoSelector.cs new file mode 100644 index 0000000..ec7c14b --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoSelector.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +namespace FluentAssertions.Types +{ + /// + /// Allows for fluent selection of properties of a type through reflection. + /// + public class PropertyInfoSelector : IEnumerable + { + private IEnumerable selectedProperties = new List(); + + /// + /// Initializes a new instance of the class. + /// + /// The type from which to select properties. + public PropertyInfoSelector(Type type) + : this(new [] {type}) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The types from which to select properties. + public PropertyInfoSelector(IEnumerable types) + { + selectedProperties = types.SelectMany(t => t + .GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)); + } + + /// + /// Only select the properties that have a public or internal getter. + /// + public PropertyInfoSelector ThatArePublicOrInternal + { + get + { + selectedProperties = selectedProperties.Where(property => + { + MethodInfo getter = property.GetGetMethod(true); + return ((getter != null) && (getter.IsPublic || getter.IsAssembly)); + }); + + return this; + } + } + + /// + /// Only select the properties that are decorated with an attribute of the specified type. + /// + public PropertyInfoSelector ThatAreDecoratedWith() + { + selectedProperties = selectedProperties.Where(property => property.GetCustomAttributes(false).OfType().Any()); + return this; + } + + /// + /// Only select the properties that return the specified type + /// + public PropertyInfoSelector OfType() + { + selectedProperties = selectedProperties.Where(property => property.PropertyType == typeof(TReturn)); + return this; + } + + /// + /// The resulting objects. + /// + public PropertyInfo[] ToArray() + { + return selectedProperties.ToArray(); + } + + /// + /// Returns an enumerator that iterates through the collection. + /// + /// + /// A that can be used to iterate through the collection. + /// + /// 1 + public IEnumerator GetEnumerator() + { + return selectedProperties.GetEnumerator(); + } + + /// + /// Returns an enumerator that iterates through a collection. + /// + /// + /// An object that can be used to iterate through the collection. + /// + /// 2 + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoSelector.cs.meta b/Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoSelector.cs.meta new file mode 100644 index 0000000..916cd25 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoSelector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5b2823c5299d7a74ba24485150cc6348 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoSelectorAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoSelectorAssertions.cs new file mode 100644 index 0000000..7c1f282 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoSelectorAssertions.cs @@ -0,0 +1,144 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Reflection; +using FluentAssertions.Common; +using FluentAssertions.Execution; + +namespace FluentAssertions.Types +{ + /// + /// Contains assertions for the objects returned by the parent . + /// + [DebuggerNonUserCode] + public class PropertyInfoSelectorAssertions + { + /// + /// Gets the object which value is being asserted. + /// + public IEnumerable SubjectProperties { get; private set; } + + /// + /// Initializes a new instance of the class, for a number of objects. + /// + /// The properties to assert. + public PropertyInfoSelectorAssertions(IEnumerable properties) + { + SubjectProperties = properties; + } + + /// + /// Asserts that the selected properties are virtual. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeVirtual(string because = "", params object[] becauseArgs) + { + IEnumerable nonVirtualProperties = GetAllNonVirtualPropertiesFromSelection(); + + string failureMessage = + "Expected all selected properties to be virtual{reason}, but the following properties are not virtual:\r\n" + + GetDescriptionsFor(nonVirtualProperties); + + Execute.Assertion + .ForCondition(!nonVirtualProperties.Any()) + .BecauseOf(because, becauseArgs) + .FailWith(failureMessage); + + return new AndConstraint(this); + } + + /// + /// Asserts that the selected properties have a setter. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeWritable(string because = "", params object[] becauseArgs) + { + PropertyInfo[] readOnlyProperties = GetAllReadOnlyPropertiesFromSelection(); + + string failureMessage = + "Expected all selected properties to have a setter{reason}, but the following properties do not:\r\n" + + GetDescriptionsFor(readOnlyProperties); + + Execute.Assertion + .ForCondition(!readOnlyProperties.Any()) + .BecauseOf(because, becauseArgs) + .FailWith(failureMessage); + + return new AndConstraint(this); + } + + private PropertyInfo[] GetAllReadOnlyPropertiesFromSelection() + { + return SubjectProperties.Where(property => !property.CanWrite).ToArray(); + } + + private PropertyInfo[] GetAllNonVirtualPropertiesFromSelection() + { + var query = + from property in SubjectProperties + where !property.IsVirtual() + select property; + + return query.ToArray(); + } + + /// + /// Asserts that the selected properties are decorated with the specified . + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeDecoratedWith(string because = "", params object[] becauseArgs) + where TAttribute : Attribute + { + IEnumerable propertiesWithoutAttribute = GetPropertiesWithout(); + + string failureMessage = + "Expected all selected properties to be decorated with {0}{reason}, but the following properties are not:\r\n" + + GetDescriptionsFor(propertiesWithoutAttribute); + + Execute.Assertion + .ForCondition(!propertiesWithoutAttribute.Any()) + .BecauseOf(because, becauseArgs) + .FailWith(failureMessage, typeof(TAttribute)); + + return new AndConstraint(this); + } + + private PropertyInfo[] GetPropertiesWithout() + where TAttribute : Attribute + { + return SubjectProperties.Where(property => !property.IsDecoratedWith()).ToArray(); + } + + private static string GetDescriptionsFor(IEnumerable properties) + { + return string.Join(Environment.NewLine, properties.Select(PropertyInfoAssertions.GetDescriptionFor).ToArray()); + } + + /// + /// Returns the type of the subject the assertion applies on. + /// + protected string Context + { + get { return "property info"; } + } + } +} diff --git a/Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoSelectorAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoSelectorAssertions.cs.meta new file mode 100644 index 0000000..f2f8062 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/PropertyInfoSelectorAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b225c63504da4b4089e50ad38f7c7f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Types/TypeAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Types/TypeAssertions.cs new file mode 100644 index 0000000..cbb79b1 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/TypeAssertions.cs @@ -0,0 +1,709 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using FluentAssertions.Common; +using FluentAssertions.Execution; +using FluentAssertions.Primitives; + +namespace FluentAssertions.Types +{ + /// + /// Contains a number of methods to assert that a meets certain expectations. + /// + [DebuggerNonUserCode] + public class TypeAssertions : ReferenceTypeAssertions + { + /// + /// Initializes a new instance of the class. + /// + public TypeAssertions(Type type) + { + Subject = type; + } + + /// + /// Asserts that the current type is equal to the specified type. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Be(string because = "", params object[] becauseArgs) + { + return Be(typeof(TExpected), because, becauseArgs); + } + + /// + /// Asserts that the current type is equal to the specified type. + /// + /// The expected type + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Be(Type expected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!ReferenceEquals(Subject, null)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected type to be {0}{reason}, but found .", expected); + + Execute.Assertion + .ForCondition(Subject == expected) + .BecauseOf(because, becauseArgs) + .FailWith(GetFailureMessageIfTypesAreDifferent(Subject, expected)); + + return new AndConstraint(this); + } + + /// + /// Asserts than an instance of the subject type is assignable variable of type . + /// + /// The type to which instances of the type should be assignable. + /// The reason why instances of the type should be assignable to the type. + /// The parameters used when formatting the . + /// An which can be used to chain assertions. + public new AndConstraint BeAssignableTo(string because = "", params object[] becauseArgs) + { + return BeAssignableTo(typeof(T), because, becauseArgs); + } + + /// + /// Asserts than an instance of the subject type is assignable variable of given . + /// + /// The type to which instances of the type should be assignable. + /// The reason why instances of the type should be assignable to the type. + /// + /// An which can be used to chain assertions. + public new AndConstraint BeAssignableTo(Type type, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(type.IsAssignableFrom(Subject)) + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected {context:" + Context + "} {0} to be assignable to {1}{reason}, but it is not", + Subject, + type); + + return new AndConstraint(this); + } + + /// + /// Creates an error message in case the specified type differs from the + /// type. + /// + /// + /// An empty if the two specified types are the same, or an error message that describes that + /// the two specified types are not the same. + /// + private static string GetFailureMessageIfTypesAreDifferent(Type actual, Type expected) + { + if (actual == expected) + { + return ""; + } + + string expectedType = (expected != null) ? expected.FullName : ""; + string actualType = (actual != null) ? actual.FullName : ""; + + if (expectedType == actualType) + { + expectedType = "[" + expected.AssemblyQualifiedName + "]"; + actualType = "[" + actual.AssemblyQualifiedName + "]"; + } + + return string.Format("Expected type to be {0}{{reason}}, but found {1}.", expectedType, actualType); + } + + /// + /// Asserts that the current type is not equal to the specified type. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBe(string because = "", params object[] becauseArgs) + { + return NotBe(typeof(TUnexpected), because, becauseArgs); + } + + /// + /// Asserts that the current type is not equal to the specified type. + /// + /// The unexpected type + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBe(Type unexpected, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject != unexpected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected type not to be [" + unexpected.AssemblyQualifiedName + "]{reason}, but it is."); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is decorated with the specified . + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeDecoratedWith(string because = "", params object[] becauseArgs) + where TAttribute : Attribute + { + Execute.Assertion + .ForCondition(Subject.IsDecoratedWith()) + .BecauseOf(because, becauseArgs) + .FailWith("Expected type {0} to be decorated with {1}{reason}, but the attribute was not found.", + Subject, typeof (TAttribute)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is decorated with an attribute of type + /// that matches the specified . + /// + /// + /// The predicate that the attribute must match. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeDecoratedWith( + Expression> isMatchingAttributePredicate, string because = "", params object[] becauseArgs) + where TAttribute : Attribute + { + BeDecoratedWith(because, becauseArgs); + + Execute.Assertion + .ForCondition(Subject.HasMatchingAttribute(isMatchingAttributePredicate)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected type {0} to be decorated with {1} that matches {2}{reason}, but no matching attribute was found.", + Subject, typeof(TAttribute), isMatchingAttributePredicate.Body); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current implements Interface . + /// + /// The interface that should be implemented. + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndConstraint Implement(Type interfaceType, string because = "", params object[] becauseArgs) + { + if (!interfaceType.GetTypeInfo().IsInterface) + { + throw new ArgumentException("Must be an interface Type.", "interfaceType"); + } + + Execute.Assertion.ForCondition(Subject.GetInterfaces().Contains(interfaceType)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected type {0} to implement interface {1}{reason}, but it does not.", Subject, interfaceType); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current implements Interface . + /// + /// The interface that should be implemented. + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndConstraint Implement(string because = "", params object[] becauseArgs) where TInterface : class + { + return Implement(typeof (TInterface), because, becauseArgs); + } + + /// + /// Asserts that the current does not implement Interface . + /// + /// The interface that should be not implemented. + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndConstraint NotImplement(Type interfaceType, string because = "", params object[] becauseArgs) + { + if (!interfaceType.GetTypeInfo().IsInterface) + { + throw new ArgumentException("Must be an interface Type.", "interfaceType"); + } + + Execute.Assertion.ForCondition(!Subject.GetInterfaces().Contains(interfaceType)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected type {0} to not implement interface {1}{reason}, but it does.", Subject, interfaceType); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current does not implement Interface . + /// + /// The interface that should not be implemented. + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndConstraint NotImplement(string because = "", params object[] becauseArgs) where TInterface : class + { + return NotImplement(typeof(TInterface), because, becauseArgs); + } + + /// + /// Asserts that the current is derived from . + /// + /// The Type that should be derived from. + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndConstraint BeDerivedFrom(Type baseType, string because = "", params object[] becauseArgs) + { + if (baseType.GetTypeInfo().IsInterface) + { + throw new ArgumentException("Must not be an interface Type.", "baseType"); + } + + Execute.Assertion.ForCondition(Subject.IsSubclassOf(baseType)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected type {0} to be derived from {1}{reason}, but it is not.", Subject, baseType); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is derived from . + /// + /// The Type that should be derived from. + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndConstraint BeDerivedFrom(string because = "", params object[] becauseArgs) where TBaseClass : class + { + return BeDerivedFrom(typeof(TBaseClass), because, becauseArgs); + } + + /// + /// Asserts that the current type has a property of type named . + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + /// The type of the property. + /// The name of the property. + public AndWhichConstraint HaveProperty(Type propertyType, string name, string because = "", params object[] becauseArgs) + { + PropertyInfo propertyInfo = Subject.GetPropertyByName(name); + + string propertyInfoDescription = ""; + + if (propertyInfo != null) + { + propertyInfoDescription = PropertyInfoAssertions.GetDescriptionFor(propertyInfo); + } + + Execute.Assertion.ForCondition(propertyInfo != null) + .BecauseOf(because, becauseArgs) + .FailWith(String.Format("Expected {0} {1}.{2} to exist{{reason}}, but it does not.", + propertyType.Name, Subject.FullName, name)); + + Execute.Assertion.ForCondition(propertyInfo.PropertyType == propertyType) + .BecauseOf(because, becauseArgs) + .FailWith(String.Format("Expected {0} to be of type {1}{{reason}}, but it is not.", + propertyInfoDescription, propertyType)); + + return new AndWhichConstraint(this, propertyInfo); + } + + /// + /// Asserts that the current type has a property of type named . + /// + /// The type of the property. + /// The name of the property. + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndWhichConstraint HaveProperty(string name, string because = "", params object[] becauseArgs) + { + return HaveProperty(typeof(TProperty), name, because, becauseArgs); + } + + /// + /// Asserts that the current type does not have a property named . + /// + /// The name of the property. + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndConstraint NotHaveProperty(string name, string because = "", params object[] becauseArgs) + { + PropertyInfo propertyInfo = Subject.GetPropertyByName(name); + + string propertyInfoDescription = ""; + + if (propertyInfo != null) + { + propertyInfoDescription = PropertyInfoAssertions.GetDescriptionFor(propertyInfo); + } + + Execute.Assertion.ForCondition(propertyInfo == null) + .BecauseOf(because, becauseArgs) + .FailWith(string.Format("Expected {0} to not exist{{reason}}, but it does.", propertyInfoDescription)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current type explicitly implements a property named + /// from interface . + /// + /// The type of the interface. + /// The name of the property. + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndConstraint HaveExplicitProperty(Type interfaceType, string name, string because = "", params object[] becauseArgs) + { + Subject.Should().Implement(interfaceType, because, becauseArgs); + + var explicitlyImplementsProperty = Subject.HasExplicitlyImplementedProperty(interfaceType, name); + + Execute.Assertion.ForCondition(explicitlyImplementsProperty) + .BecauseOf(because, becauseArgs) + .FailWith(String.Format("Expected {0} to explicitly implement {1}.{2}{{reason}}, but it does not.", + Subject.FullName, interfaceType.FullName, name)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current type explicitly implements a property named + /// from interface . + /// + /// The interface whose member is being explicitly implemented. + /// The name of the property. + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndConstraint HaveExplicitProperty(string name, string because = "", params object[] becauseArgs) where TInterface : class + { + return HaveExplicitProperty(typeof (TInterface), name, because, becauseArgs); + } + + /// + /// Asserts that the current type does not explicitly implement a property named + /// from interface . + /// + /// The type of the interface. + /// The name of the property. + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndConstraint NotHaveExplicitProperty(Type interfaceType, string name, string because = "", params object[] becauseArgs) + { + Subject.Should().Implement(interfaceType, because, becauseArgs); + + var explicitlyImplementsProperty = Subject.HasExplicitlyImplementedProperty(interfaceType, name); + + Execute.Assertion.ForCondition(!explicitlyImplementsProperty) + .BecauseOf(because, becauseArgs) + .FailWith(String.Format("Expected {0} to not explicitly implement {1}.{2}{{reason}}, but it does.", + Subject.FullName, interfaceType.FullName, name)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current type does not explicitly implement a property named + /// from interface . + /// + /// The interface whose member is not being explicitly implemented. + /// The name of the property. + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndConstraint NotHaveExplicitProperty(string name, string because = "", params object[] becauseArgs) where TInterface : class + { + return NotHaveExplicitProperty(typeof(TInterface), name, because, becauseArgs); + } + + /// + /// Asserts that the current type explicitly implements a method named + /// from interface . + /// + /// The type of the interface. + /// The name of the method. + /// The expected types of the method parameters. + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndConstraint HaveExplicitMethod(Type interfaceType, string name, IEnumerable parameterTypes, string because = "", params object[] becauseArgs) + { + Subject.Should().Implement(interfaceType, because, becauseArgs); + + var explicitlyImplementsMethod = Subject.HasMethod(string.Format("{0}.{1}", interfaceType.FullName, name), parameterTypes); + + Execute.Assertion.ForCondition(explicitlyImplementsMethod) + .BecauseOf(because, becauseArgs) + .FailWith(String.Format("Expected {0} to explicitly implement {1}.{2}{{reason}}, but it does not.", + Subject.FullName, interfaceType.FullName, name)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current type explicitly implements a method named + /// from interface . + /// + /// The interface whose member is being explicitly implemented. + /// The name of the method. + /// The expected types of the method parameters. + /// /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndConstraint HaveExplicitMethod(string name, IEnumerable parameterTypes, string because = "", params object[] becauseArgs) where TInterface : class + { + return HaveExplicitMethod(typeof(TInterface), name, parameterTypes, because, becauseArgs); + } + + /// + /// Asserts that the current type does not explicitly implement a method named + /// from interface . + /// + /// The type of the interface. + /// The name of the method. + /// The expected types of the method parameters. + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndConstraint NotHaveExplicitMethod(Type interfaceType, string name, IEnumerable parameterTypes, string because = "", params object[] becauseArgs) + { + Subject.Should().Implement(interfaceType, because, becauseArgs); + + var explicitlyImplementsMethod = Subject.HasMethod(string.Format("{0}.{1}", interfaceType.FullName, name), parameterTypes); + + Execute.Assertion.ForCondition(!explicitlyImplementsMethod) + .BecauseOf(because, becauseArgs) + .FailWith(String.Format("Expected {0} to not explicitly implement {1}.{2}{{reason}}, but it does.", + Subject.FullName, interfaceType.FullName, name)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current type does not explicitly implement a method named + /// from interface . + /// + /// The interface whose member is not being explicitly implemented. + /// The name of the method. + /// The expected types of the method parameters. + /// /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndConstraint NotHaveExplicitMethod(string name, IEnumerable parameterTypes, string because = "", params object[] becauseArgs) where TInterface : class + { + return NotHaveExplicitMethod(typeof(TInterface), name, parameterTypes, because, becauseArgs); + } + + /// + /// Asserts that the current type has an indexer of type . + /// with parameter types . + /// + /// The type of the indexer. + /// The parameter types for the indexer. + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndWhichConstraint HaveIndexer(Type indexerType, IEnumerable parameterTypes, string because = "", params object[] becauseArgs) + { + PropertyInfo propertyInfo = Subject.GetIndexerByParameterTypes(parameterTypes); + + string propertyInfoDescription = ""; + + if (propertyInfo != null) + { + propertyInfoDescription = PropertyInfoAssertions.GetDescriptionFor(propertyInfo); + } + + Execute.Assertion.ForCondition(propertyInfo != null) + .BecauseOf(because, becauseArgs) + .FailWith(String.Format("Expected {0} {1}[{2}] to exist{{reason}}, but it does not.", + indexerType.Name, Subject.FullName, + GetParameterString(parameterTypes))); + + Execute.Assertion.ForCondition(propertyInfo.PropertyType == indexerType) + .BecauseOf(because, becauseArgs) + .FailWith(String.Format("Expected {0} to be of type {1}{{reason}}, but it is not.", + propertyInfoDescription, indexerType)); + + return new AndWhichConstraint(this, propertyInfo); + } + + /// + /// Asserts that the current type does not have an indexer that takes parameter types . + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + /// The expected indexer's parameter types. + public AndConstraint NotHaveIndexer(IEnumerable parameterTypes, string because = "", params object[] becauseArgs) + { + PropertyInfo propertyInfo = Subject.GetIndexerByParameterTypes(parameterTypes); + + Execute.Assertion.ForCondition(propertyInfo == null) + .BecauseOf(because, becauseArgs) + .FailWith(String.Format("Expected indexer {0}[{1}] to not exist{{reason}}, but it does.", + Subject.FullName, + GetParameterString(parameterTypes))); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current type has a method named with parameter types . + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + /// The name of the method. + /// The parameter types for the indexer. + public AndWhichConstraint HaveMethod(String name, IEnumerable parameterTypes, string because = "", params object[] becauseArgs) + { + MethodInfo methodInfo = Subject.GetMethod(name, parameterTypes); + + Execute.Assertion.ForCondition(methodInfo != null) + .BecauseOf(because, becauseArgs) + .FailWith(String.Format("Expected method {0}.{1}({2}) to exist{{reason}}, but it does not.", + Subject.FullName, name, + GetParameterString(parameterTypes))); + + return new AndWhichConstraint(this, methodInfo); + } + + /// + /// Asserts that the current type does not expose a method named + /// with parameter types . + /// + /// The name of the method. + /// The method parameter types. + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndConstraint NotHaveMethod(string name, IEnumerable parameterTypes, string because = "", params object[] becauseArgs) + { + MethodInfo methodInfo = Subject.GetMethod(name, parameterTypes); + + string methodInfoDescription = ""; + + if (methodInfo != null) + { + methodInfoDescription = MethodInfoAssertions.GetDescriptionFor(methodInfo); + } + + Execute.Assertion.ForCondition(methodInfo == null) + .BecauseOf(because, becauseArgs) + .FailWith(string.Format("Expected method {0}({1}) to not exist{{reason}}, but it does.", methodInfoDescription, + GetParameterString(parameterTypes))); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current type has a constructor with parameter types . + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + /// The parameter types for the indexer. + public AndWhichConstraint HaveConstructor(IEnumerable parameterTypes, string because = "", params object[] becauseArgs) + { + ConstructorInfo constructorInfo = Subject.GetConstructor(parameterTypes); + + Execute.Assertion.ForCondition(constructorInfo != null) + .BecauseOf(because, becauseArgs) + .FailWith(String.Format("Expected constructor {0}({1}) to exist{{reason}}, but it does not.", + Subject.FullName, + GetParameterString(parameterTypes))); + + return new AndWhichConstraint(this, constructorInfo); + } + + /// + /// Asserts that the current type has a default constructor. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndWhichConstraint HaveDefaultConstructor(string because = "", params object[] becauseArgs) + { + return HaveConstructor(new Type[] {}, because, becauseArgs); + } + + private string GetParameterString(IEnumerable parameterTypes) + { + if (!parameterTypes.Any()) + { + return String.Empty; + } + + return parameterTypes.Select(p => p.FullName).Aggregate((p, c) => p + ", " + c); + } + + /// + /// Asserts that the selected type has the specified C# . + /// + /// The expected C# access modifier. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveAccessModifier( + CSharpAccessModifier accessModifier, string because = "", params object[] becauseArgs) + { + Execute.Assertion.ForCondition(accessModifier == Subject.GetCSharpAccessModifier()) + .BecauseOf(because, becauseArgs) + .FailWith("Expected type " + Subject.Name + " to be {0}{reason}, but it is {1}.", + accessModifier, Subject.GetCSharpAccessModifier()); + + return new AndConstraint(Subject); + } + + /// + /// Returns the type of the subject the assertion applies on. + /// + protected override string Context + { + get { return "type"; } + } + } +} diff --git a/Assets/Plugins/FluentAssertions/Core/Types/TypeAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Types/TypeAssertions.cs.meta new file mode 100644 index 0000000..805a312 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/TypeAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 30d6d072273476d45a681c0a56a5801d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Types/TypeSelector.cs b/Assets/Plugins/FluentAssertions/Core/Types/TypeSelector.cs new file mode 100644 index 0000000..73ba30d --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/TypeSelector.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +namespace FluentAssertions.Types +{ + /// + /// Allows for fluent filtering a list of types. + /// + public class TypeSelector : IEnumerable + { + private List types; + + public TypeSelector(IEnumerable types) + { + this.types = types.ToList(); + } + + /// + /// The resulting objects. + /// + public Type[] ToArray() + { + return types.ToArray(); + } + + /// + /// Determines whether a type is a subclass of another type, but NOT the same type. + /// + public TypeSelector ThatDeriveFrom() + { + types = types.Where(type => type.IsSubclassOf(typeof(TBase))).ToList(); + return this; + } + + /// + /// Determines whether a type implements an interface (but is not the interface itself). + /// + public TypeSelector ThatImplement() + { + types = types.Where(t => + typeof(TInterface) + .IsAssignableFrom(t) && (t != typeof(TInterface) + )).ToList(); + return this; + } + + /// + /// Determines whether a type is decorated with a particular attribute. + /// + public TypeSelector ThatAreDecoratedWith() + { + types = types +#if NEW_REFLECTION + .Where(t => t.GetTypeInfo().GetCustomAttributes(typeof(TAttribute), true).Any()) +#else + .Where(t => t.GetCustomAttributes(typeof(TAttribute), true).Length > 0) +#endif + .ToList(); + + return this; + } + + /// + /// Determines whether the namespace of type is exactly . + /// + public TypeSelector ThatAreInNamespace(string @namespace) + { + types = types.Where(t => t.Namespace == @namespace).ToList(); + return this; + } + + /// + /// Determines whether the namespace of type is starts with . + /// + public TypeSelector ThatAreUnderNamespace(string @namespace) + { + types = types.Where(t => (t.Namespace != null) && t.Namespace.StartsWith(@namespace)).ToList(); + return this; + } + + /// + /// Returns an enumerator that iterates through the collection. + /// + /// + /// A that can be used to iterate through the collection. + /// + /// 1 + public IEnumerator GetEnumerator() + { + return types.GetEnumerator(); + } + + /// + /// Returns an enumerator that iterates through a collection. + /// + /// + /// An object that can be used to iterate through the collection. + /// + /// 2 + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Types/TypeSelector.cs.meta b/Assets/Plugins/FluentAssertions/Core/Types/TypeSelector.cs.meta new file mode 100644 index 0000000..2656d51 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/TypeSelector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0edaa39da3fb6c4a9e41773d3ac6af1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Core/Types/TypeSelectorAssertions.cs b/Assets/Plugins/FluentAssertions/Core/Types/TypeSelectorAssertions.cs new file mode 100644 index 0000000..b00d1d6 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/TypeSelectorAssertions.cs @@ -0,0 +1,101 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Linq.Expressions; + +using FluentAssertions.Execution; +using FluentAssertions.Common; + +namespace FluentAssertions.Types +{ + /// + /// Contains a number of methods to assert that all s in a + /// meet certain expectations. + /// + [DebuggerNonUserCode] + public class TypeSelectorAssertions + { + /// + /// Initializes a new instance of the class. + /// + public TypeSelectorAssertions(IEnumerable types) + { + Subject = types; + } + + /// + /// Gets the object which value is being asserted. + /// + public IEnumerable Subject { get; private set; } + + /// + /// Asserts that the current is decorated with the specified . + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeDecoratedWith(string because = "", params object[] becauseArgs) + where TAttribute : Attribute + { + IEnumerable typesWithoutAttribute = Subject + .Where(type => !type.IsDecoratedWith()) + .ToArray(); + + Execute.Assertion + .ForCondition(!typesWithoutAttribute.Any()) + .BecauseOf(because, becauseArgs) + .FailWith("Expected all types to be decorated with {0}{reason}," + + " but the attribute was not found on the following types:\r\n" + GetDescriptionsFor(typesWithoutAttribute), + typeof(TAttribute)); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is decorated with an attribute of type + /// that matches the specified . + /// + /// + /// The predicate that the attribute must match. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeDecoratedWith( + Expression> isMatchingAttributePredicate, string because = "", params object[] becauseArgs) + where TAttribute : Attribute + { + IEnumerable typesWithoutMatchingAttribute = Subject + .Where(type => !type.HasMatchingAttribute(isMatchingAttributePredicate)) + .ToArray(); + + Execute.Assertion + .ForCondition(!typesWithoutMatchingAttribute.Any()) + .BecauseOf(because, becauseArgs) + .FailWith("Expected all types to be decorated with {0} that matches {1}{reason}," + + " but no matching attribute was found on the following types:\r\n" + GetDescriptionsFor(typesWithoutMatchingAttribute), + typeof(TAttribute), isMatchingAttributePredicate.Body); + + return new AndConstraint(this); + } + + private static string GetDescriptionsFor(IEnumerable types) + { + return string.Join(Environment.NewLine, types.Select(GetDescriptionFor).ToArray()); + } + + private static string GetDescriptionFor(Type type) + { + return type.ToString(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Core/Types/TypeSelectorAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Core/Types/TypeSelectorAssertions.cs.meta new file mode 100644 index 0000000..5b8aea3 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Core/Types/TypeSelectorAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c242700ffcc1f34c816f7d385344ddd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Core.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Core.meta new file mode 100644 index 0000000..c2c9fc2 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ca9a3fe13ca9b884ead66337d84eddf0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Core/ReflectionExtensions.cs b/Assets/Plugins/FluentAssertions/FluentAssertions.Core/ReflectionExtensions.cs new file mode 100644 index 0000000..31a3754 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Core/ReflectionExtensions.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace FluentAssertions +{ + internal static class ReflectionExtensions + { + + public static bool IsEnum(this Type type) + { + return type.IsEnum; + } + + public static bool IsPrimitive(this Type type) + { + return type.IsPrimitive; + } + + public static Type GetBaseType(this Type type) + { + return type.BaseType; + } + + public static bool IsGenericType(this Type type) + { + return type.IsGenericType; + } + + public static bool IsInterface(this Type type) + { + return type.IsInterface; + } + + public static bool IsGenericTypeDefinition(this Type type) + { + return type.IsGenericTypeDefinition; + } + + public static Type GetTypeInfo(this Type type) + { + return type; + } + + } + +} diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Core/ReflectionExtensions.cs.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Core/ReflectionExtensions.cs.meta new file mode 100644 index 0000000..0ff55a4 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Core/ReflectionExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 62a6b150444c1f44d9e3d5c7c61ec35f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40.meta new file mode 100644 index 0000000..c9ea4e5 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a87bc2c808201224e83e4d5f6eb49b9e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common.meta new file mode 100644 index 0000000..cea89ea --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dde4f03206dc034419958016ec0f89c3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common/DefaultReflectionProvider.cs b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common/DefaultReflectionProvider.cs new file mode 100644 index 0000000..f476a96 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common/DefaultReflectionProvider.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Reflection.Emit; + +namespace FluentAssertions.Common +{ + internal class DefaultReflector : IReflector + { + public IEnumerable GetAllTypesFromAppDomain(Func predicate) + { + return AppDomain.CurrentDomain + .GetAssemblies() + .Where(a => predicate(a) && !IsDynamic(a)) + .SelectMany(GetExportedTypes).ToArray(); + } + + private static bool IsDynamic(Assembly assembly) + { + return (assembly.GetType().FullName == "System.Reflection.Emit.AssemblyBuilder") || + (assembly.GetType().FullName == "System.Reflection.Emit.InternalAssemblyBuilder"); + } + + private static IEnumerable GetExportedTypes(Assembly assembly) + { + try + { + return assembly.GetExportedTypes(); + } + catch (ReflectionTypeLoadException ex) + { + return ex.Types; + } + catch (FileLoadException) + { + return new Type[0]; + } + catch (Exception) + { + return new Type[0]; + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common/DefaultReflectionProvider.cs.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common/DefaultReflectionProvider.cs.meta new file mode 100644 index 0000000..1585332 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common/DefaultReflectionProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c609debc2f4fa4d4ab9745afe8d36ed7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common/ProvidePlatformServices.cs b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common/ProvidePlatformServices.cs new file mode 100644 index 0000000..5e02ebf --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common/ProvidePlatformServices.cs @@ -0,0 +1,41 @@ +using System; + +using FluentAssertions.Execution; +using FluentAssertions.Formatting; +using FluentAssertions.Xml; + +namespace FluentAssertions.Common +{ + public class ProvidePlatformServices : IProvidePlatformServices + { + public Action Throw + { + get { return TestFrameworkProvider.Throw; } + } + + public IConfigurationStore ConfigurationStore + { + get { return new NullConfigurationStore(); } + } + + public IReflector Reflector + { + get { return new DefaultReflector(); } + } + + public IValueFormatter[] Formatters + { + get + { + return new IValueFormatter[] + { + new AggregateExceptionValueFormatter(), + new XDocumentValueFormatter(), + new XElementValueFormatter(), + new XAttributeValueFormatter(), + new XmlNodeFormatter() + }; + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common/ProvidePlatformServices.cs.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common/ProvidePlatformServices.cs.meta new file mode 100644 index 0000000..f487091 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Common/ProvidePlatformServices.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08e69e85bd3fb394382f1cb820e1a431 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution.meta new file mode 100644 index 0000000..44ca170 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5a8c697569f2cd7488ca2b76222c92e1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/GallioTestFramework.cs b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/GallioTestFramework.cs new file mode 100644 index 0000000..b1115b4 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/GallioTestFramework.cs @@ -0,0 +1,110 @@ +using System; +using System.Linq; +using System.Reflection; + +#if WINRT +using System.Reflection.RuntimeExtensions; +#endif + +namespace FluentAssertions.Execution +{ + internal class GallioTestFramework : ITestFramework + { + private Assembly assembly; + + /// + /// Throws a framework-specific exception to indicate a failing unit test. + /// + public void Throw(string message) + { + Type assertionFailureBuilderType = assembly.GetType("Gallio.Framework.Assertions.AssertionFailureBuilder"); + Type assertionHelperType = assembly.GetType("Gallio.Framework.Assertions.AssertionHelper"); + Type testContextType = assembly.GetType("Gallio.Framework.TestContext"); + + if ((assertionFailureBuilderType == null) || (assertionHelperType == null) || (testContextType == null)) + { + throw new Exception(string.Format( + "Failed to create the assertion exception for the current test framework: \"{0}\"", + assembly.FullName)); + } + + object testContext = testContextType +#if !WINRT + .GetProperty("CurrentContext") +#else + .GetRuntimeProperty("CurrentContext") +#endif + .GetValue(null, null); + + if (testContext != null) + { +#if !WINRT && !CORE_CLR + testContextType.InvokeMember("IncrementAssertCount", BindingFlags.InvokeMethod, null, testContext, null); +#else + var method = testContextType.GetRuntimeMethod("IncrementAssertCount", new Type[0]); + method.Invoke(testContext, null); +#endif + } + + object assertionFailureBuilder = Activator.CreateInstance(assertionFailureBuilderType, message); + object assertionFailure; +#if !WINRT && !CORE_CLR + assertionFailureBuilderType.InvokeMember("SetMessage", BindingFlags.InvokeMethod, null, + assertionFailureBuilder, new object[] {message}); + assertionFailure = assertionFailureBuilderType.InvokeMember("ToAssertionFailure", + BindingFlags.InvokeMethod, null, assertionFailureBuilder, null); +#else + var setMessageMethod = assertionFailureBuilderType.GetRuntimeMethod("SetMessage", new [] {typeof(string)}); + setMessageMethod.Invoke(assertionFailureBuilder, new object[] {message}); + + var toAssertionFailureMethod = assertionFailureBuilderType.GetRuntimeMethod("ToAssertionFailure", new Type[0]); + assertionFailure = toAssertionFailureMethod.Invoke(assertionFailureBuilder, null); +#endif + try + { +#if !WINRT && !CORE_CLR + assertionHelperType.InvokeMember("Fail", BindingFlags.InvokeMethod, null, null, new[] {assertionFailure}); +#else + var failMethod = assertionHelperType.GetRuntimeMethods().First(m => m.Name == "Fail"); + failMethod.Invoke(null, new[] {assertionFailure}); +#endif + } + catch (TargetInvocationException ex) + { + throw ex.InnerException; + } + } + + /// + /// Gets a value indicating whether the corresponding test framework is currently available. + /// + public bool IsAvailable + { + get + { +#if CORE_CLR + // For CoreCLR, we need to attempt to load the assembly + try + { + assembly = Assembly.Load(new AssemblyName(AssemblyName) { Version = new Version(0, 0, 0, 0) }); + return assembly != null; + } + catch + { + return false; + } +#else + assembly = AppDomain.CurrentDomain.GetAssemblies() + .FirstOrDefault(a => a.GetName().Name.Equals(AssemblyName, StringComparison.InvariantCultureIgnoreCase)); + + return (assembly != null); +#endif + } + } + + private string AssemblyName + { + get { return "Gallio"; } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/GallioTestFramework.cs.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/GallioTestFramework.cs.meta new file mode 100644 index 0000000..805c1d4 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/GallioTestFramework.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3a51c37612d3254b89d6d7258d46e11 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSTestFramework.cs b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSTestFramework.cs new file mode 100644 index 0000000..ef30171 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSTestFramework.cs @@ -0,0 +1,15 @@ +namespace FluentAssertions.Execution +{ + internal class MSTestFramework : LateBoundTestFramework + { + protected override string ExceptionFullName + { + get { return "Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException"; } + } + + protected override string AssemblyName + { + get { return "Microsoft.VisualStudio.QualityTools.UnitTestFramework"; } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSTestFramework.cs.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSTestFramework.cs.meta new file mode 100644 index 0000000..e91c6f1 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSTestFramework.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 358c3c6299f66c94ea43cb1852b4016c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSTestFrameworkV2.cs b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSTestFrameworkV2.cs new file mode 100644 index 0000000..2651447 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSTestFrameworkV2.cs @@ -0,0 +1,15 @@ +namespace FluentAssertions.Execution +{ + internal class MSTestFrameworkV2 : LateBoundTestFramework + { + protected override string ExceptionFullName + { + get { return "Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException"; } + } + + protected override string AssemblyName + { + get { return "Microsoft.VisualStudio.TestPlatform.TestFramework"; } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSTestFrameworkV2.cs.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSTestFrameworkV2.cs.meta new file mode 100644 index 0000000..97e8083 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSTestFrameworkV2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a48aa4e32254594cac1eb02b21b3c1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSpecFramework.cs b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSpecFramework.cs new file mode 100644 index 0000000..404121e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSpecFramework.cs @@ -0,0 +1,15 @@ +namespace FluentAssertions.Execution +{ + internal class MSpecFramework : LateBoundTestFramework + { + protected override string AssemblyName + { + get { return "Machine.Specifications"; } + } + + protected override string ExceptionFullName + { + get { return "Machine.Specifications.SpecificationException"; } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSpecFramework.cs.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSpecFramework.cs.meta new file mode 100644 index 0000000..6a86ed7 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MSpecFramework.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ec338f53f3f642448cf6a7d7aa37e3b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MbUnitTestFramework.cs b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MbUnitTestFramework.cs new file mode 100644 index 0000000..5a70015 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MbUnitTestFramework.cs @@ -0,0 +1,15 @@ +namespace FluentAssertions.Execution + { + internal class MbUnitTestFramework : LateBoundTestFramework + { + protected override string AssemblyName + { + get { return "MbUnit.Framework"; } + } + + protected override string ExceptionFullName + { + get { return "MbUnit.Core.Exceptions.AssertionException"; } + } + } + } \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MbUnitTestFramework.cs.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MbUnitTestFramework.cs.meta new file mode 100644 index 0000000..ffee4a4 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/MbUnitTestFramework.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c967f9958ab9d1d4ab9212b3d102a0e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/NUnitTestFramework.cs b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/NUnitTestFramework.cs new file mode 100644 index 0000000..38dd756 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/NUnitTestFramework.cs @@ -0,0 +1,15 @@ +namespace FluentAssertions.Execution +{ + internal class NUnitTestFramework : LateBoundTestFramework + { + protected override string AssemblyName + { + get { return "nunit.framework"; } + } + + protected override string ExceptionFullName + { + get { return "NUnit.Framework.AssertionException"; } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/NUnitTestFramework.cs.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/NUnitTestFramework.cs.meta new file mode 100644 index 0000000..993dc6f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/NUnitTestFramework.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a850dd67ddc2ab4baa2dbad8f770f0b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/TestFrameworkProvider.cs b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/TestFrameworkProvider.cs new file mode 100644 index 0000000..1ea9da8 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/TestFrameworkProvider.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +#if !WINRT +using System.Configuration; +#endif + +namespace FluentAssertions.Execution +{ + internal static class TestFrameworkProvider + { + #region Private Definitions + + private const string AppSettingKey = "FluentAssertions.TestFramework"; + + private static readonly Dictionary frameworks = new Dictionary + { + { "nunit", new NUnitTestFramework() }, + { "xunit", new XUnitTestFramework() }, + { "mspec", new MSpecFramework() }, + { "mbunit", new MbUnitTestFramework() }, + { "gallio", new GallioTestFramework() }, + { "mstest", new MSTestFramework() }, +#if NET45 + { "xunit2", new XUnit2TestFramework()}, + { "mstestv2", new MSTestFrameworkV2() }, +#endif + { "fallback", new FallbackTestFramework() } + }; + + private static ITestFramework testFramework; + + #endregion + + public static void Throw(string message) + { + if (testFramework == null) + { + testFramework = DetectFramework(); + } + + testFramework.Throw(message); + } + + private static ITestFramework DetectFramework() + { + ITestFramework detectedFramework = null; + + detectedFramework = AttemptToDetectUsingAppSetting(); + if (detectedFramework == null) + { + detectedFramework = AttemptToDetectUsingAssemblyScanning(); + } + + if (detectedFramework == null) + { + FailWithIncorrectConfiguration(); + } + + return detectedFramework; + } + + private static void FailWithIncorrectConfiguration() + { + string errorMessage = + "Failed to detect the test framework. Make sure that the framework assembly is copied into the test run directory" + + ", or configure it explicitly in the section using key \"" + AppSettingKey + + "\" and one of the supported " + + " frameworks: " + string.Join(", ", frameworks.Keys.ToArray()); + + throw new InvalidOperationException(errorMessage); + } + + private static ITestFramework AttemptToDetectUsingAppSetting() + { + string frameworkName = null; //ConfigurationManager.AppSettings[AppSettingKey]; + + if (!string.IsNullOrEmpty(frameworkName) && frameworks.ContainsKey(frameworkName.ToLower())) + { + ITestFramework framework = frameworks[frameworkName.ToLower()]; + if (!framework.IsAvailable) + { + throw new Exception( + "FluentAssertions was configured to use " + frameworkName + + " but the required test framework assembly could not be found"); + } + + return framework; + } + + return null; + } + + private static ITestFramework AttemptToDetectUsingAssemblyScanning() + { + return frameworks.Values.FirstOrDefault(framework => framework.IsAvailable); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/TestFrameworkProvider.cs.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/TestFrameworkProvider.cs.meta new file mode 100644 index 0000000..23a1756 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/TestFrameworkProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 46776399f5ea0484eba48bdf8075bc9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/XUnitTestFramework.cs b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/XUnitTestFramework.cs new file mode 100644 index 0000000..efc6456 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/XUnitTestFramework.cs @@ -0,0 +1,15 @@ +namespace FluentAssertions.Execution +{ + internal class XUnitTestFramework : LateBoundTestFramework + { + protected override string AssemblyName + { + get { return "xunit"; } + } + + protected override string ExceptionFullName + { + get { return "Xunit.Sdk.AssertException"; } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/XUnitTestFramework.cs.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/XUnitTestFramework.cs.meta new file mode 100644 index 0000000..33c07ae --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Execution/XUnitTestFramework.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cf3b9f2b5ad37654aa94e629233971fc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/ObjectAssertionsExtensions.cs b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/ObjectAssertionsExtensions.cs new file mode 100644 index 0000000..0f21952 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/ObjectAssertionsExtensions.cs @@ -0,0 +1,183 @@ +using System; +using System.IO; +using System.Runtime.Serialization; +using System.Runtime.Serialization.Formatters.Binary; +using System.Text; +using System.Xml.Serialization; + +using FluentAssertions.Equivalency; +using FluentAssertions.Execution; +using FluentAssertions.Primitives; + +namespace FluentAssertions +{ + public static class ObjectAssertionsExtensions + { + /// + /// Asserts that an object can be serialized and deserialized using the binary serializer and that it stills retains + /// the values of all members. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static AndConstraint BeBinarySerializable(this ObjectAssertions assertions, string because = "", + params object[] becauseArgs) + { + return BeBinarySerializable(assertions, options => options, because, becauseArgs); + } + + /// + /// Asserts that an object can be serialized and deserialized using the binary serializer and that it stills retains + /// the values of all members. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static AndConstraint BeBinarySerializable(this ObjectAssertions assertions, + Func, EquivalencyAssertionOptions> options, string because = "", + params object[] becauseArgs) + { + try + { + object deserializedObject = CreateCloneUsingBinarySerializer(assertions.Subject); + + EquivalencyAssertionOptions defaultOptions = AssertionOptions.CloneDefaults() + .RespectingRuntimeTypes().IncludingFields().IncludingProperties(); + + ((T)deserializedObject).ShouldBeEquivalentTo(assertions.Subject, _ => options(defaultOptions)); + } + catch (Exception exc) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {0} to be serializable{reason}, but serialization failed with:\r\n\r\n{1}", + assertions.Subject, + exc.Message); + } + + return new AndConstraint(assertions); + } + + /// + /// Asserts that an object can be serialized and deserialized using the data contract serializer and that it stills retains + /// the values of all members. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static AndConstraint BeDataContractSerializable(this ObjectAssertions assertions, + string because = "", params object[] becauseArgs) + { + return BeDataContractSerializable(assertions, because, becauseArgs); + } + + /// + /// Asserts that an object can be serialized and deserialized using the data contract serializer and that it stills retains + /// the values of all members. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static AndConstraint BeDataContractSerializable(this ObjectAssertions assertions, + string because = "", params object[] becauseArgs) + { + try + { + var deserializedObject = CreateCloneUsingDataContractSerializer(assertions.Subject); + + deserializedObject.ShouldBeEquivalentTo(assertions.Subject, + options => options.RespectingRuntimeTypes().IncludingFields().IncludingProperties()); + } + catch (Exception exc) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {0} to be serializable{reason}, but serialization failed with:\r\n\r\n{1}", + assertions.Subject, + exc.Message); + } + + return new AndConstraint(assertions); + } + + private static object CreateCloneUsingBinarySerializer(object subject) + { + var stream = new MemoryStream(); + var binaryFormatter = new BinaryFormatter(); + binaryFormatter.Serialize(stream, subject); + + stream.Position = 0; + return binaryFormatter.Deserialize(stream); + } + + private static object CreateCloneUsingDataContractSerializer(object subject) + { + using (var stream = new MemoryStream()) + { + var serializer = new DataContractSerializer(subject.GetType()); + serializer.WriteObject(stream, subject); + stream.Position = 0; + return serializer.ReadObject(stream); + } + } + + /// + /// Asserts that an object can be serialized and deserialized using the XML serializer and that it stills retains + /// the values of all members. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static AndConstraint BeXmlSerializable(this ObjectAssertions assertions, string because = "", + params object[] becauseArgs) + { + try + { + object deserializedObject = CreateCloneUsingXmlSerializer(assertions.Subject); + + deserializedObject.ShouldBeEquivalentTo(assertions.Subject, + options => options.RespectingRuntimeTypes().IncludingFields().IncludingProperties()); + } + catch (Exception exc) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Expected {0} to be serializable{reason}, but serialization failed with:\r\n\r\n{1}", + assertions.Subject, + exc.Message); + } + + return new AndConstraint(assertions); + } + + private static object CreateCloneUsingXmlSerializer(object subject) + { + var stream = new MemoryStream(); + var binaryFormatter = new XmlSerializer(subject.GetType()); + binaryFormatter.Serialize(stream, subject); + + stream.Position = 0; + return binaryFormatter.Deserialize(stream); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/ObjectAssertionsExtensions.cs.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/ObjectAssertionsExtensions.cs.meta new file mode 100644 index 0000000..5194eb9 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/ObjectAssertionsExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4cbab2505e3a904448917e84c97ce255 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Properties.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Properties.meta new file mode 100644 index 0000000..6cb9cb5 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Properties.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7350abd898b0e534eab0c39879d946db +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Properties/AssemblyInfo.cs b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..c409423 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Properties/AssemblyInfo.cs @@ -0,0 +1,14 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Fluent Assertions")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyProduct("Fluent Assertions")] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("796bb2ec-18ec-46fe-aa02-5a62902a63fa")] diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Properties/AssemblyInfo.cs.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Properties/AssemblyInfo.cs.meta new file mode 100644 index 0000000..39178ff --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Properties/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 769cc62351460244aa7ec3d0433afd88 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml.meta new file mode 100644 index 0000000..80a096c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 30ac0923a1e5e224d81be916bcaea529 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlAssertionExtensions.cs b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlAssertionExtensions.cs new file mode 100644 index 0000000..9110240 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlAssertionExtensions.cs @@ -0,0 +1,25 @@ +using FluentAssertions.Xml; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml; + +namespace FluentAssertions +{ + [DebuggerNonUserCode] + public static class XmlAssertionExtensions + { + public static XmlNodeAssertions Should(this XmlNode actualValue) + { + return new XmlNodeAssertions(actualValue); + } + + public static XmlElementAssertions Should(this XmlElement actualValue) + { + return new XmlElementAssertions(actualValue); + } + } +} diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlAssertionExtensions.cs.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlAssertionExtensions.cs.meta new file mode 100644 index 0000000..ae56b48 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlAssertionExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3165aa4f19da1ea40901cb2b89552fe4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlElementAssertions.cs b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlElementAssertions.cs new file mode 100644 index 0000000..a4d7f19 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlElementAssertions.cs @@ -0,0 +1,226 @@ +using FluentAssertions.Common; +using FluentAssertions.Execution; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Xml; + +namespace FluentAssertions.Xml +{ + /// + /// Cointains a number of methods to assert that an + /// is in the expected state./> + /// + [DebuggerNonUserCode] + public class XmlElementAssertions : XmlNodeAssertions + { + /// + /// Initialized a new instance of the + /// class. + /// + /// + public XmlElementAssertions(XmlElement xmlElement) + : base (xmlElement) + { } + + /// + /// Asserts taht the current has the specified + /// inner text. + /// + /// The expected value. + public AndConstraint HaveInnerText(string expected) + { + return HaveInnerText(expected, string.Empty); + } + + /// + /// Asserts that the current has the specified + /// inner text. + /// + /// The expected value. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveInnerText(string expected, string because, params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.InnerText == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected XML element {0} to have value {1}{reason}, but found {2}.", + Subject.Name, expected, Subject.InnerText); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current has an attribute + /// with the specified + /// and . + /// + /// The name of the expected attribute + /// The value of the expected attribute + + public AndConstraint HaveAttribute(string expectedName, string expectedValue) + { + return HaveAttribute(expectedName, expectedValue, string.Empty); + } + + /// + /// Asserts that the current has an attribute + /// with the specified + /// and . + /// + /// The name of the expected attribute + /// The value of the expected attribute + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveAttribute(string expectedName, string expectedValue, string because, params object[] becauseArgs) + { + return HaveAttributeWithNamespace(expectedName, string.Empty, expectedValue, because, becauseArgs); + } + + /// + /// Asserts that the current has an attribute + /// with the specified , + /// and . + /// + /// The name of the expected attribute + /// The value of the expected attribute + public AndConstraint HaveAttributeWithNamespace(string expectedName, string expectedNamespace, string expectedValue) + { + return HaveAttributeWithNamespace(expectedName, expectedNamespace, expectedValue, string.Empty); + } + + /// + /// Asserts that the current has an attribute + /// with the specified , + /// and . + /// + /// The name of the expected attribute + /// The value of the expected attribute + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveAttributeWithNamespace( + string expectedName, + string expectedNamespace, + string expectedValue, + string because, params object[] becauseArgs) + { + XmlAttribute attribute = Subject.Attributes[expectedName, expectedNamespace]; + + string expectedFormattedName = + (string.IsNullOrEmpty(expectedNamespace) ? "" : "{" + expectedNamespace + "}") + + expectedName; + + Execute.Assertion + .ForCondition(attribute != null) + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected XML element to have attribute {0}" + + " with value {1}{reason}, but found no such attribute in {2}", + expectedFormattedName, expectedValue, Subject); + + Execute.Assertion + .ForCondition(attribute.Value == expectedValue) + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected XML attribute {0} to have value {1}{reason}, but found {2}.", + expectedFormattedName, expectedValue, attribute.Value); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current has a direct child element with the specified + /// name. + /// + /// The name of the expected child element + public AndWhichConstraint HaveElement(string expectedName) + { + return HaveElement(expectedName, string.Empty); + } + + /// + /// Asserts that the current has a direct child element with the specified + /// name. + /// + /// The name of the expected child element + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndWhichConstraint HaveElement( + string expectedName, + string because, + params object[] becauseArgs) + { + return HaveElementWithNamespace(expectedName, string.Empty, because, becauseArgs); + } + + /// + /// Asserts that the current has a direct child element with the specified + /// name and namespace. + /// + /// The name of the expected child element + /// The namespace of the expected child element + public AndWhichConstraint HaveElementWithNamespace( + string expectedName, string expectedNamespace) + { + return HaveElementWithNamespace(expectedName, expectedNamespace, string.Empty); + } + + /// + /// Asserts that the current has a direct child element with the specified + /// name and namespace. + /// + /// The name of the expected child element + /// The namespace of the expected child element + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndWhichConstraint HaveElementWithNamespace( + string expectedName, + string expectedNamespace, + string because, + params object[] becauseArgs) + { + XmlElement element = Subject[expectedName, expectedNamespace]; + + string expectedFormattedName = + (string.IsNullOrEmpty(expectedNamespace) ? "" : "{" + expectedNamespace + "}") + + expectedName; + + Execute.Assertion + .ForCondition(element != null) + .BecauseOf(because, becauseArgs) + .FailWith("Expected XML element {0} to have child element \"" + + expectedFormattedName.ToString().Escape(escapePlaceholders: true) + "\"{reason}" + + ", but no such child element was found.", Subject); + + return new AndWhichConstraint(this, element); + } + } +} diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlElementAssertions.cs.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlElementAssertions.cs.meta new file mode 100644 index 0000000..235a1b3 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlElementAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3b776fb3b595494a9817d3036f9ce3a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeAssertions.cs b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeAssertions.cs new file mode 100644 index 0000000..ae56d3b --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeAssertions.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Xml; + +namespace FluentAssertions.Xml +{ + /// + /// Contains a number of methods to assert that an is in the expected state. + /// + [DebuggerNonUserCode] + public class XmlNodeAssertions : XmlNodeAssertions + { + public XmlNodeAssertions(XmlNode xmlNode) + : base(xmlNode) + { } + } +} diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeAssertions.cs.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeAssertions.cs.meta new file mode 100644 index 0000000..cca983c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59e93ceec3fd35943be65d277bd294f1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeAssertionsofTSubjectTAssertions.cs b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeAssertionsofTSubjectTAssertions.cs new file mode 100644 index 0000000..2fa1d05 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeAssertionsofTSubjectTAssertions.cs @@ -0,0 +1,97 @@ +using FluentAssertions.Execution; +using FluentAssertions.Primitives; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; +using System.Xml; + +namespace FluentAssertions.Xml +{ + /// + /// Contains a number of methods to assert that an is in the expected state. + /// + [DebuggerNonUserCode] + public class XmlNodeAssertions : ReferenceTypeAssertions + where TAssertions: XmlNodeAssertions + where TSubject : XmlNode + { + public XmlNodeAssertions(TSubject xmlNode) + { + Subject = xmlNode; + } + + /// + /// Asserts that the current is equivalent to the element. + /// + /// The expected element + public AndConstraint BeEquivalentTo(XmlNode expected) + { + return BeEquivalentTo(expected, string.Empty); + } + + /// + /// Asserts that the current is equivalent to the node. + /// + /// The expected node + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeEquivalentTo(XmlNode expected, string because, params object[] reasonArgs) + { + using (XmlNodeReader subjectReader = new XmlNodeReader(Subject)) + using (XmlNodeReader expectedReader = new XmlNodeReader(expected)) + { + new XmlReaderValidator(subjectReader, expectedReader, because, reasonArgs).Validate(true); + } + + return new AndConstraint((TAssertions)(this)); + } + + /// + /// Asserts that the current is not equivalent to + /// the node. + /// + /// The unexpected node + public AndConstraint NotBeEquivalentTo(XmlNode unexpected) + { + return NotBeEquivalentTo(unexpected, string.Empty); + } + + /// + /// Asserts that the current is not equivalent to + /// the node. + /// + /// The unexpected node + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + /// + public AndConstraint NotBeEquivalentTo(XmlNode unexpected, string because, params object[] reasonArgs) + { + using (XmlNodeReader subjectReader = new XmlNodeReader(Subject)) + using (XmlNodeReader unexpectedReader = new XmlNodeReader(unexpected)) + { + new XmlReaderValidator(subjectReader, unexpectedReader, because, reasonArgs).Validate(false); + } + + return new AndConstraint((TAssertions)this); + } + + /// + /// Returns the type of the subject the assertion applies on. + /// + protected override string Context + { + get { return "Xml Node"; } + } + } +} diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeAssertionsofTSubjectTAssertions.cs.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeAssertionsofTSubjectTAssertions.cs.meta new file mode 100644 index 0000000..789dfae --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeAssertionsofTSubjectTAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d59018b5b2583c7469a5633533a8a9cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeFormatter.cs b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeFormatter.cs new file mode 100644 index 0000000..6eb5992 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeFormatter.cs @@ -0,0 +1,33 @@ +using FluentAssertions.Common; +using FluentAssertions.Formatting; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml; + +namespace FluentAssertions.Xml +{ + public class XmlNodeFormatter : IValueFormatter + { + public bool CanHandle(object value) + { + return value is XmlNode; + } + + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + string outerXml = ((XmlNode)value).OuterXml; + + int maxLength = 20; + + if(outerXml.Length > maxLength) + { + outerXml = outerXml.Substring(0, maxLength).TrimEnd() + "..."; + } + + return outerXml.Escape(escapePlaceholders: true); + } + } +} diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeFormatter.cs.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeFormatter.cs.meta new file mode 100644 index 0000000..8e3203c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.Net40/Xml/XmlNodeFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b43049c07715a9418c41372fa616bd1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.asmdef b/Assets/Plugins/FluentAssertions/FluentAssertions.asmdef new file mode 100644 index 0000000..2ed681b --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.asmdef @@ -0,0 +1,10 @@ +{ + "name": "FluentAssertions", + "references": [], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/FluentAssertions.asmdef.meta b/Assets/Plugins/FluentAssertions/FluentAssertions.asmdef.meta new file mode 100644 index 0000000..bf1dd8e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/FluentAssertions.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 75159f8081e8d4e48b0048ffc41722d6 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/LICENSE b/Assets/Plugins/FluentAssertions/LICENSE new file mode 100644 index 0000000..37ec93a --- /dev/null +++ b/Assets/Plugins/FluentAssertions/LICENSE @@ -0,0 +1,191 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "[]" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same "printed page" as the copyright notice for easier identification within +third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Assets/Plugins/FluentAssertions/LICENSE.meta b/Assets/Plugins/FluentAssertions/LICENSE.meta new file mode 100644 index 0000000..ef8f879 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/LICENSE.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 494e1af59799d1341912669d678ba4b2 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/README.md b/Assets/Plugins/FluentAssertions/README.md new file mode 100644 index 0000000..8c6dc22 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/README.md @@ -0,0 +1,15 @@ +[![](https://ci.appveyor.com/api/projects/status/h60mq3e5uf5tuout/branch/master?svg=true)](https://ci.appveyor.com/project/dennisdoomen/fluentassertions/branch/master) +[![](https://img.shields.io/github/release/FluentAssertions/FluentAssertions.svg?label=latest%20release)](https://github.com/FluentAssertions/FluentAssertions/releases/latest) +[![](https://img.shields.io/nuget/dt/FluentAssertions.svg?label=nuget%20downloads)](https://www.nuget.org/packages/FluentAssertions) +[![](https://img.shields.io/librariesio/dependents/nuget/FluentAssertions.svg?label=dependent%20libraries)](https://libraries.io/nuget/FluentAssertions) +![](https://img.shields.io/badge/release%20strategy-githubflow-orange.svg) + +# What is this and why do I need this? +See https://www.fluentassertions.com for background information, usage documentation, an extensibility guide, support information and more tips & tricks. + +# How do I build this? +Install Visual Studio 2017 or JetBrains Rider 2017.1 and Build Tools 2017 and run + +`build.ps1` + + diff --git a/Assets/Plugins/FluentAssertions/README.md.meta b/Assets/Plugins/FluentAssertions/README.md.meta new file mode 100644 index 0000000..66ff338 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 726c63f9b29f850489623a0a9ee60b70 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared.meta b/Assets/Plugins/FluentAssertions/Shared.meta new file mode 100644 index 0000000..4df11f7 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b781bc6f57e31db40b5376b9ba2cc22e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/AssertionExtensions.Actions.cs b/Assets/Plugins/FluentAssertions/Shared/AssertionExtensions.Actions.cs new file mode 100644 index 0000000..26c4dc0 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/AssertionExtensions.Actions.cs @@ -0,0 +1,222 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; + +using FluentAssertions.Common; +using FluentAssertions.Specialized; + +namespace FluentAssertions +{ + public static partial class AssertionExtensions + { + private static readonly AggregateExceptionExtractor extractor = new AggregateExceptionExtractor(); + + /// + /// Asserts that the throws the exact exception (and not a derived exception type). + /// + /// A reference to the method or property. + /// + /// The type of the exception it should throw. + /// + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + /// + /// Returns an object that allows asserting additional members of the thrown exception. + /// + public static ExceptionAssertions ShouldThrowExactly(this Action action, string because = "", + params object[] becauseArgs) + where TException : Exception + { + var exceptionAssertions = action.ShouldThrow(because, becauseArgs); + exceptionAssertions.Which.GetType().Should().Be(because, becauseArgs); + return exceptionAssertions; + } + + /// + /// Asserts that the throws the exact exception (and not a derived exception type). + /// + /// A reference to the method or property. + /// + /// The type of the exception it should throw. + /// + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + /// + /// Returns an object that allows asserting additional members of the thrown exception. + /// + public static ExceptionAssertions ShouldThrowExactly(this Func asyncAction, string because = "", + params object[] becauseArgs) + where TException : Exception + { + var exceptionAssertions = asyncAction.ShouldThrow(because, becauseArgs); + exceptionAssertions.Which.GetType().Should().Be(because, becauseArgs); + return exceptionAssertions; + } + + /// + /// Asserts that the throws an exception. + /// + /// A reference to the method or property. + /// + /// The type of the exception it should throw. + /// + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + /// + /// Returns an object that allows asserting additional members of the thrown exception. + /// + public static ExceptionAssertions ShouldThrow(this Action action, string because = "", + params object[] becauseArgs) + where TException : Exception + { + return new ActionAssertions(action, extractor).ShouldThrow(because, becauseArgs); + } + + /// + /// Asserts that the does not throw a particular exception. + /// + /// The current method or property. + /// + /// The type of the exception it should not throw. Any other exceptions are ignored and will satisfy the assertion. + /// + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public static void ShouldNotThrow(this Action action, string because = "", params object[] becauseArgs) + where TException : Exception + { + new ActionAssertions(action, extractor).ShouldNotThrow(because, becauseArgs); + } + + /// + /// Asserts that the does not throw any exception at all. + /// + /// The current method or property. + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public static void ShouldNotThrow(this Action action, string because = "", params object[] becauseArgs) + { + new ActionAssertions(action, extractor).ShouldNotThrow(because, becauseArgs); + } + + /// + /// Asserts that the throws an exception. + /// + /// A reference to the method or property. + /// + /// The type of the exception it should throw. + /// + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + /// + /// Returns an object that allows asserting additional members of the thrown exception. + /// + public static ExceptionAssertions ShouldThrow(this Func asyncAction, string because = "", + params object[] becauseArgs) + where TException : Exception + { + return new AsyncFunctionAssertions(asyncAction, extractor).ShouldThrow(because, becauseArgs); + } + + /// + /// Asserts that the does not throw a particular exception. + /// + /// The current method or property. + /// + /// The type of the exception it should not throw. Any other exceptions are ignored and will satisfy the assertion. + /// + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public static void ShouldNotThrow(this Func asyncAction, string because = "", params object[] becauseArgs) + { + new AsyncFunctionAssertions(asyncAction, extractor).ShouldNotThrow(because, becauseArgs); + } + + /// + /// Asserts that the does not throw any exception at all. + /// + /// The current method or property. + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public static void ShouldNotThrow(this Func asyncAction, string because = "", params object[] becauseArgs) + { + new AsyncFunctionAssertions(asyncAction, extractor).ShouldNotThrow(because, becauseArgs); + } + + private class AggregateExceptionExtractor : IExtractExceptions + { + public IEnumerable OfType(Exception actualException) where T : Exception + { + if (typeof(T).IsSameOrInherits(typeof(AggregateException))) + { + var exception = actualException as T; + + return (exception == null) ? Enumerable.Empty() : new[] { exception }; + } + + return GetExtractedExceptions(actualException); + } + + private static List GetExtractedExceptions(Exception actualException) + where T : Exception + { + var exceptions = new List(); + + var aggregateException = actualException as AggregateException; + if (aggregateException != null) + { + var flattenedExceptions = aggregateException.Flatten(); + + exceptions.AddRange(flattenedExceptions.InnerExceptions.OfType()); + } + else if (actualException is T) + { + exceptions.Add((T)actualException); + } + + return exceptions; + } + } + } +} diff --git a/Assets/Plugins/FluentAssertions/Shared/AssertionExtensions.Actions.cs.meta b/Assets/Plugins/FluentAssertions/Shared/AssertionExtensions.Actions.cs.meta new file mode 100644 index 0000000..a3e5c48 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/AssertionExtensions.Actions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 988088d8b6a099e44862fb547c431a2c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/AssertionExtensions.cs b/Assets/Plugins/FluentAssertions/Shared/AssertionExtensions.cs new file mode 100644 index 0000000..ea1fc94 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/AssertionExtensions.cs @@ -0,0 +1,762 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Linq; +using System.Reflection; +using System.Xml.Linq; +using FluentAssertions.Collections; +using FluentAssertions.Equivalency; +using FluentAssertions.Events; +using FluentAssertions.Numeric; +using FluentAssertions.Primitives; +using FluentAssertions.Reflection; +using FluentAssertions.Types; +using FluentAssertions.Xml; +using JetBrains.Annotations; + +#if !SILVERLIGHT && !PORTABLE +using System.Linq.Expressions; +using FluentAssertions.Specialized; +#endif +#if SILVERLIGHT || WINRT || PORTABLE || CORE_CLR +using System.ComponentModel; +#endif +#if NET45 || WINRT || CORE_CLR +using System.Threading.Tasks; + +#endif + +namespace FluentAssertions +{ + /// + /// Contains extension methods for custom assertions in unit tests. + /// + [DebuggerNonUserCode] + public static partial class AssertionExtensions + { + /// + /// Invokes the specified action on an subject so that you can chain it with any of the ShouldThrow or ShouldNotThrow + /// overloads. + /// + [Pure] + public static Action Invoking(this T subject, Action action) + { + return () => action(subject); + } + +#if NET45 || WINRT || CORE_CLR + [Pure] + public static Func Awaiting(this T subject, Func action) + { + return () => action(subject); + } +#endif + +#if !SILVERLIGHT && !PORTABLE + + /// + /// Provides methods for asserting the execution time of a method or property. + /// + /// The object that exposes the method or property. + /// A reference to the method or property to measure the execution time of. + /// + /// Returns an object for asserting that the execution time matches certain conditions. + /// + //[MustUseReturnValue /* do not use Pure because this method executes the action before returning to the caller */] + public static MemberExecutionTimeAssertions ExecutionTimeOf(this T subject, Expression> action) + { + return new MemberExecutionTimeAssertions(subject, action); + } + + /// + /// Provides methods for asserting the execution time of a method or property. + /// + /// A reference to the method or property to measure the execution time of. + /// + /// Returns an object for asserting that the execution time matches certain conditions. + /// + //[MustUseReturnValue /* do not use Pure because this method executes the action before returning to the caller */] + public static ExecutionTimeAssertions ExecutionTime(this Action action) + { + return new ExecutionTimeAssertions(action); + } + +#endif + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static AssemblyAssertions Should(this Assembly assembly) + { + return new AssemblyAssertions(assembly); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static XDocumentAssertions Should(this XDocument actualValue) + { + return new XDocumentAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static XElementAssertions Should(this XElement actualValue) + { + return new XElementAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static XAttributeAssertions Should(this XAttribute actualValue) + { + return new XAttributeAssertions(actualValue); + } + + /// + /// Forces enumerating a collection. Should be used to assert that a method that uses the + /// yield keyword throws a particular exception. + /// + [Pure] + public static Action Enumerating(this Func enumerable) + { + return () => ForceEnumeration(enumerable); + } + + /// + /// Forces enumerating a collection. Should be used to assert that a method that uses the + /// yield keyword throws a particular exception. + /// + [Pure] + public static Action Enumerating(this Func> enumerable) + { + return () => ForceEnumeration(enumerable); + } + + private static void ForceEnumeration(Func enumerable) + { + foreach (object _ in enumerable()) + { + // Do nothing + } + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static ObjectAssertions Should(this object actualValue) + { + return new ObjectAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static BooleanAssertions Should(this bool actualValue) + { + return new BooleanAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + [Pure] + public static NullableBooleanAssertions Should(this bool? actualValue) + { + return new NullableBooleanAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static GuidAssertions Should(this Guid actualValue) + { + return new GuidAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + [Pure] + public static NullableGuidAssertions Should(this Guid? actualValue) + { + return new NullableGuidAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static NonGenericCollectionAssertions Should(this IEnumerable actualValue) + { + return new NonGenericCollectionAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static GenericCollectionAssertions Should(this IEnumerable actualValue) + { + return new GenericCollectionAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static StringCollectionAssertions Should(this IEnumerable @this) + { + return new StringCollectionAssertions(@this); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static GenericDictionaryAssertions Should(this IDictionary actualValue) + { + return new GenericDictionaryAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static DateTimeAssertions Should(this DateTime actualValue) + { + return new DateTimeAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static DateTimeOffsetAssertions Should(this DateTimeOffset actualValue) + { + return new DateTimeOffsetAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + [Pure] + public static NullableDateTimeAssertions Should(this DateTime? actualValue) + { + return new NullableDateTimeAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + [Pure] + public static NullableDateTimeOffsetAssertions Should(this DateTimeOffset? actualValue) + { + return new NullableDateTimeOffsetAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static ComparableTypeAssertions Should(this IComparable comparableValue) + { + return new ComparableTypeAssertions(comparableValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static NumericAssertions Should(this int actualValue) + { + return new NumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + [Pure] + public static NullableNumericAssertions Should(this int? actualValue) + { + return new NullableNumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static NumericAssertions Should(this decimal actualValue) + { + return new NumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + [Pure] + public static NullableNumericAssertions Should(this decimal? actualValue) + { + return new NullableNumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static NumericAssertions Should(this byte actualValue) + { + return new NumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + [Pure] + public static NullableNumericAssertions Should(this byte? actualValue) + { + return new NullableNumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static NumericAssertions Should(this short actualValue) + { + return new NumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + [Pure] + public static NullableNumericAssertions Should(this short? actualValue) + { + return new NullableNumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static NumericAssertions Should(this long actualValue) + { + return new NumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + [Pure] + public static NullableNumericAssertions Should(this long? actualValue) + { + return new NullableNumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static NumericAssertions Should(this float actualValue) + { + return new NumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + [Pure] + public static NullableNumericAssertions Should(this float? actualValue) + { + return new NullableNumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static NumericAssertions Should(this double actualValue) + { + return new NumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + [Pure] + public static NullableNumericAssertions Should(this double? actualValue) + { + return new NullableNumericAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static StringAssertions Should(this string actualValue) + { + return new StringAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current . + /// + [Pure] + public static SimpleTimeSpanAssertions Should(this TimeSpan actualValue) + { + return new SimpleTimeSpanAssertions(actualValue); + } + + /// + /// Returns an object that can be used to assert the + /// current nullable . + /// + [Pure] + public static NullableSimpleTimeSpanAssertions Should(this TimeSpan? actualValue) + { + return new NullableSimpleTimeSpanAssertions(actualValue); + } + + /// + /// Returns a object that can be used to assert the + /// current . + /// + [Pure] + public static TypeAssertions Should(this Type subject) + { + return new TypeAssertions(subject); + } + + /// + /// Returns a object that can be used to assert the + /// current . + /// + [Pure] + public static TypeSelectorAssertions Should(this TypeSelector typeSelector) + { + return new TypeSelectorAssertions(typeSelector.ToArray()); + } + + /// + /// Returns a object that can be used to assert the current . + /// + /// + [Pure] + public static ConstructorInfoAssertions Should(this ConstructorInfo constructorInfo) + { + return new ConstructorInfoAssertions(constructorInfo); + } + + /// + /// Returns a object that can be used to assert the current . + /// + /// + [Pure] + public static MethodInfoAssertions Should(this MethodInfo methodInfo) + { + return new MethodInfoAssertions(methodInfo); + } + + /// + /// Returns a object that can be used to assert the methods returned by the + /// current . + /// + /// + [Pure] + public static MethodInfoSelectorAssertions Should(this MethodInfoSelector methodSelector) + { + return new MethodInfoSelectorAssertions(methodSelector.ToArray()); + } + + /// + /// Returns a object that can be used to assert the + /// current . + /// + /// + [Pure] + public static PropertyInfoAssertions Should(this PropertyInfo propertyInfo) + { + return new PropertyInfoAssertions(propertyInfo); + } + + /// + /// Returns a object that can be used to assert the properties returned by the + /// current . + /// + /// + [Pure] + public static PropertyInfoSelectorAssertions Should(this PropertyInfoSelector propertyInfoSelector) + { + return new PropertyInfoSelectorAssertions(propertyInfoSelector.ToArray()); + } + + /// + /// Asserts that all elements in a collection of objects are equivalent to a given object. + /// + /// + /// Objects within the collection are equivalent to given object when both object graphs have equally named properties with the same + /// value, irrespective of the type of those objects. Two properties are also equal if one type can be converted to another + /// and the result is equal. + /// The type of a collection property is ignored as long as the collection implements and all + /// items in the collection are structurally equal. + /// Notice that actual behavior is determined by the global defaults managed by . + /// + /// + /// An optional formatted phrase as is supported by explaining why the + /// assertion is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static void ShouldAllBeEquivalentTo(this IEnumerable subject, object expectation, + string because = "", params object[] becauseArgs) + { + subject.ShouldAllBeEquivalentTo(expectation, options => options, because, becauseArgs); + } + + /// + /// Asserts that all elements in a collection of objects are equivalent to a given object. + /// + /// + /// Objects within the collection are equivalent to given object when both object graphs have equally named properties with the same + /// value, irrespective of the type of those objects. Two properties are also equal if one type can be converted to another + /// and the result is equal. + /// The type of a collection property is ignored as long as the collection implements and all + /// items in the collection are structurally equal. + /// Notice that actual behavior is determined by the global defaults managed by . + /// + /// + /// A reference to the configuration object that can be used + /// to influence the way the object graphs are compared. You can also provide an alternative instance of the + /// class. The global defaults are determined by the + /// class. + /// + /// + /// An optional formatted phrase as is supported by explaining why the + /// assertion is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static void ShouldAllBeEquivalentTo(this IEnumerable subject, object expectation, + Func, EquivalencyAssertionOptions> config, string because = "", + params object[] becauseArgs) + { + IEnumerable repeatedExpectation = RepeatAsManyAs(expectation, subject); + + subject.ShouldAllBeEquivalentTo(repeatedExpectation, config, because, becauseArgs); + } + + private static IEnumerable RepeatAsManyAs(object value, IEnumerable enumerable) + { + if (enumerable == null) + { + return Enumerable.Empty(); + } + + return RepeatAsManyAsIterator(value, enumerable); + } + + private static IEnumerable RepeatAsManyAsIterator(object value, IEnumerable enumerable) + { + using (IEnumerator enumerator = enumerable.GetEnumerator()) + { + while (enumerator.MoveNext()) + { + yield return value; + } + } + } + + /// + /// Asserts that a collection of objects is equivalent to another collection of objects. + /// + /// + /// Objects within the collections are equivalent when both object graphs have equally named properties with the same + /// value, irrespective of the type of those objects. Two properties are also equal if one type can be converted to another + /// and the result is equal. + /// The type of a collection property is ignored as long as the collection implements and all + /// items in the collection are structurally equal. + /// Notice that actual behavior is determined by the global defaults managed by . + /// + /// + /// An optional formatted phrase as is supported by explaining why the + /// assertion is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static void ShouldAllBeEquivalentTo(this IEnumerable subject, IEnumerable expectation, + string because = "", params object[] becauseArgs) + { + subject.ShouldAllBeEquivalentTo(expectation, options => options, because, becauseArgs); + } + + /// + /// Asserts that a collection of objects is equivalent to another collection of objects. + /// + /// + /// Objects within the collections are equivalent when both object graphs have equally named properties with the same + /// value, irrespective of the type of those objects. Two properties are also equal if one type can be converted to another + /// and the result is equal. + /// The type of a collection property is ignored as long as the collection implements and all + /// items in the collection are structurally equal. + /// + /// + /// A reference to the configuration object that can be used + /// to influence the way the object graphs are compared. You can also provide an alternative instance of the + /// class. The global defaults are determined by the + /// class. + /// + /// + /// An optional formatted phrase as is supported by explaining why the + /// assertion is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static void ShouldAllBeEquivalentTo(this IEnumerable subject, IEnumerable expectation, + Func, EquivalencyAssertionOptions> config, string because = "", + params object[] becauseArgs) + { + EquivalencyAssertionOptions> options = config(AssertionOptions.CloneDefaults()).AsCollection(); + + var context = new EquivalencyValidationContext + { + Subject = subject, + Expectation = expectation, + RootIsCollection = true, + CompileTimeType = typeof(IEnumerable), + Because = because, + BecauseArgs = becauseArgs, + Tracer = options.TraceWriter + }; + + new EquivalencyValidator(options).AssertEquality(context); + } + + /// + /// Asserts that an object is equivalent to another object. + /// + /// + /// Objects are equivalent when both object graphs have equally named properties with the same value, + /// irrespective of the type of those objects. Two properties are also equal if one type can be converted to another and the result is equal. + /// The type of a collection property is ignored as long as the collection implements and all + /// items in the collection are structurally equal. + /// Notice that actual behavior is determined by the global defaults managed by . + /// + /// + /// An optional formatted phrase as is supported by explaining why the + /// assertion is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static void ShouldBeEquivalentTo(this T subject, object expectation, string because = "", + params object[] becauseArgs) + { + ShouldBeEquivalentTo(subject, expectation, config => config, because, becauseArgs); + } + + /// + /// Asserts that an object is equivalent to another object. + /// + /// + /// Objects are equivalent when both object graphs have equally named properties with the same value, + /// irrespective of the type of those objects. Two properties are also equal if one type can be converted to another and the result is equal. + /// The type of a collection property is ignored as long as the collection implements and all + /// items in the collection are structurally equal. + /// + /// + /// A reference to the configuration object that can be used + /// to influence the way the object graphs are compared. You can also provide an alternative instance of the + /// class. The global defaults are determined by the + /// class. + /// + /// + /// An optional formatted phrase as is supported by explaining why the + /// assertion is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public static void ShouldBeEquivalentTo(this T subject, object expectation, + Func, EquivalencyAssertionOptions> config, string because = "", + params object[] becauseArgs) + { + IEquivalencyAssertionOptions options = config(AssertionOptions.CloneDefaults()); + + var context = new EquivalencyValidationContext + { + Subject = subject, + Expectation = expectation, + CompileTimeType = typeof(T), + Because = because, + BecauseArgs = becauseArgs, + Tracer = options.TraceWriter + }; + + new EquivalencyValidator(options).AssertEquality(context); + } + + + /// + /// Safely casts the specified object to the type specified through . + /// + /// + /// Has been introduced to allow casting objects without breaking the fluent API. + /// + /// + [Pure] + public static TTo As(this object subject) + { + return subject is TTo ? (TTo)subject : default(TTo); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Shared/AssertionExtensions.cs.meta b/Assets/Plugins/FluentAssertions/Shared/AssertionExtensions.cs.meta new file mode 100644 index 0000000..f9615e7 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/AssertionExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4abfd052c7ce085449ed6c501f6368d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/Execution.meta b/Assets/Plugins/FluentAssertions/Shared/Execution.meta new file mode 100644 index 0000000..60527a5 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Execution.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1e6f8093c4534b14b9bb0ab4e25a1ecc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/Execution/AssertionFailedException.cs b/Assets/Plugins/FluentAssertions/Shared/Execution/AssertionFailedException.cs new file mode 100644 index 0000000..f8c6044 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Execution/AssertionFailedException.cs @@ -0,0 +1,31 @@ +using System; + +#if NET40 || NET45 +using System.Runtime.Serialization; +#endif + +namespace FluentAssertions.Execution +{ + /// + /// Represents the default exception in case no test framework is configured. + /// +#if NET40 || NET45 + [Serializable] +#endif + public class AssertionFailedException : Exception + { + public AssertionFailedException(string message) : base(message) + { + + } + +#if NET40 || NET45 + protected AssertionFailedException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + + } +#endif + + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Shared/Execution/AssertionFailedException.cs.meta b/Assets/Plugins/FluentAssertions/Shared/Execution/AssertionFailedException.cs.meta new file mode 100644 index 0000000..b458483 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Execution/AssertionFailedException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d3154cd89c416f4985ff12f4d94d795 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/Execution/FallbackTestFramework.cs b/Assets/Plugins/FluentAssertions/Shared/Execution/FallbackTestFramework.cs new file mode 100644 index 0000000..ad9f0f8 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Execution/FallbackTestFramework.cs @@ -0,0 +1,24 @@ +namespace FluentAssertions.Execution +{ + /// + /// Throws a generic exception in case no other test harness is detected. + /// + internal class FallbackTestFramework : ITestFramework + { + /// + /// Gets a value indicating whether the corresponding test framework is currently available. + /// + public bool IsAvailable + { + get { return true; } + } + + /// + /// Throws a framework-specific exception to indicate a failing unit test. + /// + public void Throw(string message) + { + throw new AssertionFailedException(message); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Shared/Execution/FallbackTestFramework.cs.meta b/Assets/Plugins/FluentAssertions/Shared/Execution/FallbackTestFramework.cs.meta new file mode 100644 index 0000000..84d6765 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Execution/FallbackTestFramework.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fcdf55e7744fbf94392c871430a20c6d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/Execution/ITestFramework.cs b/Assets/Plugins/FluentAssertions/Shared/Execution/ITestFramework.cs new file mode 100644 index 0000000..5dacf51 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Execution/ITestFramework.cs @@ -0,0 +1,18 @@ +namespace FluentAssertions.Execution +{ + /// + /// Represents an abstraction of a particular test framework such as MSTest, nUnit, etc. + /// + internal interface ITestFramework + { + /// + /// Gets a value indicating whether the corresponding test framework is currently available. + /// + bool IsAvailable { get; } + + /// + /// Throws a framework-specific exception to indicate a failing unit test. + /// + void Throw(string message); + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Shared/Execution/ITestFramework.cs.meta b/Assets/Plugins/FluentAssertions/Shared/Execution/ITestFramework.cs.meta new file mode 100644 index 0000000..60133a0 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Execution/ITestFramework.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 89d10dfcf7962884ebc19af121141945 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/Execution/LateBoundTestFramework.cs b/Assets/Plugins/FluentAssertions/Shared/Execution/LateBoundTestFramework.cs new file mode 100644 index 0000000..769f8e7 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Execution/LateBoundTestFramework.cs @@ -0,0 +1,152 @@ +using System; +using System.IO; +using System.Linq; +using System.Reflection; + +#if WINRT + +using Windows.Storage; +using System.Threading.Tasks; +using System.Collections.Generic; + +#endif + + +namespace FluentAssertions.Execution +{ + internal abstract class LateBoundTestFramework : ITestFramework + { + private Assembly assembly = null; + + public void Throw(string message) + { + Type exceptionType = assembly.GetType(ExceptionFullName); + if (exceptionType == null) + { + throw new Exception(string.Format( + "Failed to create the assertion exception for the current test framework: \"{0}, {1}\"", + ExceptionFullName, assembly.FullName)); + } + + throw (Exception)Activator.CreateInstance(exceptionType, message); + } + + public bool IsAvailable + { + get + { +#if CORE_CLR + // For CoreCLR, we need to attempt to load the assembly + try + { + assembly = Assembly.Load(new AssemblyName(AssemblyName) { Version = new Version(0,0,0,0)}); + return assembly != null; + } + catch + { + return false; + } +#else + string prefix = AssemblyName + ","; + +#if !PORTABLE + assembly = AppDomain.CurrentDomain + .GetAssemblies() + .FirstOrDefault(a => a.FullName.StartsWith(prefix, StringComparison.CurrentCultureIgnoreCase)); +#endif + return (assembly != null); +#endif + } + } + + protected abstract string AssemblyName { get; } + protected abstract string ExceptionFullName { get; } + } + +#if WINRT + /// + /// Simulates the AppDomain class that is not available in Windows Store apps. + /// + internal sealed class AppDomain + { + public static AppDomain CurrentDomain { get; private set; } + + static AppDomain() + { + CurrentDomain = new AppDomain(); + } + + public Assembly[] GetAssemblies() + { + return GetAssemblyListAsync().Result.ToArray(); + } + + private async Task> GetAssemblyListAsync() + { + StorageFolder folder = await TryToGetFolderFromAssemblyLocation(); + if (folder == null) + { + folder = TryToGetFolderFromPackageLocation(); + } + + if (folder == null) + { + throw new Exception("Could not determine the current directory to detect the test framework"); + } + + IEnumerable assemblies = + from file in await folder.GetFilesAsync().AsTask().ConfigureAwait(false) + where (file.FileType == ".dll") || (file.FileType == ".exe") + let assm = TryLoadAssembly(new AssemblyName() + { + Name = file.DisplayName + }) + where assm != null + select assm; + + return assemblies.ToArray(); + } + + private static Assembly TryLoadAssembly(AssemblyName name) + { + try + { + return Assembly.Load(name); + } + catch (Exception) + { + return null; + } + } + + private StorageFolder TryToGetFolderFromPackageLocation() + { + try + { + return Windows.ApplicationModel.Package.Current.InstalledLocation; + } + catch + { + return null; + } + } + + private static async Task TryToGetFolderFromAssemblyLocation() + { + try + { + string assemblyPath = ((dynamic)typeof(LateBoundTestFramework).GetTypeInfo().Assembly).Location; + string folderPath = Path.GetDirectoryName(assemblyPath); + + return await StorageFolder.GetFolderFromPathAsync(folderPath); + } + catch + { + return null; + } + } + } +#endif + + +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Shared/Execution/LateBoundTestFramework.cs.meta b/Assets/Plugins/FluentAssertions/Shared/Execution/LateBoundTestFramework.cs.meta new file mode 100644 index 0000000..33d5436 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Execution/LateBoundTestFramework.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 271209e710d51164db18da8016cbe71c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/Formatting.meta b/Assets/Plugins/FluentAssertions/Shared/Formatting.meta new file mode 100644 index 0000000..479036b --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Formatting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 68478c998d6b6bd46bf89d419a2387c4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/Formatting/XAttributeValueFormatter.cs b/Assets/Plugins/FluentAssertions/Shared/Formatting/XAttributeValueFormatter.cs new file mode 100644 index 0000000..6930e6e --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Formatting/XAttributeValueFormatter.cs @@ -0,0 +1,41 @@ +using System.Collections.Generic; +using System.Xml.Linq; + +namespace FluentAssertions.Formatting +{ + public class XAttributeValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return (value is XAttribute); + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + var attribute = (XAttribute) value; + return attribute.ToString(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Shared/Formatting/XAttributeValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Shared/Formatting/XAttributeValueFormatter.cs.meta new file mode 100644 index 0000000..9034e37 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Formatting/XAttributeValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c706e99af623784aa9332d7eeb4a201 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/Formatting/XDocumentValueFormatter.cs b/Assets/Plugins/FluentAssertions/Shared/Formatting/XDocumentValueFormatter.cs new file mode 100644 index 0000000..ecb338c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Formatting/XDocumentValueFormatter.cs @@ -0,0 +1,48 @@ +using System.Collections.Generic; +using System.Xml.Linq; + +namespace FluentAssertions.Formatting +{ + public class XDocumentValueFormatter : IValueFormatter + { + public bool CanHandle(object value) + { + return (value is XDocument); + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, + int nestedPropertyLevel = 0) + { + var document = (XDocument)value; + + return (document.Root != null) + ? FormatDocumentWithRoot(document) + : FormatDocumentWithoutRoot(); + } + + private string FormatDocumentWithRoot(XDocument document) + { + return Formatter.ToString(document.Root); + } + + private string FormatDocumentWithoutRoot() + { + return "[XML document without root element]"; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Shared/Formatting/XDocumentValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Shared/Formatting/XDocumentValueFormatter.cs.meta new file mode 100644 index 0000000..67dae49 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Formatting/XDocumentValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0effb8e21f280b4e99a1bd074790e9b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/Formatting/XElementValueFormatter.cs b/Assets/Plugins/FluentAssertions/Shared/Formatting/XElementValueFormatter.cs new file mode 100644 index 0000000..23cba9f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Formatting/XElementValueFormatter.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Xml.Linq; + +using FluentAssertions.Common; + +using System.Linq; + +namespace FluentAssertions.Formatting +{ + public class XElementValueFormatter : IValueFormatter + { + /// + /// Indicates whether the current can handle the specified . + /// + /// The value for which to create a . + /// + /// true if the current can handle the specified value; otherwise, false. + /// + public bool CanHandle(object value) + { + return (value is XElement); + } + + /// + /// Returns a that represents this instance. + /// + /// The value for which to create a . + /// + /// + /// A collection of objects that + /// + /// + /// The level of nesting for the supplied value. This is used for indenting the format string for objects that have + /// no override. + /// + /// + /// A that represents this instance. + /// + public string ToString(object value, bool useLineBreaks, IList processedObjects = null, int nestedPropertyLevel = 0) + { + var element = (XElement) value; + + return element.HasElements + ? FormatElementWithChildren(element) + : FormatElementWithoutChildren(element); + } + + private static string FormatElementWithoutChildren(XElement element) + { + return element.ToString().Escape(escapePlaceholders: true); + } + + private static string FormatElementWithChildren(XElement element) + { + string [] lines = SplitIntoSeparateLines(element); + + // Can't use env.newline because the input doc may have unix or windows style + // line-breaks + string firstLine = lines.First().RemoveNewLines(); + string lastLine = lines.Last().RemoveNewLines(); + + string formattedElement = firstLine + "..." + lastLine; + return formattedElement.Escape(escapePlaceholders: true); + } + + private static string [] SplitIntoSeparateLines(XElement element) + { + string formattedXml = element.ToString(); + return formattedXml.Split(new [] { Environment.NewLine }, StringSplitOptions.None); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Shared/Formatting/XElementValueFormatter.cs.meta b/Assets/Plugins/FluentAssertions/Shared/Formatting/XElementValueFormatter.cs.meta new file mode 100644 index 0000000..f60d4d8 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Formatting/XElementValueFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 107369ff921c9404293b33c91a9e40a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/SolutionInfo.cs b/Assets/Plugins/FluentAssertions/Shared/SolutionInfo.cs new file mode 100644 index 0000000..fa482fd --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/SolutionInfo.cs @@ -0,0 +1,9 @@ +using System.Reflection; + +[assembly: AssemblyCompany("www.continuousimprover.com")] +[assembly: AssemblyCopyright("Copyright Dennis Doomen 2010-2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: AssemblyVersion("4.13.1.0")] +[assembly: AssemblyFileVersion("4.13.1.0")] +[assembly: AssemblyInformationalVersion("4.13.1+Branch.master.Sha.d57a300ce206c5d1443070ec62a027e35a53b271")] diff --git a/Assets/Plugins/FluentAssertions/Shared/SolutionInfo.cs.meta b/Assets/Plugins/FluentAssertions/Shared/SolutionInfo.cs.meta new file mode 100644 index 0000000..8a567b8 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/SolutionInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd72cce85ee367944b05517b0784d520 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/Specialized.meta b/Assets/Plugins/FluentAssertions/Shared/Specialized.meta new file mode 100644 index 0000000..24a4aaa --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Specialized.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 79b1841ea56000a4d8470691ae6b40f2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/Specialized/AssemblyAssertions.cs b/Assets/Plugins/FluentAssertions/Shared/Specialized/AssemblyAssertions.cs new file mode 100644 index 0000000..f8cdf6b --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Specialized/AssemblyAssertions.cs @@ -0,0 +1,122 @@ +using System; +using System.Linq; +using System.Reflection; +using FluentAssertions.Execution; +using FluentAssertions.Primitives; + +namespace FluentAssertions.Reflection +{ + /// + /// Contains a number of methods to assert that an is in the expected state. + /// + public class AssemblyAssertions : ReferenceTypeAssertions + { + /// + /// Initializes a new instance of the class. + /// + public AssemblyAssertions(Assembly assembly) + { + Subject = assembly; + } + +#if !PORTABLE && !SILVERLIGHT && !WINRT && !CORE_CLR + + /// + /// Asserts that an assembly does not reference the specified assembly. + /// + /// The assembly which should not be referenced. + public void NotReference(Assembly assembly) + { + NotReference(assembly, String.Empty); + } + + /// + /// Asserts that an assembly does not reference the specified assembly. + /// + /// The assembly which should not be referenced. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public void NotReference(Assembly assembly, string because, params string[] becauseArgs) + { + var subjectName = Subject.GetName().Name; + var assemblyName = assembly.GetName().Name; + + var references = Subject.GetReferencedAssemblies().Select(x => x.Name); + + Execute.Assertion + .BecauseOf(because, becauseArgs) + .ForCondition(references.All(x => x != assemblyName)) + .FailWith("Assembly {0} should not reference assembly {1}{reason}", subjectName, assemblyName); + } + + /// + /// Asserts that an assembly references the specified assembly. + /// + /// The assembly which should be referenced. + public void Reference(Assembly assembly) + { + Reference(assembly, String.Empty); + } + + /// + /// Asserts that an assembly references the specified assembly. + /// + /// The assembly which should be referenced. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public void Reference(Assembly assembly, string because, params string[] becauseArgs) + { + var subjectName = Subject.GetName().Name; + var assemblyName = assembly.GetName().Name; + + var references = Subject.GetReferencedAssemblies().Select(x => x.Name); + + Execute.Assertion + .BecauseOf(because, becauseArgs) + .ForCondition(references.Any(x => x == assemblyName)) + .FailWith("Assembly {0} should reference assembly {1}{reason}, but it does not", subjectName, assemblyName); + } +#endif + /// + /// Asserts that the Assembly defines a type called and . + /// + /// The namespace of the class. + /// The name of the class. + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// Zero or more objects to format using the placeholders in . + public AndWhichConstraint DefineType(string @namespace, string name, string because = "", params object[] becauseArgs) + { +#if !NETFX_CORE && !WINRT + var foundType = Subject.GetTypes().SingleOrDefault(t => t.Namespace == @namespace && t.Name == name); +#else + var typeInfo = Subject.DefinedTypes.SingleOrDefault(t => t.Namespace == @namespace && t.Name == name); + var foundType = typeInfo == null ? null : typeInfo.AsType(); +#endif + Execute.Assertion.ForCondition(foundType != null) + .BecauseOf(because, becauseArgs) + .FailWith("Expected assembly {0} to define type {1}.{2}, but it does not.", Subject.FullName, + @namespace, name); + + return new AndWhichConstraint(this, foundType); + } + + /// + /// Returns the type of the subject the assertion applies on. + /// + protected override string Context + { + get { return "assembly"; } + } + } +} diff --git a/Assets/Plugins/FluentAssertions/Shared/Specialized/AssemblyAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Shared/Specialized/AssemblyAssertions.cs.meta new file mode 100644 index 0000000..8069042 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Specialized/AssemblyAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7515171981e18884a975dd66d0ce59b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/Specialized/ExecutionTimeAssertions.cs b/Assets/Plugins/FluentAssertions/Shared/Specialized/ExecutionTimeAssertions.cs new file mode 100644 index 0000000..e86d63f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Specialized/ExecutionTimeAssertions.cs @@ -0,0 +1,77 @@ +using System; +using System.Diagnostics; +using System.Linq.Expressions; +using FluentAssertions.Execution; + + +#if !PORTABLE && !SILVERLIGHT +namespace FluentAssertions.Specialized +{ + /// + /// Provides methods for asserting that the execution time of an satisfies certain conditions. + /// + public class ExecutionTimeAssertions + { + private readonly TimeSpan executionTime; + + /// + /// Initializes a new instance of the class. + /// + /// The action of which the execution time must be asserted. + public ExecutionTimeAssertions(Action action) + { + ActionDescription = "the action"; + + var stopwatch = Stopwatch.StartNew(); + action(); + stopwatch.Stop(); + + executionTime = stopwatch.Elapsed; + } + + protected string ActionDescription { get; set; } + + /// + /// Asserts that the execution time of the operation does not exceed a specified amount of time. + /// + /// + /// The maximum allowed duration. + /// + /// + /// A formatted phrase explaining why the assertion should be satisfied. If the phrase does not + /// start with the word because, it is prepended to the message. + /// + /// + /// Zero or more values to use for filling in any compatible placeholders. + /// + public void ShouldNotExceed(TimeSpan maxDuration, string because = "", params object[] becauseArgs) + { + if (executionTime > maxDuration) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .FailWith("Execution of " + ActionDescription + " should not exceed {0}{reason}, but it required {1}", + maxDuration, executionTime); + } + } + } + + /// + /// Provides methods for asserting that the execution time of an object member satisfies certain conditions. + /// + /// + public class MemberExecutionTimeAssertions : ExecutionTimeAssertions + { + /// + /// Initializes a new instance of the class. + /// + /// The object that exposes the method or property. + /// A reference to the method or property to measure the execution time of. + public MemberExecutionTimeAssertions(T subject, Expression> action) : + base(() => action.Compile()(subject)) + { + ActionDescription = "(" + action.Body + ")"; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Shared/Specialized/ExecutionTimeAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Shared/Specialized/ExecutionTimeAssertions.cs.meta new file mode 100644 index 0000000..ef79498 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Specialized/ExecutionTimeAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 92d84dff93dfaf74d8ac6b6b04fd2084 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/Xml.meta b/Assets/Plugins/FluentAssertions/Shared/Xml.meta new file mode 100644 index 0000000..0fe54fe --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Xml.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0d49a90c25b4d2f4f8c20fd5fa8ada9a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/Xml/XAttributeAssertions.cs b/Assets/Plugins/FluentAssertions/Shared/Xml/XAttributeAssertions.cs new file mode 100644 index 0000000..e06f1a0 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Xml/XAttributeAssertions.cs @@ -0,0 +1,124 @@ +using System.Diagnostics; +using System.Xml.Linq; +using FluentAssertions.Execution; +using FluentAssertions.Primitives; + +namespace FluentAssertions.Xml +{ + /// + /// Contains a number of methods to assert that an is in the expected state. + /// + [DebuggerNonUserCode] + public class XAttributeAssertions : ReferenceTypeAssertions + { + /// + /// Initializes a new instance of the class. + /// + public XAttributeAssertions(XAttribute attribute) + { + Subject = attribute; + } + + /// + /// Asserts that the current equals the attribute. + /// + /// The expected attribute + public AndConstraint Be(XAttribute expected) + { + return Be(expected, string.Empty); + } + + /// + /// Asserts that the current equals the attribute. + /// + /// The expected attribute + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Be(XAttribute expected, string because, params object [] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.Name.Equals(expected.Name) && Subject.Value.Equals(expected.Value)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected XML attribute to be {0}{reason}, but found {1}", expected, Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current does not equal the attribute, + /// using its implementation. + /// + /// The unexpected attribute + public AndConstraint NotBe(XAttribute unexpected) + { + return NotBe(unexpected, string.Empty); + } + + /// + /// Asserts that the current does not equal the attribute, + /// using its implementation. + /// + /// The unexpected attribute + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBe(XAttribute unexpected, string because, params object [] becauseArgs) + { + Execute.Assertion + .ForCondition(!Subject.Name.Equals(unexpected.Name) || !Subject.Value.Equals(unexpected.Value)) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect XML attribute to be {0}{reason}.", unexpected); + + return new AndConstraint(this); + } + + + /// + /// Asserts that the current has the specified value. + /// + /// The expected value + public AndConstraint HaveValue(string expected) + { + return HaveValue(expected, string.Empty); + } + + /// + /// Asserts that the current has the specified value. + /// + /// The expected value + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveValue(string expected, string because, params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.Value == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected XML attribute '{0}' to have value {1}{reason}, but found {2}.", + Subject.Name, expected, Subject.Value); + + return new AndConstraint(this); + } + + /// + /// Returns the type of the subject the assertion applies on. + /// + protected override string Context + { + get { return "XML attribute"; } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Shared/Xml/XAttributeAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Shared/Xml/XAttributeAssertions.cs.meta new file mode 100644 index 0000000..d9360b6 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Xml/XAttributeAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b1aa6236526d454d853470c0941f199 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/Xml/XDocumentAssertions.cs b/Assets/Plugins/FluentAssertions/Shared/Xml/XDocumentAssertions.cs new file mode 100644 index 0000000..3e686cd --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Xml/XDocumentAssertions.cs @@ -0,0 +1,338 @@ +using System; +using System.Diagnostics; +using System.Xml.Linq; + +using FluentAssertions.Common; +using FluentAssertions.Execution; +using FluentAssertions.Primitives; + +namespace FluentAssertions.Xml +{ + /// + /// Contains a number of methods to assert that an is in the expected state. + /// + [DebuggerNonUserCode] + public class XDocumentAssertions : ReferenceTypeAssertions + { + /// + /// Initializes a new instance of the class. + /// + public XDocumentAssertions(XDocument document) + { + Subject = document; + } + + /// + /// Asserts that the current equals the document, + /// using its implementation. + /// + /// The expected document + public AndConstraint Be(XDocument expected) + { + return Be(expected, string.Empty); + } + + /// + /// Asserts that the current equals the document, + /// using its implementation. + /// + /// The expected document + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Be(XDocument expected, string because, params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.IsSameOrEqualTo(expected)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected XML document to be {0}{reason}, but found {1}", expected, Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current does not equal the document, + /// using its implementation. + /// + /// The unexpected document + public AndConstraint NotBe(XDocument unexpected) + { + return NotBe(unexpected, string.Empty); + } + + /// + /// Asserts that the current does not equal the document, + /// using its implementation. + /// + /// The unexpected document + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBe(XDocument unexpected, string because, params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(!ReferenceEquals(Subject, null)) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect XML document to be {0}, but found .", unexpected); + + Execute.Assertion + .ForCondition(!Subject.Equals(unexpected)) + .BecauseOf(because, becauseArgs) + .FailWith("Did not expect XML document to be {0}{reason}.", unexpected); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is equivalent to the document, + /// using its implementation. + /// + /// The expected document + public AndConstraint BeEquivalentTo(XDocument expected) + { + return BeEquivalentTo(expected, string.Empty); + } + + /// + /// Asserts that the current is equivalent to the document, + /// using its implementation. + /// + /// The expected document + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeEquivalentTo(XDocument expected, string because, params object[] becauseArgs) + { + new XmlReaderValidator(Subject.CreateReader(), expected.CreateReader(), because, becauseArgs).Validate(true); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is not equivalent to the document, + /// using its implementation. + /// + /// The unexpected document + public AndConstraint NotBeEquivalentTo(XDocument unexpected) + { + return NotBeEquivalentTo(unexpected, string.Empty); + } + + /// + /// Asserts that the current is not equivalent to the document, + /// using its implementation. + /// + /// The unexpected document + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeEquivalentTo(XDocument unexpected, string because, params object[] becauseArgs) + { + new XmlReaderValidator(Subject.CreateReader(), unexpected.CreateReader(), because, becauseArgs).Validate(false); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current has a root element with the specified + /// name. + /// + /// The name of the expected root element of the current document. + public AndWhichConstraint HaveRoot(string expected) + { + return HaveRoot(expected, string.Empty); + } + + /// + /// Asserts that the current has a root element with the specified + /// name. + /// + /// The name of the expected root element of the current document. + public AndWhichConstraint HaveRoot(XName expected) + { + return HaveRoot(expected, string.Empty); + } + + /// + /// Asserts that the current has a root element with the specified + /// name. + /// + /// The name of the expected root element of the current document. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndWhichConstraint HaveRoot(string expected, string because, + params object[] becauseArgs) + { + if (expected == null) + { + throw new ArgumentNullException("expected", + "Cannot assert the document has a root element if the element name is *"); + } + + return HaveRoot(XNamespace.None + expected, because, becauseArgs); + } + + /// + /// Asserts that the current has a root element with the specified + /// name. + /// + /// The full name of the expected root element of the current document. + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndWhichConstraint HaveRoot(XName expected, string because, params object[] becauseArgs) + { + if (Subject == null) + { + throw new ArgumentNullException("subject", + "Cannot assert the document has a root element if the document itself is ."); + } + + if (expected == null) + { + throw new ArgumentNullException("expected", + "Cannot assert the document has a root element if the element name is *"); + } + + XElement root = Subject.Root; + + Execute.Assertion + .ForCondition((root != null) && (root.Name == expected)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected XML document to have root element \"" + expected.ToString().Escape(escapePlaceholders: true) + "\"{reason}" + + ", but found {0}.", Subject); + + return new AndWhichConstraint(this, root); + } + + /// + /// Asserts that the element of the current has a direct + /// child element with the specified name. + /// + /// + /// The name of the expected child element of the current document's Root element. + /// + public AndWhichConstraint HaveElement(string expected) + { + return HaveElement(expected, string.Empty); + } + + /// + /// Asserts that the element of the current has a direct + /// child element with the specified name. + /// + /// + /// The full name of the expected child element of the current document's Root element. + /// + public AndWhichConstraint HaveElement(XName expected) + { + return HaveElement(expected, string.Empty); + } + + /// + /// Asserts that the element of the current has a direct + /// child element with the specified name. + /// + /// + /// The name of the expected child element of the current document's Root element. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndWhichConstraint HaveElement(string expected, string because, + params object[] becauseArgs) + { + if (expected == null) + { + throw new ArgumentNullException("expected", + "Cannot assert the document has an element if the element name is *"); + } + + return HaveElement(XNamespace.None + expected, because, becauseArgs); + } + + /// + /// Asserts that the element of the current has a direct + /// child element with the specified name. + /// + /// + /// The full name of the expected child element of the current document's Root element. + /// + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndWhichConstraint HaveElement(XName expected, string because, + params object[] becauseArgs) + { + if (Subject == null) + { + throw new ArgumentNullException("subject", + "Cannot assert the document has an element if the document itself is ."); + } + + if (expected == null) + { + throw new ArgumentNullException("expected", + "Cannot assert the document has an element if the element name is *"); + } + + string expectedText = expected.ToString().Escape(escapePlaceholders: true); + + Execute.Assertion + .ForCondition(Subject.Root != null) + .BecauseOf(because, becauseArgs) + .FailWith("Expected XML document {0} to have root element with child \"" + expectedText + "\"{reason}" + + ", but XML document has no Root element.", Subject); + + XElement xElement = Subject.Root.Element(expected); + Execute.Assertion + .ForCondition(xElement != null) + .BecauseOf(because, becauseArgs) + .FailWith("Expected XML document {0} to have root element with child \"" + expectedText + "\"{reason}" + + ", but no such child element was found.", Subject); + + return new AndWhichConstraint(this, xElement); + } + + /// + /// Returns the type of the subject the assertion applies on. + /// + protected override string Context + { + get { return "XML document"; } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Shared/Xml/XDocumentAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Shared/Xml/XDocumentAssertions.cs.meta new file mode 100644 index 0000000..b69bbff --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Xml/XDocumentAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a31b7498e8b01f04ea62c5b926541731 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/Xml/XElementAssertions.cs b/Assets/Plugins/FluentAssertions/Shared/Xml/XElementAssertions.cs new file mode 100644 index 0000000..3805087 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Xml/XElementAssertions.cs @@ -0,0 +1,334 @@ +using System.Diagnostics; +using System.Xml.Linq; +using FluentAssertions.Common; +using FluentAssertions.Execution; +using FluentAssertions.Primitives; +using System.Xml; + +namespace FluentAssertions.Xml +{ + /// + /// Contains a number of methods to assert that an is in the expected state. + /// + [DebuggerNonUserCode] + public class XElementAssertions : ReferenceTypeAssertions + { + /// + /// Initializes a new instance of the class. + /// + public XElementAssertions(XElement xElement) + { + Subject = xElement; + } + + /// + /// Asserts that the current equals the + /// element, by using + /// + /// + /// The expected element + public AndConstraint Be(XElement expected) + { + return Be(expected, string.Empty); + } + + /// + /// Asserts that the current equals the + /// element, by using + /// + /// + /// The expected element + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint Be(XElement expected, string because, params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(XNode.DeepEquals(Subject, expected)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected XML element to be {0}{reason}, but found {1}.", expected, Subject); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current does not equal the + /// element, using + /// . + /// + /// The unexpected element + public AndConstraint NotBe(XElement unexpected) + { + return NotBe(unexpected, string.Empty); + } + + /// + /// Asserts that the current does not equal the + /// element, using + /// . + /// + /// The unexpected element + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBe(XElement unexpected, string because, params object[] becauseArgs) + { + Execute.Assertion + .ForCondition((ReferenceEquals(Subject, null) && !ReferenceEquals(unexpected, null)) || !XNode.DeepEquals(Subject, unexpected)) + .BecauseOf(because, becauseArgs) + .FailWith("Expected XML element not to be {0}{reason}.", unexpected); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is equivalent to the + /// element, using a semantic equivalency + /// comparison. + /// + /// The expected element + public AndConstraint BeEquivalentTo(XElement expected) + { + return BeEquivalentTo(expected, string.Empty); + } + + /// + /// Asserts that the current is equivalent to the + /// element, using a semantic equivalency + /// comparison. + /// + /// The expected element + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint BeEquivalentTo(XElement expected, string because, params object[] becauseArgs) + { + using (XmlReader subjectReader = Subject.CreateReader()) + using (XmlReader expectedReader = expected.CreateReader()) + { + new XmlReaderValidator(subjectReader, expectedReader, because, becauseArgs).Validate(true); + } + + return new AndConstraint(this); + } + + /// + /// Asserts that the current is not equivalent to + /// the element, using a semantic + /// equivalency comparison. + /// + /// The unexpected element + public AndConstraint NotBeEquivalentTo(XElement unexpected) + { + return NotBeEquivalentTo(unexpected, string.Empty); + } + + /// + /// Asserts that the current is not equivalent to + /// the element, using a semantic + /// equivalency comparison. + /// + /// The unexpected element + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint NotBeEquivalentTo(XElement unexpected, string because, params object[] becauseArgs) + { + new XmlReaderValidator(Subject.CreateReader(), unexpected.CreateReader(), because, becauseArgs).Validate(false); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current has the specified value. + /// + /// The expected value + public AndConstraint HaveValue(string expected) + { + return HaveValue(expected, string.Empty); + } + + /// + /// Asserts that the current has the specified value. + /// + /// The expected value + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveValue(string expected, string because, params object[] becauseArgs) + { + Execute.Assertion + .ForCondition(Subject.Value == expected) + .BecauseOf(because, becauseArgs) + .FailWith("Expected XML element '{0}' to have value {1}{reason}, but found {2}.", + Subject.Name, expected, Subject.Value); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current has an attribute with the specified + /// and . + /// + /// The name of the expected attribute + /// The value of the expected attribute + public AndConstraint HaveAttribute(string expectedName, string expectedValue) + { + return HaveAttribute(expectedName, expectedValue, string.Empty); + } + + /// + /// Asserts that the current has an attribute with the specified + /// and . + /// + /// The name of the expected attribute + /// The value of the expected attribute + public AndConstraint HaveAttribute(XName expectedName, string expectedValue) + { + return HaveAttribute(expectedName, expectedValue, string.Empty); + } + + /// + /// Asserts that the current has an attribute with the specified + /// and . + /// + /// The name of the expected attribute + /// The value of the expected attribute + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveAttribute(string expectedName, string expectedValue, string because, + params object[] becauseArgs) + { + return HaveAttribute(XNamespace.None + expectedName, expectedValue, because, becauseArgs); + } + + /// + /// Asserts that the current has an attribute with the specified + /// and . + /// + /// The name of the expected attribute + /// The value of the expected attribute + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndConstraint HaveAttribute(XName expectedName, string expectedValue, string because, + params object[] becauseArgs) + { + XAttribute attribute = Subject.Attribute(expectedName); + string expectedText = expectedName.ToString().Escape(escapePlaceholders: true); + + Execute.Assertion + .ForCondition(attribute != null) + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected XML element to have attribute \"" + expectedText + "\" with value {0}{reason}, but found no such attribute in {1}", + expectedValue, Subject); + + Execute.Assertion + .ForCondition(attribute.Value == expectedValue) + .BecauseOf(because, becauseArgs) + .FailWith( + "Expected XML attribute \"" + expectedText + "\" to have value {0}{reason}, but found {1}.", expectedValue, attribute.Value); + + return new AndConstraint(this); + } + + /// + /// Asserts that the current has a direct child element with the specified + /// name. + /// + /// The name of the expected child element + public AndWhichConstraint HaveElement(string expected) + { + return HaveElement(expected, string.Empty); + } + + /// + /// Asserts that the current has a direct child element with the specified + /// name. + /// + /// The name of the expected child element + public AndWhichConstraint HaveElement(XName expected) + { + return HaveElement(expected, string.Empty); + } + + /// + /// Asserts that the current has a direct child element with the specified + /// name. + /// + /// The name of the expected child element + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndWhichConstraint HaveElement(string expected, string because, params object[] becauseArgs) + { + return HaveElement(XNamespace.None + expected, because, becauseArgs); + } + + /// + /// Asserts that the current has a direct child element with the specified + /// name. + /// + /// The name of the expected child element + /// + /// A formatted phrase as is supported by explaining why the assertion + /// is needed. If the phrase does not start with the word because, it is prepended automatically. + /// + /// + /// Zero or more objects to format using the placeholders in . + /// + public AndWhichConstraint HaveElement(XName expected, string because, params object[] becauseArgs) + { + XElement xElement = Subject.Element(expected); + Execute.Assertion + .ForCondition(xElement != null) + .BecauseOf(because, becauseArgs) + .FailWith("Expected XML element {0} to have child element \"" + expected.ToString().Escape(escapePlaceholders: true) + "\"{reason}" + + ", but no such child element was found.", Subject); + + return new AndWhichConstraint(this, xElement); + } + + /// + /// Returns the type of the subject the assertion applies on. + /// + protected override string Context + { + get { return "XML element"; } + } + } +} diff --git a/Assets/Plugins/FluentAssertions/Shared/Xml/XElementAssertions.cs.meta b/Assets/Plugins/FluentAssertions/Shared/Xml/XElementAssertions.cs.meta new file mode 100644 index 0000000..3905ff1 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Xml/XElementAssertions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a542b1f759a7c4442bb87838b191b870 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/Shared/Xml/XmlReaderValidator.cs b/Assets/Plugins/FluentAssertions/Shared/Xml/XmlReaderValidator.cs new file mode 100644 index 0000000..832541c --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Xml/XmlReaderValidator.cs @@ -0,0 +1,243 @@ +using FluentAssertions.Execution; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml; + +namespace FluentAssertions.Xml +{ + internal class XmlReaderValidator + { + AssertionScope assertion; + XmlReader subjectReader, otherReader; + + string CurrentLocation + { + get { return "/" + string.Join("/", locationStack.Reverse()); } + } + + Stack locationStack = new Stack(); + + public XmlReaderValidator(XmlReader subjectReader, XmlReader otherReader, string because, object[] reasonArgs) + { + assertion = Execute.Assertion.BecauseOf(because, reasonArgs); + + this.subjectReader = subjectReader; + this.otherReader = otherReader; + } + + class ValidationResult + { + public ValidationResult(string formatString, params object[] formatParams) + { + FormatString = formatString; + FormatParams = formatParams; + } + + public string FormatString { get; } + + public object[] FormatParams { get; } + } + + public void Validate(bool expectedEquivalence) + { + ValidationResult validationResult = Validate(); + + if(expectedEquivalence && validationResult != null) + { + assertion.FailWith(validationResult.FormatString, validationResult.FormatParams); + } + if(!expectedEquivalence && validationResult == null) + { + assertion.FailWith("Did not expect Xml to be equivalent{reason}, but it is."); + } + } + + private ValidationResult Validate() + { + subjectReader.MoveToContent(); + otherReader.MoveToContent(); + while (!subjectReader.EOF && !otherReader.EOF) + { + if (subjectReader.NodeType != otherReader.NodeType) + { + return new ValidationResult("Expected node of type {0} at {1}{reason}, but found {2}.", + otherReader.NodeType, CurrentLocation, subjectReader.NodeType); + } + + ValidationResult validationResult = null; + + switch (subjectReader.NodeType) + { + case XmlNodeType.Element: + validationResult = ValidateStartElement(); + if(validationResult != null) + { + return validationResult; + } + locationStack.Push(subjectReader.LocalName); + validationResult = ValidateAttributes(); + if(subjectReader.IsEmptyElement) + { + locationStack.Pop(); + } + break; + case XmlNodeType.EndElement: + // No need to verify end element, if it doesn't match + // the start element it isn't valid XML, so the parser + // would handle that. + locationStack.Pop(); + break; + case XmlNodeType.Text: + validationResult = ValidateText(); + break; + default: + throw new NotSupportedException($"{subjectReader.NodeType} found at {CurrentLocation} is not supported for equivalency comparison."); + } + + if(validationResult != null) + { + return validationResult; + } + + subjectReader.Read(); + otherReader.Read(); + + subjectReader.MoveToContent(); + otherReader.MoveToContent(); + } + + if (!otherReader.EOF) + { + return new ValidationResult("Expected {0}{reason}, but found end of document.", + otherReader.LocalName); + } + + if (!subjectReader.EOF) + { + return new ValidationResult("Expected end of document{reason}, but found {0}.", + subjectReader.LocalName); + } + + return null; + } + + + class AttributeData + { + public AttributeData(string namespaceUri, string localName, string value, string prefix) + { + NamespaceUri = namespaceUri; + LocalName = localName; + Value = value; + Prefix = prefix; + } + + public string NamespaceUri { get; } + public string LocalName { get; } + public string Value { get; } + public string Prefix { get; } + + public string QualifiedName + { + get + { + if(string.IsNullOrEmpty(Prefix)) + { + return LocalName; + } + + return Prefix + ":" + LocalName; + } + } + } + + private ValidationResult ValidateAttributes() + { + IList expectedAttributes = GetAttributes(otherReader); + IList subjectAttributes = GetAttributes(subjectReader); + + foreach (AttributeData subjectAttribute in subjectAttributes) + { + AttributeData expectedAttribute = expectedAttributes.SingleOrDefault( + ea => ea.NamespaceUri == subjectAttribute.NamespaceUri + && ea.LocalName == subjectAttribute.LocalName); + + if (expectedAttribute == null) + { + return new ValidationResult("Didn't expect to find attribute {0} at {1}{reason}.", + subjectAttribute.QualifiedName, CurrentLocation); + } + + if (subjectAttribute.Value != expectedAttribute.Value) + { + return new ValidationResult("Expected attribute {0} at {1} to have value {2}{reason}, but found {3}.", + subjectAttribute.LocalName, CurrentLocation, expectedAttribute.Value, subjectAttribute.Value); + } + } + + if (subjectAttributes.Count != expectedAttributes.Count) + { + AttributeData missingAttribute = expectedAttributes.First(ea => + !subjectAttributes.Any(sa => + ea.NamespaceUri == sa.NamespaceUri + && sa.LocalName == ea.LocalName)); + + return new ValidationResult("Expected attribute {0} at {1}{reason}, but found none.", + missingAttribute.LocalName, CurrentLocation); + } + return null; + } + + private IList GetAttributes(XmlReader reader) + { + IList attributes = new List(); + + if (reader.MoveToFirstAttribute()) + { + do + { + if (reader.NamespaceURI != "http://www.w3.org/2000/xmlns/") + { + attributes.Add(new AttributeData(reader.NamespaceURI, reader.LocalName, reader.Value, reader.Prefix)); + } + } while (reader.MoveToNextAttribute()); + } + + return attributes; + } + + private ValidationResult ValidateStartElement() + { + if (subjectReader.LocalName != otherReader.LocalName) + { + return new ValidationResult("Expected local name of element at {0} to be {1}{reason}, but found {2}.", + CurrentLocation, otherReader.LocalName, subjectReader.LocalName); + } + + if (subjectReader.NamespaceURI != otherReader.NamespaceURI) + { + return new ValidationResult("Expected namespace of element {0} at {1} to be {2}{reason}, but found {3}.", + subjectReader.LocalName, CurrentLocation, otherReader.NamespaceURI, subjectReader.NamespaceURI); + } + + return null; + } + + private ValidationResult ValidateText() + { + string subject = subjectReader.Value; + string expected = otherReader.Value; + + if (subject != expected) + { + return new ValidationResult("Expected content to be {0} at {1}{reason}, but found {2}.", + expected, CurrentLocation, subject); + } + + return null; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FluentAssertions/Shared/Xml/XmlReaderValidator.cs.meta b/Assets/Plugins/FluentAssertions/Shared/Xml/XmlReaderValidator.cs.meta new file mode 100644 index 0000000..085a79f --- /dev/null +++ b/Assets/Plugins/FluentAssertions/Shared/Xml/XmlReaderValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6ec02bba76ed034faf297bc5860c112 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FluentAssertions/VERSION.md b/Assets/Plugins/FluentAssertions/VERSION.md new file mode 100644 index 0000000..4b757b4 --- /dev/null +++ b/Assets/Plugins/FluentAssertions/VERSION.md @@ -0,0 +1 @@ +This is fluent-assertions 4.19.4 diff --git a/Assets/Plugins/FluentAssertions/VERSION.md.meta b/Assets/Plugins/FluentAssertions/VERSION.md.meta new file mode 100644 index 0000000..eff96fa --- /dev/null +++ b/Assets/Plugins/FluentAssertions/VERSION.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 81d3ea551d687a14aa2dfbb9157d82a7 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnumFlagAttribute.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnumFlagAttribute.cs new file mode 100644 index 0000000..bc729f0 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnumFlagAttribute.cs @@ -0,0 +1,10 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class EnumFlagAttribute : DrawerAttribute + { + + } +} \ No newline at end of file diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnumFlagAttribute.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnumFlagAttribute.cs.meta new file mode 100644 index 0000000..e7edce6 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnumFlagAttribute.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cb8571c60a2443798cf9a86975107aad +timeCreated: 1555186919 \ No newline at end of file diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawerDatabase.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawerDatabase.cs index 1aa4e94..4e21af8 100644 --- a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawerDatabase.cs +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/CodeGeneration/PropertyDrawerDatabase.cs @@ -7,22 +7,22 @@ namespace NaughtyAttributes.Editor { public static class PropertyDrawerDatabase { - private static Dictionary drawersByAttributeType; + private static readonly Dictionary drawersByAttributeType; static PropertyDrawerDatabase() { drawersByAttributeType = new Dictionary(); drawersByAttributeType[typeof(DisableIfAttribute)] = new DisableIfPropertyDrawer(); -drawersByAttributeType[typeof(DropdownAttribute)] = new DropdownPropertyDrawer(); -drawersByAttributeType[typeof(EnableIfAttribute)] = new EnableIfPropertyDrawer(); -drawersByAttributeType[typeof(MinMaxSliderAttribute)] = new MinMaxSliderPropertyDrawer(); -drawersByAttributeType[typeof(ProgressBarAttribute)] = new ProgressBarPropertyDrawer(); -drawersByAttributeType[typeof(ReadOnlyAttribute)] = new ReadOnlyPropertyDrawer(); -drawersByAttributeType[typeof(ReorderableListAttribute)] = new ReorderableListPropertyDrawer(); -drawersByAttributeType[typeof(ResizableTextAreaAttribute)] = new ResizableTextAreaPropertyDrawer(); -drawersByAttributeType[typeof(ShowAssetPreviewAttribute)] = new ShowAssetPreviewPropertyDrawer(); -drawersByAttributeType[typeof(SliderAttribute)] = new SliderPropertyDrawer(); - + drawersByAttributeType[typeof(DropdownAttribute)] = new DropdownPropertyDrawer(); + drawersByAttributeType[typeof(EnableIfAttribute)] = new EnableIfPropertyDrawer(); + drawersByAttributeType[typeof(MinMaxSliderAttribute)] = new MinMaxSliderPropertyDrawer(); + drawersByAttributeType[typeof(ProgressBarAttribute)] = new ProgressBarPropertyDrawer(); + drawersByAttributeType[typeof(ReadOnlyAttribute)] = new ReadOnlyPropertyDrawer(); + drawersByAttributeType[typeof(ReorderableListAttribute)] = new ReorderableListPropertyDrawer(); + drawersByAttributeType[typeof(ResizableTextAreaAttribute)] = new ResizableTextAreaPropertyDrawer(); + drawersByAttributeType[typeof(ShowAssetPreviewAttribute)] = new ShowAssetPreviewPropertyDrawer(); + drawersByAttributeType[typeof(SliderAttribute)] = new SliderPropertyDrawer(); + drawersByAttributeType[typeof(EnumFlagAttribute)] = new EnumFlagPropertyDrawer(); } public static PropertyDrawer GetDrawerForAttribute(Type attributeType) @@ -46,5 +46,4 @@ public static void ClearCache() } } } -} - +} \ No newline at end of file diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Editors/InspectorEditor.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Editors/InspectorEditor.cs index c593bf9..452fefd 100644 --- a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Editors/InspectorEditor.cs +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/Editors/InspectorEditor.cs @@ -88,6 +88,11 @@ private void OnDisable() PropertyDrawerDatabase.ClearCache(); } + public override bool RequiresConstantRepaint() + { + return useDefaultInspector == false; + } + public override void OnInspectorGUI() { if (this.useDefaultInspector) @@ -230,7 +235,7 @@ private void DrawField(FieldInfo field) PropertyDrawer drawer = this.GetPropertyDrawerForField(field); if (drawer != null) { - drawer.DrawProperty(this.serializedPropertiesByFieldName[field.Name]); + drawer.DrawProperty(field, this.serializedPropertiesByFieldName[field.Name]); } else { diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/ShowNonSerializedFieldFieldDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/ShowNonSerializedFieldFieldDrawer.cs index f057d1f..0c6e5be 100644 --- a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/ShowNonSerializedFieldFieldDrawer.cs +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/FieldDrawers/ShowNonSerializedFieldFieldDrawer.cs @@ -10,7 +10,7 @@ public override void DrawField(UnityEngine.Object target, FieldInfo field) { object value = field.GetValue(target); - if (!EditorDrawUtility.DrawLayoutField(value, field.Name, field.FieldType)) + if (!EditorDrawUtility.DrawLayoutField(value, ObjectNames.NicifyVariableName(field.Name), field.FieldType)) { string warning = string.Format("{0} doesn't support {1} types", typeof(ShowNonSerializedFieldFieldDrawer).Name, field.FieldType.Name); EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: target); diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/ShowNativePropertyNativePropertyDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/ShowNativePropertyNativePropertyDrawer.cs index 2352cda..4833104 100644 --- a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/ShowNativePropertyNativePropertyDrawer.cs +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/NativePropertyDrawers/ShowNativePropertyNativePropertyDrawer.cs @@ -10,7 +10,7 @@ public override void DrawNativeProperty(UnityEngine.Object target, PropertyInfo { object value = property.GetValue(target, null); - if (!EditorDrawUtility.DrawLayoutField(value, property.Name, property.PropertyType)) + if (!EditorDrawUtility.DrawLayoutField(value, ObjectNames.NicifyVariableName(property.Name), property.PropertyType)) { string warning = string.Format("{0} doesn't support {1} types", typeof(ShowNativePropertyNativePropertyDrawer).Name, property.PropertyType.Name); EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: target); diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnumFlagPropertyDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnumFlagPropertyDrawer.cs new file mode 100644 index 0000000..9a1ba4e --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnumFlagPropertyDrawer.cs @@ -0,0 +1,20 @@ +using System; +using System.Reflection; +using UnityEditor; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + [PropertyDrawer(typeof(EnumFlagAttribute))] + public class EnumFlagPropertyDrawer : PropertyDrawer + { + public override void DrawProperty(FieldInfo fieldInfo, SerializedProperty property) + { + EditorDrawUtility.DrawHeader(property); + Enum targetEnum = (Enum)fieldInfo.GetValue(property.serializedObject.targetObject); + Enum enumNew = EditorGUILayout.EnumFlagsField(property.displayName, targetEnum); + property.intValue = (int)Convert.ChangeType(enumNew, targetEnum.GetType()); + + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnumFlagPropertyDrawer.cs.meta b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnumFlagPropertyDrawer.cs.meta new file mode 100644 index 0000000..38c1ce6 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnumFlagPropertyDrawer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b03fc67a402f4df3a0452ad20765818b +timeCreated: 1555187285 \ No newline at end of file diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/PropertyDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/PropertyDrawer.cs index 762c30e..1a9b898 100644 --- a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/PropertyDrawer.cs +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/PropertyDrawer.cs @@ -1,10 +1,19 @@ -using UnityEditor; +using System.Reflection; +using UnityEditor; namespace NaughtyAttributes.Editor { public abstract class PropertyDrawer { - public abstract void DrawProperty(SerializedProperty property); + public virtual void DrawProperty(FieldInfo fieldInfo, SerializedProperty property) + { + DrawProperty(property); + } + + public virtual void DrawProperty(SerializedProperty property) + { + EditorDrawUtility.DrawPropertyField(property); + } public virtual void ClearCache() { diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReorderableListPropertyDrawer.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReorderableListPropertyDrawer.cs index 5a7aa68..50f0548 100644 --- a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReorderableListPropertyDrawer.cs +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ReorderableListPropertyDrawer.cs @@ -18,14 +18,7 @@ struct PropertyKey : IEquatable public PropertyKey(SerializedProperty property) { fieldName = property.name; - if (property.propertyType == SerializedPropertyType.ObjectReference) - { - instanceId = property.objectReferenceInstanceIDValue; - } - else - { - instanceId = property.serializedObject?.GetHashCode() ?? 0; - } + instanceId = property.objectReferenceInstanceIDValue; sourceObject = property.serializedObject; } @@ -41,7 +34,7 @@ public override bool Equals(object obj) return false; } - return obj is PropertyKey && Equals((PropertyKey)obj); + return obj is PropertyKey && Equals((PropertyKey) obj); } public override int GetHashCode() diff --git a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/RequiredPropertyValidator.cs b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/RequiredPropertyValidator.cs index 5180180..8502a02 100644 --- a/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/RequiredPropertyValidator.cs +++ b/Assets/Plugins/NaughtyAttributes/Scripts/Editor/PropertyValidators/RequiredPropertyValidator.cs @@ -5,6 +5,13 @@ namespace NaughtyAttributes.Editor [PropertyValidator(typeof(RequiredAttribute))] public class RequiredPropertyValidator : PropertyValidator { + bool warningNotLogged; + + public RequiredPropertyValidator() + { + warningNotLogged = true; + } + public override void ValidateProperty(SerializedProperty property) { RequiredAttribute requiredAttribute = PropertyUtility.GetAttribute(property); @@ -17,16 +24,18 @@ public override void ValidateProperty(SerializedProperty property) if (!string.IsNullOrEmpty(requiredAttribute.Message)) { errorMessage = requiredAttribute.Message; - } + } - EditorDrawUtility.DrawHelpBox(errorMessage, MessageType.Error, logToConsole: true, context: PropertyUtility.GetTargetObject(property)); + EditorDrawUtility.DrawHelpBox(errorMessage, MessageType.Error, logToConsole: warningNotLogged, context: PropertyUtility.GetTargetObject(property)); } } else { string warning = requiredAttribute.GetType().Name + " works only on reference types"; - EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: true, context: PropertyUtility.GetTargetObject(property)); + EditorDrawUtility.DrawHelpBox(warning, MessageType.Warning, logToConsole: warningNotLogged, context: PropertyUtility.GetTargetObject(property)); } + + warningNotLogged = false; } } } diff --git a/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity b/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity index 81c241a..b04ec12 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity +++ b/Assets/Plugins/UnityTutorialSystem/Scenes/TutorialAssembly.unity @@ -612,8 +612,8 @@ MonoBehaviour: m_TargetGraphic: {fileID: 1871891756} m_HandleRect: {fileID: 1871891755} m_Direction: 0 - m_Value: 1 - m_Size: 1 + m_Value: 0 + m_Size: 0.99999994 m_NumberOfSteps: 0 m_OnValueChanged: m_PersistentCalls: @@ -1201,7 +1201,7 @@ MonoBehaviour: m_HandleRect: {fileID: 364011010} m_Direction: 2 m_Value: 0 - m_Size: 1 + m_Size: 0.99999994 m_NumberOfSteps: 0 m_OnValueChanged: m_PersistentCalls: @@ -2887,7 +2887,7 @@ PrefabInstance: - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} propertyPath: m_AnchoredPosition.y - value: 0.000030517578 + value: 0 objectReference: {fileID: 0} - target: {fileID: 224528275417451060, guid: 154207b2fe8edf6469479d563d3e8e59, type: 3} diff --git a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreePath.cs b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreePath.cs index 9296c92..ce6914f 100644 --- a/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreePath.cs +++ b/Assets/Plugins/UnityTutorialSystem/Scripts/UI/Trees/TreePath.cs @@ -83,7 +83,7 @@ public TreePath Append(TNode component) } tmpArray[Count] = component; - return new TreePath(backend, Count); + return new TreePath(tmpArray, Count + 1); } /// diff --git a/Assets/Plugins/UnityTutorialSystem/Tests.meta b/Assets/Plugins/UnityTutorialSystem/Tests.meta new file mode 100644 index 0000000..db14904 --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b0b5c162315037143a7fcf9dc919f141 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/UnityTutorialSystem/Tests/Tests.asmdef b/Assets/Plugins/UnityTutorialSystem/Tests/Tests.asmdef new file mode 100644 index 0000000..62f1705 --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Tests/Tests.asmdef @@ -0,0 +1,19 @@ +{ + "name": "Tests", + "references": [ + "UnityTutorialSystem", + "FluentAssertions" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Assets/Plugins/UnityTutorialSystem/Tests/Tests.asmdef.meta b/Assets/Plugins/UnityTutorialSystem/Tests/Tests.asmdef.meta new file mode 100644 index 0000000..8065c7d --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Tests/Tests.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 30607f09b7a3b0346ab7ea530e2656b7 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/UnityTutorialSystem/Tests/TreePathTest.cs b/Assets/Plugins/UnityTutorialSystem/Tests/TreePathTest.cs new file mode 100644 index 0000000..e013ed6 --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Tests/TreePathTest.cs @@ -0,0 +1,29 @@ +using FluentAssertions; +using NUnit.Framework; +using UnityTutorialSystem.UI.Trees; + +namespace Tests +{ + public class TreePathTest + { + // A Test behaves as an ordinary method + [Test] + public void Append_On_Empty_Creates_Valid_Path() + { + var root = TreePath.Empty(); + var result= root.Append("One"); + result.Count.Should().Be(1); + result[0].Should().Be("One"); + } + + // A Test behaves as an ordinary method + [Test] + public void Append_On_Path_Creates_Valid_Path() + { + var root = TreePath.From("One", "Two"); + var result= root.Append("Three"); + result.Count.Should().Be(3); + result[2].Should().Be("Three"); + } + } +} diff --git a/Assets/Plugins/UnityTutorialSystem/Tests/TreePathTest.cs.meta b/Assets/Plugins/UnityTutorialSystem/Tests/TreePathTest.cs.meta new file mode 100644 index 0000000..617f6ee --- /dev/null +++ b/Assets/Plugins/UnityTutorialSystem/Tests/TreePathTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 95e0de82a0c5a484fbecdf563d88ce8e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/manifest.json b/Packages/manifest.json index 65d7dd6..a095c8e 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -1,12 +1,7 @@ { "dependencies": { - "com.unity.ads": "2.3.1", - "com.unity.analytics": "3.2.2", - "com.unity.collab-proxy": "1.2.15", "com.unity.package-manager-ui": "2.0.7", - "com.unity.purchasing": "2.0.3", "com.unity.textmeshpro": "1.3.0", - "com.unity.xr.windowsmr.metro": "1.0.7", "com.unity.modules.ai": "1.0.0", "com.unity.modules.animation": "1.0.0", "com.unity.modules.assetbundle": "1.0.0", diff --git a/README.md b/README.md index 41f64ff..a1d080d 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,8 @@ Larger sequences of events can be broken down into smaller tasks. You can flexibly combine multiple task-flows into larger work-flows, including optional or alternative tasks. +![Demo](unity-tutorial-system-demo.gif) + ## Usage and Setup ### Step 1: Define the events the system tracks. diff --git a/unity-tutorial-system-demo.gif b/unity-tutorial-system-demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..d0475abd2810ac2d37b4d7f1ef080a7e3c9d551b GIT binary patch literal 3973070 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�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%0DhqGn6+H*_*-BA8Ewv6sP|i4H$;-YTs@tx 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�eDs6Igf8x7@=oSo1@ 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


    #+nyeYCU`C3}A8x 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

    HzaX$5v*? z=Y3DS9*5QeZ-ikldyz1psf8#?cu!ME>_u4rL(~sW%pX<6JPOwZMOewJKIC-J7)(&2 zsXKvacy5)il6@$kC>iMNHPVhUVl^=eQZ>^1KC1CB8XhSMSv3%+)t~WaEWV20dywDR zN<2Ml3_@tk|7O5-aO@LBBz&XH#7H30iMY0-H*^v(u-;uIF`6@(7NaP}R6dfGHSn?D z!kQ$W;x!ikz^j?nBa1RtRwT|{BwB|nDU3S`{_$P?O%y9-3uThU zT9PPj?a0VO>Le5C7ZNyNl1V{=303etTv9z7eN9?YLW2_wV8Z53l6gT=9aT~jol@hI zQj;4}Q$_s|sN+A=1qZ>#>b;`ozG;js@gb!NHX-O?FX+*kH5LVh$aB)J*UbItp>l0m%Qi{F(aa_MEa=gOse9fz5J8~ZKU1m zmaXbut?JRG>N%zAHKb6sy6m;s#J96>Ts7xUyCTjkWQ{k^@3d%cy&^Fs9!jeio~;&v zwhXinhKrn9xu^mNAO;B#sK&vo$2W^iDP%+ouY^gj1b&7oT#71ItEEM&r)R4xldkwU zDcS}rGcKy-Y|h1i|BD@3$-PvIgIbH{)+mzJ;9e|CDpoJ`)+meCAaItx{E%0`3(LP; zCCH9opVEl^TmxZR6S!Hc$I~q4)@+j2JovMO7_gLJwrW+Z*u1$~PP-OqEnkhMYDcdjVD!kBaIQMsIJ*!!*GdgCbYXi95 zygt{gvAd|%4X#?nysjh^)Jwa*;JwulslA%L#R(35%B>XBrMcgweYLo;vAJgTsa}J( zwRWO4v9k3~TK58Uf)WINBs%s>du@tBDKKl+ zvkPwMGt6BX`pbF;ETsFhSO-!>g)$B8=2G+yUh_d&7vV{>nOS$FQx}P4<3l-Nky`>f z=AX))GDNoyhKxSu)BKt+3gVUCgK#*)^w!I!zF^!oKu7m57z`f}{)lD}FC2u7-sr7u zK=w^z_!v;c7*OUIP{|-uG;7GCu7x@)$CS7y_S~w-502 zS$z!IVhoYc!-e>QgfPQ6rVTk|_O`h6z+1#xw7G!X`XlfA)H-_SLwgW8F@gw2OW+40 zF-FU@Dv(cEWH$5pXc|O5aDs@?e`E~h5DsN|45N|_8Hcw==M0r~j8$xmRcj1+0D3}8 z+aXDZf-*+JAqG+V2wu*^KU%iU(k{sOIV{ z`)Ypm(=3_IB3fiYv_<(B@p*~Pa-)dF-x>p%qU3ZkZB>>am0?S+7E6xl^X`(fim&sa zY3M3Ct6H9m0R;U)9joE#(-E_a+9h+I990_3vvC9^@{-XO1ikT=;|Yj{AMJkRC03$|#?`Ls_Oq=`iinKdlS1^2K<4`7um#A>+a9N0xRH;Q1h3$WRvyCQ)w zlIR9q(79TqQ#qzHSyZt(eY*G$Bt*vg)Wqh3?BH_x>RjibDMi~OV5fE3pt#LaW!P|C z=el3zdh^P9bmwxb#oRyd`Zme-gU;sj$U;OdD0}JZ8scUK0h-3mMvTE4w8xB=W$Eha z3Zlp6%;#nn;uPxIJkRCknhdY>;1H&EtFGqywdLqF`< z*cg_Zo}k+m#YEwa(8b}|qtxmKt~z`lbY_gJU-(eywqU}#PNKdKuU!&bZV>RD<+lyulOKd^A4yD{1VgOVOK*<>$0vNw+#`=l zsW-V0H&oG`cq11)wpV)ePuRRSi=P)*DjDLbPAcTkYOc=axh{CykFq^aS|cu&7|zx+ zF51se*1ufsL>OI=)2T@*16BzRp8RE`~a93bdjxO!ZQr=5RpKNGMz z7yFSf@|QTWcm*KV=0EG;?D zak)2o=x)v}&a$=le!A{Btgk*8?qJ9E3iPHCvUkxVZhk}~fJDLn_#r^_1GdK4G@ z<-Ld*_d`#&B=Ydw+?V3(Q?6|%gHSi!Qs?L%w}4~UoNbR9{LUY(_eu0`g}w@xHIJDi z9$CEaO``8|tZy~Go_|Go8X=xCaxZI3ow@K1>U%ufmj!S!EYt#D6ms7Tf4!f!xHr#u z)W>=b+kSA$+T_Mw^|N|4kiU<=dX(~d)X6$@m73~pf8@7bD4JS!n0n67c#Oz;FXA6% zjM%ABdz(19NsD?Au)fRmcvaxPZs5BCe`0(LmD-pv9TP+P6xZ5}UOV?ezJ=&|A6>YX5OMNS9eT&%k8iItPQ3XS`Qn=aS3xq~u)HeU`lgSy2 z9W{nZD4YK?SH{`=&v9RwN+J)J$0MOsjbf7mO}lc{bh5>AgZ23n?Z#i6-=ozy4JQ+o z3iCcg5vr6L{xZ)Ra2jl;t9@F(fUKw*=#|SOzB6>u7l~y%UB2;m(zt4W6gmn-6X~qq zoP^=fm1=D+-s3aFY@b}X=1(R^A}VFB zI*=~rj}v+{L@qx$UvBo8w?eG9xQ6bI4Rb|s-97Avdz@LwBhlMFW)t!eLb^A69J3yW zRs9gmpK#UkwOuytpvWi|eHK<(0l{b*ZuuH#)vbh~c>QD;a$lcJgtpMwqRGZ@pQWl! zq)V+>4h!F-){gK`PAaNUE=lNmdB)1C;p4l(gz>`I?gznV{(sZM2{~4Ge1z;#RrEfD zU-tAjl*=~_NI+K$VyV^+fQQ~ZCgPY0<`wLr89U}Dgjx12EE&kcxIc`2Nis%_g=t?- zvC^;8#gA+|;7{|C^-Y$Eyocpiu}l!@O!JDEd{)Uy(hFE1Gc(4WGqq@{gw1nljSfIz z%Rn=bVtMq*Nqr0=PImmY``0M^?yZm2E4!vgNeURBPQGajgF*AsVUK4rPn-OV3W*94 z5?V2zc0R?L6^RNQv#N+Os;V(O3DR2kQ}Oef;9GI?FpiQ+n$Fw)8^O-)DKd=;tfF@M zp3k>;`raS93)fy!JnnUU(8Qf}{n9Lx41>QoxeU9|EdLXG_Y@>q^uCF@x@_CFx@_C% zvTfU4>auOywr$(C&7Atp#5oZMG4sEe%ZbRVjL5y$UdYJY`(4i`RWr0#hfdv#e0HJO z`=vx$K7yIWVVDGOcd;2wk>L$EHIq4VE3l7f=W+6GvgCFc=Kc75kbIdRs}Xxg=CvQ4 z_57@{0}->v%->mBL7z-Iue7NW;DTaV5r4h~S=IB~deRgcNMczh#fW;IrfgYQ2~4Rj7F zj@G15U8X{Sd=t=l)IlyONkHYe@T-VcYH;}NOFjRI-Nmuc8LsuBv?Lqx24Q1n%Xv#E z!|hndd>F}8*5A~T_Yny9zDWULit>xhRYrox2x*@*@!;kastc1V*4lVv; z?g3bJy>lU3tDNd-Jp=>LEV5#B)Ba6c*u3sv^B3e2*{AX!d4%@08+=gE`}D~#Qdu}( z`Esn&#iv#v$6M0xj~xiF*}lj`ao6wr?5o3JK9J*T{wJfg@F0pl$o!apNTBktwSG)15U@Qel zjYUFJhecHnLv3V;Nf?m1n;ECWV72$4j@)~peoa`SO=iAfkBSRA{*Fkr+R$n=7tF2- zCqq^=CMEIU4dWA5S2Q zisFNd3kpq=u_csF*)+pvv@aTy^-1!(CNYFE!R;syS1g&p>c?CnFBR}W6-2UB+bASNSs1!4SV&08$E>P0BEa?S_%a@7!T;b^4K$$p23e`A zVaI-zCu*oF^8G0(v^JxBp&W`}a`bPxF+zq8@O-}BwcgaUby;DJ zleZpzoF{1B#=aCmj4H>ssfulZWZ&1Q-kyrORzfZ4B(;(+u5 zqk~$~97kDvZ6)iJ4f>g2kFJoQW<^_1kv~;;>t7@5*SRo(%-)rtl`c#7Imyb;EW=KJ z9~Z|XbSktI_nt^^t@mMEj{RfkNm>Vh(4CTZdlMXYL4YEtCuN`i_jgYR&R!H+X*{OOY++%zL+Y{jvdAhh1sY^P=N?c1k`tU4M_ zb!vXojC2zcFbjn^V~lqi)BnrVT6HIHE{VcB7aLaH_CY6XfLlEe#Pb|Mk9O{#dhbm) z)Y=>QVlT#0b@=-EFL_DNHoVn!GUvWI-kA5YE>vxa{>Xid@e_L((%vj2=u8tmnd>oH zEabu$SzzYRQcjUMi5%#d=6Ug$aR?lU-Se8=_hwr}{O5=-j~N>(=S+!&uP5on*6{mp z@k3!-p4|dLA-X}{NrGnS9lJ4o-7@x8@nKGjZ!iFcxp1~ zP<%UT?n7mUWNN3KNN*Y}6>MPMYe>`4_LwOCCZ4|6SL)c{ zLVy4iRuq!cV9=7N{!F9RFjmg)(we1WD7bCzs!5P5SUkBup;6Y(Hm8WO1AxGblPLC= zK2Uqsc-JQ6U!0mLlx-j|-(AAl(_Lk}9Y3Ai;7RaRms~e%I+j@ zn|p~@260D%>*zXT$V@31h1Yc1^nBn2Q(0oz#3(eSv4Jae z>J!##?2EgCE-+L5cT)U2e1~)5tEdADdO`|8t;1J2r8Oxf&~PVk1t(2?QODz#%LCLr zVi)*9bNs@-H`6MY9OG-!>av749aHmc3Z35+duiyjN#U&Z+mAN!e)uAG@FyNw22ny*^4CC2H3+TZcnd=rOJI1b} zo+|nFVVfG+B*&=qPuZs#z5LeBoXLl-G_=dYS!3DpE@e2J}mS#K!An$OPv>>t~fVI4LgLI)-L{O9?WrEWE8)1 zt+TI|FYlgpKE5f>o-avCZd6rmIec1{Tu!akhmA^BvRr%G6LswST%JgN9yDAUr9{5` zYUHmj>7H+R%1BeEAK8$9QQV&x)^BD-Z$JioF)s)xZr)xz&?qYy#%+JTxKPM!@fJk- z49n}KNPZRx3}4eBK9t+0InFeu41mfGRRy$Jsk~prDUb|@#|`CEW6(o;Y{OkD28+{| zzw8zDd(xCSmV{(MnJ%Y%W>OW}(oSJd*n(d=;~w?lN5;@u%Lf#suczyJmJ}0H^e)r> zN&u)rcka;zv z;HYOeMRZDCD3qASxAlX~!06=5QxYwUT+TIt zgfo3icAx=_B$^XjvO1IIVQ<6wAmD)VN1^Sja01|yYgm3Flj^lIVhTjPyS2?NNSNPW z$yZc{jJU&ufu0C8s(TP_MdV7@U#>S$Ms+wfLFh1dP@R8qN9xKlEy7dxQ!}mZu!m1< zE1u2`53vYMZ1+A{s(>B91-gHe^q}-D|IVQLhp-vu$HBmkfA!jGx!pE__i*%5h0)LJ z0PMFfspNoGU`tZss5W&5C6Sk-aDM|%dZ}8!x{kEuLo0_^Nh6P%2~Gibftn6ikDYT= zgUWn4Rat-;PYrj9Du}3(WE>J%98WnE{w7`un#6J$4;9b$vTx8|Q5u z{R60(2=fOl%S_!?Tf@2>Gb;{21*=YChmWw{u)fQc`E&ht5t%L>TKb_m9%_S$t7nMI z&YG#Kfv3f3zg>X4g-L@|wVa;(xZLjFkr^j_y2JhN^k{~*LHlid7RehDo(X0eekLhq zmOjU6mNB&BY&!u4SlGGRO|(pVDFuZrCY+Q;c`GMSQD#vQXJL#d7XD1f)rP)geTPJx zn{)JED2!CU&>&(S#Nv~Q0FA0I_at^Kq&Tc11TM$}gzoV*l*gg{r;bnQg_L?)qB%@# zRTrvela%a_nS9PL0jwA!ds&UJC&^^fts1t_4?pO}06lB&U-aL{Rg+Uq@)u3Q6}c^B z)W$iDhz;b^o(`AjjoGn)aXj`!lpk$ErQuY;`nEfQH6~V@`}wSwSz4G)_@zOirx%=z z%wD^?V-!+D4my4Fgu&@iF3oi-|0W)M6dOYEsgljA2cBB$8N7v12^^7&yu?;?$8rS+V3%t*3c$zBD(qLhK3}so?;L zB&kFdc`tjdQt*b=&fJT@nPP(7Tg%l%*bVPMqItHlbqUfrwC!n) z17mlPB;60makA#1?U`?J@r>6-pUiKU{L!kz-{PF%o+9qH-|tA>-^OcHPabmtHG*}! z2H^tHQYA9YJF`--Yb>{EXG;ExeoK%&`jf?WOC@_6G?acttZd&8azHkiadHM?|2|3{oZQ~}Xcuh9)6p^m#y>WrL^;nv{w^F^Z#VIm( zILGO4i{__pPyP#~%>$SCw`29JH}LP|vn9e5m11%;E*()mcd;ce2% za<}(kH8qre=kg5?+%1n5SeNDUbsl?b76K=!n#+=Sf;jt=N{KOjF)^Fn^LFBky`TD! z9q;r_=Zc?CuMzjSftUPLbJxQMAg|f90XZi5DOJw{WJ9qM`>W8DciZf1J4b3H;j0Ov zYZnC2IeyR~^I%iY%*W_x9^6)`Sg1Nx*EF%3Bj*MqV-H(ay#_#$uJ`fH(mk>>@1YDJ!(v=ty?-8IzmUAR#9oZ_Bj>RY4-XtbLf<#yR3 z0K6YmS9>Wz`#F?oeSwppy-hIL4m5`J13r|yFRZ@6&3PL)_`-I2q|Dye4xANZJ_kua z5n~xgUwQ`RdG^G4K9qewrF*t7J`b(DzY^$I)p`P8ID>_ly-7a3O->Ii&5gCWnSKGj zn;K3R?CcF`I2*e--C)KfPN0|dIz@W{pH`jIGd-X3-=8yp&j|p|!nYIw;gxhp@x$FB zYEm1!_f6^Bnp#g6|HuLw@*%nhceh6!{>zRkUZ+HRiA?vW(I@yU;HL#YpFLC#8sh$i z0#tWZ!4iIO{k>5%a??>C)0kq#_e}A_vQZ}|GVJsvk~`hjkn;YW1|0sJv8Cs6rsrbD z?@@a2Q=Wfi1QbQ07E&L;jPkik!*K=UYbgKOujZ!~;{62E7Pw0KLL)(5(p58Ybv*7~ zINtN9_0xF3p)}xg#&5ag@6Vw=m3?Ix1!*g6p+b9$X1G&8zSsEKrG)|0#U!%_F;z^$ zEo%$ks~21WwAJ+}-xHptLnA+p=zg343|(|CUwA)`01n-JK8>1-hM11}y`Fm9o?>{v z{dhK<3Mq!Fwq4IfkvyKf-Yy?{s@^w_!PzEF>)YIDKdd@MCjB0jK|g=0>J9WvTYY}? zbWc0+ied`MF!~p1q!$@HZ?W}t0<-R}e0)o@FNB{MCM>8U_-s`@N-cb^o%l6>fE#k_ zx1D8qa8Vpd4-QEO4Ji+PiuX)Qi#(S6y^sbyl7~W3Pe(E5IWlCkKfC@SamV1R)yUyj z$NXeIxa|e;?F;caMfom@3MmwifBfm$5`q8pND0u9vdD4?0O&|q2oE+u)ZF`1E4@fV z6H32%OUU*Kz+=JhWNk*YCmoG&%9$6(jP}uABGq z&w~jFzc!81JEO194&R@#g%;tLm^2hW1wuImGNqXyeS!lLZUWNf4q%QMWRG;+=+WG9 zd6H&-26#)!OJZ%E#JKvWFoZ-UGIg~3g?d@Pa?q`1@3)LbYmAj|K{VW*!;PjhIWafLsKIwP(q4-}H zBTC}U{^4%(@7@5IOPqhoH8j=C4_+`&{Upsh_$(5EOm}Qn!r7jpc}Z*dfw7#3=y=tu z9#>&}0BV4*8fV527moo{%@2mdbc$thKj_wPJL^KJnr?$~aGsqSx4%6-~;(UlSYI+^(ISA!=4wk~#tLnHIeWLK%1lS`xTRcY=M zBfu)m=O~TWt@t;1XSay;&-nL3>jw>w1A>Ptst-63o>7`6gnSly_97m3@(MVv0$HE6 z*lR$#ohO=ON4(L*zdyA)MP&S-?FWhLhu{@{YGUCMM6kA^zs#ZYy8xf}Ra74bFg?$0my3GH~s8G!#cYJwsZd1gGB63g3sW+3h|iwMp= zua8R<7i+bi=Mk@_pY^-odvXBS&+7mA5?*=W-T7a?Sb>RN`>;(qYPX8jE0yUsxLBx;^q)39r zLHqAI#OS`Klf14v`93+lt@1w<)v!p1_^ee}dumnR4II1vk4vzyjCsmFA3WrDJ!{uI4o#pt_<`_+Pm=IKT7bA*4` z^LtRwNns1%T)`0l@_mW&d0f$`p5S#iQQm_h^!YOd3jYpW0CmXm?73|NhkWItckcX5 zdl;W5m@hMp*AvB_;T{0^%ZKtyk#U=TpjK(xR>1VFyPtiM8lfkAfWe_aU?@QTJLdEwIpL6#{4h@B zJjzTmjQ_)M5|$VIVVr&pC#8Sd%2pv7o`3#hIN7`E2N?dxaB|iDuL4eCEw<5}_LkQ6 zPR{X>&9#MerxaUTi?X>;OWQUyMq;4X{^Cm37mg)RDwk`I)fY{qP>FKILp=~qrE@r)Z;myT z%;X3Jl6OkRor)C*B~a^(H$SZhk&uo|3* zQPk;$MTt0Vt%U+|$!&P499U)KB2TQOzrs=9M)km{ImPjv_tRd;(g}WR5T)%9Edu9o z`IsL>0?)l7!n5P1BNpf^OXTF^?3tJOGh=&#=7lP9oW|!cH3FAV*_?+Klwg}vil!EO zS`^!m1E|Z2Q|2wLs#@pmY4UOL-l>H-=tYRj=-;3yOSi~2wj!8CBr7FL`=QHB@kKxAnk!Vf%UbvLr4*_c zT{Gy5;#@Oq#OHuJYub9|X;gAS>9|crhx{$5yT8iE&5K|%CTjZ$Lnd#!Nk=pTj z03JaK!8l%efo%B?H@jswD}aEY%@uANU4LrB)viO6;4Njd;OE=H62JBX)6`!UYPrS>9!w|@6wpP0&j0Xh-wAT_(-ZqUiEtH$)DZrXyQKl%aAcTaT4+^p z3%s0uEee>@BIcXPykH) z-|;UiZ<4-D1TZ18f4_FY7HA+{E}MgHSOtO^FHzuHMu+G<>moF?aqrQIfnk^;)r=}3 zf8h^tK&PLE#^V^=_9n&MBSA$2jp}Zcy475>GB90!YSchbI<+VxZGVb`w@3lUO4j!lk^8t1~^Mv3(NP{ry=O-^lT+o2rZ? z$ddY=HE}JpXl!L`%%QLesU`0?6a}TSE~*cy2$ID#2A~Z1JP+B^nI|QeV}O}-ytB;c z(?eEq2syj-h1_P`5}~!SiKMuPye(}?5i%)7BXsBd!=MuxP~sW?NdtJvpZix}LjnqI z@afQlL?w*rbANS}^O0=MHmR|dgO?MFSc=Mo2t5=tj#*OrMJP9}kK~g38w!++vjj_x ze!-NMlqs`>;@^4m`)mX>K@1@FV4=*OOXPx5fr7PDg*IOXj;3$k~j@51_+Hjy< z2pX?9@xz)#K!jO}TxznG&oic93#$_K9W2|RFPB0}Ua)pp$Tos2=UE?F8u?kOX1g}k zheTDF5`}B%bzhUm<;j8I<*jr+tK|67q3A!1mDtm>HR!=v${0n+eF3VHaH3*{OZS9gr8Su}o_v^$5LC^`YcOpd{L*AsY(}K#+VGdX_~?#&8ljcXa+yF~07dJ;Vmj&TtJt9h-PK)X&FUu!x02OqLUqyUB$qZ<+%XivEK2dA}c z?dgoH5qUp6pn%_;a$`O#iD?+8Fz}64xhp3Z?{f#tqi2&uJB`J!T}!^BoV4mDEZ9pp z>Qp8law<5^lwh!@3*}f9c=04vP&B2!X&VyOTh_%^+H<1WmL5@nQHfwRW*&L8O_V6S_EyLKh`*s7U%t|_S-_d>{>dr@TU5{SL_@{<(51bb{8 zp&wS=amI$x) zIb*f!*!`IHScb`5_j2Q%mz?ojV|Txe;pAxu_`C{v$-eJR>AVe;|J;+-O*sJjVZx_B zueyDD>8n_}wd}lFYqr-fqrWa-ay*X)THjr3J^8LcCs+{gw2=oco*^Zt3-xZOTz>ADev?XZ=o!1B#kGx|5}Jmc19noqXB7`cQ2^ zLp@8_{n20lBCiGtNce{x`Qxnmi;enAlm^!b#2w^|`WpsItr=CcLnhdM`!4|(Dw*cz5e8MHqV zB0}lza~u-D5iVtp-rWZQm#6#3%zNl1yc#oNNDXPbSUU0apZBS0OKSubWLWA*sClYw zDMpw_D2k4PKR0GLgkm@*WH^?2xUN9Br320r1@qA}W<-lu)hfuv0V2+c%lA`YHf5v_ z1(G|5Q#9sJvfO8))SqE4M0Ym&mLo8Z+wiHKe2@@(VLYPx1GCzHZXq z&#p2Dp=Ir-KM{m;5d{*yN#-%)BR}Ctd-%P7F{@#%p-3;7v5y=v_n7gdZ*iEIu>gti zvlK*NC>z4HXhQ`z!&qNtjRZ;$G&BH;)n5}Vc&dNUW3h(IHZLKxthfBY?(zAM_7-lD zK_#Bk?s3fSVb`xdyrnS|P;sbZab#^tbXW?69zj;GNw2FhMknz`XYr_spI`=5sLfk)MOcu9WC|owIH5*@ zx@aV-826tvLP~o%qCXru(R-({QFE zl>SBbNTQa^dOJL%9+K?HulKYhsp*j%gnUMf_%?B2+M0| z%e|J&@Q2L#b(V+bnP9D`WFn|iF^Z;3N{ywKNY)o44OI}zS@2t`0Fph|SG~ZcH8id) zu-YQ;;4Ig=En46`p5VLy$+HliI!|!DFvlalb}buXJ)Uqq8xK0e@ps}kmGCu2u)%0i z+_Q~xXy%<+0CHRuazOFA1ftk&J{xr*6SOl&d4Z2aiBo&la$0W6S)u)SQt4W)i7})MW)xhmm``mBC1JM>MMZj6Q&q4)-pU0zn1;scE~`@ zlgU|6S;MYM4A-=5&u4TfsVy%TOi!NEC|oM5sE5wG885NbEV|Y}#4oS0wTM<5M;R@z z9A2-fz-llSsO1IZ)tZ!-CAHULeq+}fe=w1U7w@VDhlHXmt=Ga^RVkb{uY&tg ziMl{RyakmZAbpAGu1q*BEfI)GlY02C`D$OuJGH6`zY+snDs>CX< z?WmENt2Y2#bOcB@RdF_LS0JZ+H2uEl7`Cb$&FC2QLQJ%3OS7s4^#V_qMojerceH3@ znrL4AP@8cnEBMG+%5Z?v>dlhw6`BwgMzlr1?VD#o4&d%=l=(6zjw8tnaky?$sJ9)NK7HRih}Aucg&bGa18b)%PG-M3sqb zpxr$>-pyFiLlilzr`5?&*~5~F_*5~#irWJmH^ACC!eTuj?LX+6fh=h~D0JLLVo)p# zI~opvEm!y)3Tf{kqy4EjHl$_My|EFUFqs!!-qXu9)O;}$8&T1gS+RGX2k1r+&iO2WYphD`Dl5x!{2{8lt+u2UVAlK04KD6lu2MPPRBF(uY%p z6oa=JPq#U^wF>XQh;Ol^O*b>ayEZL5L;0~e@3Y(e@1wQUu3p}QYN7)U+Z}q?i3;mw zKHqr^{B;}rlXh67-KrjG+e7zma51?7AhJWw`1C$M5r& z$t@7Y6Lf!YZ#hI?_)`ztLty_y-|vgA>I+X@L{HsI(dk1iOy_0a6I#;h|n+p~_9 zjmUrd%f44cx+`JZgSTHtUc5W6cs1UiXLwg5L1;Nqz25z@^?`a10)uO8q79x)me-q{&EN|4DMl-xLUc5fgM z1PeKc5{Vcq01UylbJW4$Kax}Uqkdp+QNx^ zhF~x}ndYK#Mkc7sqyD<{S!@YcxKPo$v$;x%dKGn5dR)0;HE*aTnbz{9MwPy7zRAVF zl~$`mo$gina9^=GIo4VaJ%j9a6F1; z$p-tAUeFcTp|^!xvxPF18q=-!6RTBwNRlonil4oGr63L4U=bVa3r)S!ws_xKtvW<{ zNzkbMomF>4ZaEW0d|mG@b?pTYqQYf$pE~m$Cow_f|@m4QEng(R##u)5>@op=E6{S>{cpIQzFdW zTXN-X_cIPa@q^wC0zW7-@?#n$D)NKOp~Q5)?lw3KPqu=THw4=&A@a|e;zSMoLXuHv zT=o6K6a{HfQ8mUU6|Tev6Sx~oe^5Lh9kSovNF~Ztrc6@}Pcz9R!X_$mKSjHDNH;R1 zKZsO6b$aL^kHwH+CkFZZ(n6dsP&<}l#V`S&TuM>)8K+1|GIc5?MN^d6CfX*WIL*ZU z)Y#7^4EIp^+XHf`T}D~OMMZUKm$_CPiA-S`AmsIXPTejERY=?^t6@%;Br1Ldq6GC> z0i3Q&iCxv}!C#}g`_p-yZJ_^goppf)tz9_=Cuzf0(&kCUaf0<_lMfKoB(CX^&sw7S z#EekvX5tCbl`EypBnc#6c~2@G#;dv}jYssl3t6|txVee`Y)@^utVc8%uk5L1}1d}Q!>owavn9SlZ2JtgREE8S^%O_2bJ-d!mt5Pf|f z>sT{^!)yWjLFRVOddQyBrt8F9vcHe}y<|rPf2gVbn0jwqYI6 ztI9c31L3Ka+t642VVx%>cB|V@={Pm}m0FlFUcV=MUhAGC!m4n(BfI@xl{`w;^+^7S303VY?$^g@5$NeSn1#(V)g>h%h*YHXzl%F9XdrDq*UL` zO~hXjW&BqcI74y(t%%7Jm}c)q6*&tf{VIk`9qF4*f&?E?+;(MM=FM2C+Dr>t#eaV% z>@k=#V68qPxbF}m5@d*KwKO{XYsRj518>J(>?eMun7~Ox@+fpVEKh7rxrGyoEvq5K z7LF*b%4I?$DA|uqE*=ZVoij)1Iy$d170U*jPplW3{|Fc7B)zah9_1lpOs<@!!(vny z`-kVk;6~QW`3QT#d`bnNn~+%MZNjPr#e)3L$&0R%46lQALe3yE*aWx^Ils{nL<##W3UqneHtGo#?Vftl8}N0w_fa|!|LLX)S5Qp;#;Awg7futGUYN&t1yQ-(UePg*<6o^r|SAFl9t4-)zzsAqT$N^=L|h!N^<^im4V>crGfvH z5~ZWc`76fNM#Y)|WnkszCT{IZR@-@`9=RZ92f2zhzN(G8P9AJCbBCHU>fgx4Y42N#U*{`nP)l`Lk5@)e+?zpCPNwlD*9L(Tly>wj^$S(z z=B%DNm!@hB>Q|L6O%vlv&_@-`NmNL3ZpshSD5=I|z%~mJc)0y4HT|%K9#;|@OT}&? zj)OL~Hfd_AtnBsTO~^`f?z^@`#2Ra6*FNiY(l zY*#w6$m-0RtPD||REO4d93pf+_c3;og&e6a2Ao5yUeZN}m*Xl3t5l5sT_slgPTtuD zcb4Xuy7$8XlHwKptn`PaFw5~&&yA9JOc3=r^24$$|7l?DqZp;sZ~8cdO?Yo9MK>p! z+1APGcWPjKq{!|U+(buIWh3}fH?f7iU6Qfqp${GXlrq@CgQ)1_0+#Pz&^(8b>$Kpmf6}I44 z={2&J=z&_B2dZ&$fHS9$GE6U1&OX)2u6Pcgr=Wqv!oc&XF5y6S~l6nJw@ z#%5~+TDqXG`~m4}(k5*66s%=I;@bNtIj+5;+IO?2K@AzKtbA9rW*!yI937Ev7DdYU zs&1Lw5(0KzU*=XSK59GgCC&p6StjA!+IuK7r8qXxDi;n&E@zlIW%52IS@i zVE;iv>wN%2@HS!g-65#v_y*i_Ra@izv?F6$q(v~?b24?^vJ7#?KJhkg z$G2@DyUvqs*+f!@Lq*dY|60QjGNR^@&^ToG7fA)%mt3YkGlXCcx}S`lv%ip2gu zXZ;vK{A{2DREg|!(kRp-y!4yBY@0RA&Mn)$zf-*e6iNFO3Pq$ucyI@W)g!wIF9pR8 zLDm*H#6I~8UWIut2Rb+ge^myGfd2GCsL-EYXwqzh#PSe>1Y*b1{z&-ON|I|!WNk`jKXRb+ z)W^e0<>5-@%LpX%ND1hR36qXyIFA)NOO*!or(Xt^6-riAj;FDR364UhJ2zAmN~K*& z*5OLmYbP-dQuyOaMAMGO(n__UNya z$RK@6hG>WmcS=}Ti=Noa0yzaRDGdfpN^ee1O>IuhIQN$Y$#f@n0k#{VGD$Y7e)Hcw0njJ<%c`PFe|55wWpXSXXJP$Uc6+NKIL1OWSFR@(`myV zycHmW6|#usUn>=0x)fmHq+zK*;ja|lSXkD0Mm})ozO*@!(PmMSBrLSiiUy}4$!1!; z=XPlkE1YNNV8iFE6~r+?pDO1va6$1!VvpYeUvDpl&G?l zsH2qR%9LoQ=06jgye9f-+a!RSBytlKp`NBNz~&zZ6?oDhV zZeAI+o~0>b%X@)1YaAbMo|8_cf<=XeOpcpZ<&UUJ{_d=B)RJ`6B52lPL!z9P&7|_A z3S|`mn5Y7b)*nPtRaFf+q9G}WuetljIWyTMl_u3|eHC`raK0ue zp|1rYI5qn(RYy2A4YDa!7FAsxHR`HAUx!P3`YUpkORiZB<)ErFIL%NiSNLGX)|J0_c1B7h2U~2zjjjF@MicowlA*IdB zC#o5Vs)ifx(7RkQt(|!BZ!sQ%~<&lOtYHvr$(rSdHWW4X9mpY7%6$ z(MX|FP5lofwNgm7=B~0*yrcw36mkMv!qZ8NpqmewT2I|vcl1FKYEsWVlB}cC5=mWc zz|%Y&T^ZCC1X7Vfrt8)U))F@+m1PPknM-qWo9 zTI;jX9)a7a4MxeaNv=Z+Z^%;bXw`0D)oP*>?JNq20n?!dBA&xTnazTpyV_XP*_yS{ zS%wp)VBMPk(oR;<*+5&X^3eVVxBhQQXXi@?up70Rx4JnMth~>wdnl`WB)Z{0t9^_H zc@m{Nb+s8St#jFc>9P~KTLExQxw$BMElG~zs^OM)I

      7Jm=sSPPzf4@GPbm3#{|dkgw_c`R5PG}{2X+Mv;A zJ3nk&^CiLDIbd;3{sZ$n3C zacCdicB_t~ehg1{Z)>iewGlMgfN@wGAbx59g>H1Fk~D#4$SJphn{7m_3d%ElKsvn- zo2|!xY)JmS`TaGsZgVypolY6aB^%*S z8!Nz@C|(;Y(VHl58!O8li79|)O&%y{tLhgmJvFg1B=3uNB_nMcz2NETHg8aN>!N=j z&>ZWDvKb?qz|&Dm^O75y+L{KKgVwz65~Ckd(JzyWY3h)NQnl)dT_5uu8$FrqXpkSy z;hEhX9l!q6b>1pdu{ATVHa3ek^I)4Zd^Ytu);I6l_Fgt|l36L^J>m6TUy(ILqBrwj zHpLj$`hruo__x?&gRbIg7Iu6H@TfMAphxolGL5=6^Df#-k=3K6H`l&a0e~9&!s|^h z?CYvp2+Ex%!J9=6pTc&Vr&pf^FPs~Xz;+xOx-^rSz`qdzYYGtSVp zEbi{o0k_C{)?W@j(ttmvZa&w$-Y2s)4-&KR&$cuK-g|~Kzj0Y>Mpa(wr$%+m#r@AE8FU_ZQHhO+qTVb^?xvDR_0pS*$4Y@C-3n%dXtf7rLzg zvD;K1a9HeP)#@XEN4Nf^y7rc}o<(m_YHIO7H~FP&o{V5w#%{Uly;H?+4ZydGNiLvy zK5zB09;GiRVL#~*KQY>}jHW+bBfBg-zKjyLoY9+{#ApEu)M zCr=&6Y+sc6{HZj(^8I_JA%Bt#aR#*fHXWq5)+M`G8?;{J2OMsTXC<3hR-Y#qTL~;% zPez~fXJ6}IozlZ!{jI+0?YcXP<3n}Z0+uKE%w!HKp{1EnoYj= zs@|fntEYEPmah!a&GP6^j@SYF(-nwcM|Z`5ujHvIbbCl&`=@E!w`kjAcH6+`nZf35EBYSVGGORSXRi|5Nth_&^<_LLGfG(I+;_@{^z4yZu;=IB2# zkfsP6Hy`qHN%ME0HikOICcvg)E7+GaQjDP}wOh&<$LrHoN1K1+%Y&ny**D+{G4bwW z%7Uc&4_vg}ubo|9NGBA6`G+FGY*w9x1$ zCwX7|RqKoPE=Oj8vqTrCrS034VT%_vhgDL?+G0$mnwoQnOC||>SpC~yzW0sAPKN5R ziaSn5JCBi+&qg^4dLzzW*S8=kPrMj*Diroe>N`5*cH7IBJ@^r%J@%wETOWo)951JP z%g+?KQ-=C4dB2~Hd|lmQTwN)i9A=(y^iPl&Ea*7yX+dmf$!+{zUi@bM7@N8VGIae( zK@m?i_dj*Lx;7PYbpzhATS4nz=>crKqg~p?UDZ>z1SM|Q&>bX(?#4_X1I^IbcgF+} zLz8^*T~l0BW8CFNN=j!RE&=wcCw5zc{;0d|*^nn8K-WA1H-7>TUxBwglfc9rGX-CK zwBHe^j6chEpVje0OMb!R^mtH=xCqs_b!^-7x$Z?me$?Z?3fB^#-DHo^AskXPR$9s&zANp4c{R8|lBZ0rn2^XDv5?T?OyEzuxESXu~5V zBPUU?y`Dv>UIDeP<>^OY74HN9%OOpSAUi9dQ3u$JJRyu56?$O5o%I)+9Fdc(fa*pf{hEoBx zG$NnNrz$ll^lP~lnN273wYRf8nT`^IO(i&RJMzj8x_NH_vS-VMTb*TQGoLaa?AHT- z?H{%^SuOsIi4;i}zS}W7)WR4#Ky0}a%SaRu{PUl>_E)!EL^i;#njM{v=@jEvt}$xg z9@k+>=u0!c08jT*C_8Cb_x6VxVgVFqn>{kSSc>S*#c|~68V_Tr+j>7dUeaV>q&bO# zqdOsYf_YR*w{3gCOY}`Nf;ovDNUu`}LaG0muvQ@7BdY#OV{W@93sNb`?lh>4*uP*6 zQC9*#pVa5w+@De~J#eVo3WcuN(hR+1r7iTsRnyH)k|h5Cck4p9?)$Rw8 zB}1GffVgg|5?^hEHcA-^)x^V`yl}0!gx}{}=hi+j?3${?mYRfl?|p2fDNWmKxdp7* z?rJ{xxlJ@R(P3f7CQ_efH1&Gao|P!M`R~@HitQnLhA3GuSMe`HT1DoX)lk`SGgR1n zh0)L4rctJ78uV$$$Hr7pbdAtBPL=*ND_zda>pHq(?SJWdU6rh;`{p5J4RbfBJ8vt) zn0c&pP7tg}3Rmhj=!b9jLzSzG4clp}2q|O^`^ePI?Zo+|3iFyCn8<)XAjI?DEyZC2 zF_lM&U7=}f@vI^Vougd576#$NmXA9>&v_lDxiUT*Q9nD8#T5)*K7@fz(^}C^_1W>(=dO5Rycji@v zUh#wa7J_8;4HF|9Z3E(7@sr?-Mv%d&%=k5KEl4UJxWZFkwCVIyH#L&2=jcympjWZ5 zJ|BbQVn*V9b_kwJ(k{?bP9Grj;ro=TbqfvaM z7DWv?d4SV#&OS=P>rP5})-w)w2j*x|6-0iKb)h#Ml#Do7Tjm|S^rt*a}<9V0c!V-xqOzAje=fW9oo+vN2~XH`Q8mQE;tkEf+_1uqI5d zvUbG6Jg2O)PfG+>>gB|%u@c;=!)!2&DNl4Zdo*CUYOXZ3Wae>Xc`K_CmS(!ZF%oO> z$AJlK`?+fSwq@mClVi=0(#b*YgwWYRcC$XxQjlxd2Tj#v)Z>;yA~NZhI!SpTtN@Z0 zt)G3S%N6CSRTOg`YAg72OpRG|E&_*5L2;5!!SM(i~@frrvZCXJa@&5;%MDh=YK{*oss&s_Zg*@Wn(QN7@zgm|Yo7b#wd| zyhrKm(BgllC78kI2vFPyc(xdf&}6n^+G$P6ht0%L>!?AM)7k{-cM(E%1sIoKJ0ZZU zQr;vucABC4gu8e0I1@?@(AP#ozQUG@arWyWnmBx40~082jd{8EenA+DTE?!cP?v7*g-M573nAXA345lj{XUW}v6ds%QLJ1K zw|@MW!>UVVf6RjcBez|`ofY%{7^P8ms8wdaq|zlqqT1GN7B=705EJ`7cl4{10>;17V4@O!hSWi|Zu;4Lr0we$5_tzTjV7nYC5un}V` zc@U4QNHImLyoA?(zlmqLsX768Z>YEC*AlLi;lY6QV8!)y4tKgS9+Ik z+;6F>-eLaDBG}%|9X|tNoG|UJdaENu$GU+*p9x0lrW)C1K-{fKF@)aA zw@DJclUp}Vn4OG{fVfYlf>EDtUPf?|nIIJ;N7R%nXQDt!ExnaRY}=dXMf>Lp(+ETe zM!AXDXEU^NP`8{am99;{%}%ot%}`H@;PXxU3GLS=nle+8&OIYZ$PXNDwQLcnsN6Oq zR)}%1^vzMH{R>T?Y~ax!P=4eCx|stZJ>+?!-l_vj_-GPjQY`WO)hxnTcnRDF? zp*%cHhXXw%l6=*JF{DBdTv7>nsLei-A+`hFX5>z2Q1Vf zyayL<4Ao?Wg-lEYuk>Rr9D^QDNvV(>8_$5vB<{ySktTs)*Sspetfz*F&U`Qe^uAi$ zAvS!$S=66drk!L}QUl^6I}>8FCL~2%@A=5yb=2BfyjGE;TS3wkzTh&v6)Lg zW;%LR*zqY>sMnI76@Cd$)bWDNA>nh8=vqYV62Z)<3b1ktbE}}s`wzoXp?E)8AR&dD zuv~0#N`0cSYdD-Kp-QwSsekFp`PzQ@lw409kx4Z9){>bB_8+(FlZDs__M{TKWpeqv zSOaklA@_aRx25$fY}=?46NnQpcNky!(y>Si8~S2DaZ!)0J=Hb}XMDouuHOU!#2K$8 z4$sL!)lh6olo3B=!O~CMT}o!%b^OUw=EsyG8&mAl4`Gk-tFtsCAS_A;DdWnKx@-(n z;9+IxfV+n8#RSP|3~Hvmx_eT^$+3D=*&yalhfhV#sP?$+Fz|3Bys3 z;O247$jRMQ179eq@!3g#$Rh-C!n=>-P{WK3PKGflf8HNI7S59XF;D5I%BK%Qw+YjQ zC_38AM!=fi+dEcTC(^HzNiU~L%UduxCb;L?uo9;xCZ{eN56M=eO70`i>OVb9+uLcv z_bS%~aY6rJD#|b}6;Cd&o*sc8lY#kEk`_0oqAnJHrZO}&0(hL#KOd7ZA9X~*)k+%_ zUQ;(&N~{)wG@Dj5pZ6lJ?ra){Ti2iWOa`ONm!z}j{Jh>P8m2CECrQLU&sVGHoEC5C z2Ikbn`<=IDHON`q3lTOZXEuu)+d7!LLtA?4{cUYN>!iQ@^Qv_DRZcK2S2Uglj(!p= zXTf>Dp2w*{>rTFIw`Z_j{Oxv%;i7HN2D7DSXl~=Qv%mKjHRuY|cLs=GfeG z&oUsZ>fepr{BE<(Z$qqV+07h2&VCXezF*LNPAjBe3^>TyRt;^^ILDY6rBr}0u+xo?#Q?xF6*U@gXWME#z`}b$*R$|V*tZfWX7l1YL@JX zlhO2x%~yBQzdZ4-@A_9&+OJ)cN%ZB($E5%;)Y*Dh`3v!sYu6^XJ~ggu#6z5fe~Rhg z^5$HH%Zqahq0>b7)~oyeUg}3(1yk<{MV4#8GrTg#-l5-2GGlj>)5E;qG`m>6WSg1d zo3}gs(JQB(FFuv8`@wvDbMdM6Kz#~)W*GGGTbTac&tE%MeGy4a7;IQ;(jHxcj0Kis zUD~_=rfdfeYIi@)_+#Z3!paW5fod1K{7Dbs>_f>vZl>0pw#j}f_4oMK58yED!0j*H z+P!&3hpw9qA0qtj8c>4T=~e4rG!|y26sGHy3$;`i&GeVEWGF2t@EaBIB20ryOgI;# zXhwD1OL(ixfH(4}cX<`b^{a?IvYlH0@9a9mq#KYLrv3bDoP%3n03!*_`rq(Uedr3@ zhf+diJ7WENln+}G?@LI9dyBaVjd4X7urLPFL*i6B3*Vub)e~9KBZ}ub$=fzQSDYLZ$U9Stq#Lij0}s8c9pB}l%96A= zY;(YI?$4TIQT6LNQ%)%{8XE&lxY{F-fF)OL^XJ%zwQ8dbHxEnR4FU>xr_4ok4$L$c zcC;u|b=PN{?vLyYd0v!EVmJkYG!6n3H_y~Hp?bAKGfo;VWLP725>}AXC9K@#%#-*d zPS`9zCTh`kLVv6gE;Ujuqs^aNCO*~5*l7%9u;YxBp8}B zYV7`KJgJHpsx{O(FNccOI%)3Ss=xeZ+c8$&m{9Le@y=&_TAOlUcl>H%ywzygx zd(!+>eb-I!P;5`cV8YY>WLw6f!{|s5L1KJe)*@YgD5oT11k}&g%FD`kG#0<$CUCj! zW+RVzVAftG61Y=mz@B!v=0cu5uCML%2I$A{TQf`rdOVwb(5R#~S@;%ehd7GEI{&Fa z{tfFaNpP!MPfL*Cuq0+O#SN#yO@>)uc{CMd_sdnM_zAnm2^i487kI1Y@2o-bgzMR| zM$X|7)8ba)d|6j7bKtaQD6d1psxov3X=bBc-at1~=7S!D)xgn<%Gt}yF5cpRaA2sd z?_`zG=y5}Xn*l(i1uW^+9XmAZB~ZkE=O<%>1>kTtgE@e&xT2K+ysa4BdsLu|;z&Zaa!ue2UcWums8e$TB7HMH!=W^WiBpsL-W8fWDZ-L~ zy}K=KT`j4(>hd>^|YlbU*)PJ z4~v1PiLk?uwAr1*!U$9+-7v>CpF4`TSBtkYN<9DZ^e8fNQY@gJA6BAMdf!Vg-gQ5E zIDQVa{0FP$N~l3_|#|*Iw1yKg~iBy;<(e;ywOsN z!c#`?E=$1SrOz4=&Xdpc4rpK*;&-z@Xh(qsI&Oe_FqJcAWpfj3Jmv-R1FD9*tPn*XK014($ic1)7jnuo)=^F%l+Wq7KJZhR_A zhh=hoU@rzRI$9}S1W0TvjV|Pit!<5rrP0isO5NN_>Z2Ms9V=2YC+<>8yke_+e-Ctc z;NJ_5aDm0}Mqj)(;ajA2cv(Jl4l1?%HbdyZB_BFaJHM3)fj<6VgvLdP7-av$C|nZgGGes8=M zwDGi#Fz{Rijrf7SQ{wYaAbZB1$nzippC`1rHzvNEjgCsqIGZ{?Mj#(II`}#tc>6BQ zBHwnSLhQC_hC^}E9s$%t6Cd{w-|xrur|N&&74G(dUjaRQqd7jEDK9fCUWC)%@t0pr z-k!h3y#rg?5m>2_Bf3KvBoHq<`)MAs3O<(E`R7jBgN#ZajLITMoceuPQZQU@28syV zvjS_r7f-yFV0{m2T$n~W@j-F7OkD{|dVZ(2LIhBQ#dO6L>?R7ZvH@N8e5oXzeBWe9 zbF>?8H+*wy93s?l!xwTgY}vcbsRZ+KIpeGVrZL`CVHyKDAX| zP~b+>rTgW%YU)^HL3cA`Gkn6eUZFG2lb_jB@!PZWNrJOR#`V323jMoTgx_<(v0;RS zWz(~Bq@)SE=AKRlPqX9#n1N7ITVg&SK|i|OnsLxJ)WSxN+y>LkmyOZIY^L!J3-M@` zo8&=(9KkwXP1XWLK7&LwZh3`{{urw1RQu(0!ou$Q?fTvT{wT8Nr;jl0VU=xJr<;TD zp=UZ-?F}K|LZmHl5B&J@6{r~TzF5eSECFV``*4djrDJ@CWl!seM5MCQ#N&9!)4U1V zI+r}~Z_KA+?{JoYdA}>177%b}?>E)zH>1HcSDSG%AvlGfbQ8C5I7_CB041xxN}Z?a|n9QjP~tYyo-JrX4hAvfc=+$5&}Z|1B400 z_b18!@K62=KY>Ljfg|C;rXXhJkz$jx5mFWslT-a~`9#BA?LYDfz{?=O@Sl8Q>|63r zJ~7obFa@}qy6BhztStdfmJa_uFH2Wf%YaJjzyh0)N`QkGz{LyTod@{8_$OWt9)1pC zbq+C|4)KGI-cgRxgH9e!PJuB_(T&c@9WE~3E*@Sk9ziZXK`!aTu8Bi#$%`H?0UqAb z9zH=H0YM(=<6d4)UJ0$E&~I>v;3y z^YHug`26hh>+|XD_5J(f`~Bnpr%wJqfldBj9`esW`2~%;YLFY?4~0UlGg_P1ABaFA zohezDKNNwxHmD&0I zpLx8V5L+5fM6w~UxU6#0P321!8V#0oVW_Z6aU3e5(78f1<4l z;ujKyEoz_xqA7Bq5zNd?L5pp0Y#5m!cCkIx(Q;G!6TB9%#kCKMUym2yrs(`2QVuJd z;QZau{&dl43tPzF@#DwUPc&TMTlSp00S*Kt7FmLC|pd9HM^qRJ0p(bz*_=t(@vy&zOIbJZXMq>!}05yhZwBIszR%}^p{%#2{l z;?n(a%rv!q@shm5{SZR>Aj1&isZx?K^826ziJ$e9hq0mvi-e&J&6q|}=vSecVJSAF zr188;XQW{odhS}uI)5?AqBy-Z4^xekrRJlt+Dhj_hxyuyGBkzLW@C`0)_z-B%9kyq zxTK$*mP63u^3T~xyjY@;kd1=l<&)W!d!nUno|e&HARlWQ>x>S!eJM=6zbQPl7h z^g*%Ya-n(k&mXTBO{+f5ppA1yY8UP^^=-34^q7fzVhdBtvx>a0u9k{0skyyBc85BC z8$cOX+;oS}VQ)J8gaI$k2W35@6KTRj4lq#ZUx{yu4nWKnc_2FU%LP#}zNm#_Y1Q>Q zzo)q$RVB(h7snvT$54bgks>Y~RO6v{L;N*7pn?xv0xr?s%^%6`am~CWk+p$IyIrIXlr4@i z^0zPzA~?&o33jK5EiiF|NZa<>E^Nu6YQ{-nCk4)aXEBYAdFR0G8Q7mtV?*Ie`pphH9vw!}=B?DV@KtWe4+^%_CW*Vfm1J?=CRm%*ujdI|;^T@392x2vC0(|4#D0V>=;$y;f!{8v!`$a}3@azT zV_!ds^W|~HxAds??)P{8(Mt?4?P6ndLpHxBC^kmkFnzNb)w~CSTi*AZhA@88wHsQA z(HGeo8Jt0*B)RM+@L@p`Y>GnY<;ubz$0-*kX1V7viZQSXCJ!7`0|{y#(G{nW2n=Vx zN3_e%g|~3;7tongxbW!qFU{iEb9^b?GuCZLRX7n+%&P!sdu+IB<~(XwOC?SE?}(Ot z0`!*Fp%FvG&<>+Nvdhe&?9GZi%F3h4l!E@hy!@i=RSJ;uC}W8n?!t^@^Im^y_C4;^ z#+W$e6PmqBFmNNs8Yk{G{N@zrTL=3EC`-fT2!NDX2aC}2$_sf885I^s{u@tg0_FTV zD1?p_m?ug~N+OA(<#A66qmeImPstW`d!MX!SHS3-DyANNn-s}vAT z=C2tqh%1_qF-gvb;x-BJc*rRHX9_iPike6_1eaqU)4sh*bqOLV3QRr}n*>a#;E(M6Hl#!?hmsF{jLl_AI6& z@u?GWl1wCo(#ONbMf1tOj8W1Bk$`oLIW$Y9vS!i?M#PC}l1`;Eu9mZj?@of4M<)k= zv=;J_(bCE@EfD*p=7G?S`2tbp&e7q&o&FY<&^c2|2pOwnkKe{f*cczh=gy5sEmcVV z7S>v6UzU)5s#+(emLHH-Z(MJxc7r!lu38`II)18Qpev&JA+_9JzEm43XC;xbHbRQ{ zTx-c@s<$VtS;gsJl?q;I%0Z(J^0%q%LWfp$rhR&j8nwPu)mo|MRHNFIy)Mp~&J;&R zWfeI83|&=K2^er%n+6ycX?M|KfKF((^P`uKe9<68WUQ}v)U=cqRoNL?E}!i`w`bZ^ zI@fe;TyKN5`Z!lRl4%dc{wZu5Cc80S@*G-#NG6j1&EPmx0d~=k(X~2sW8D_6{WiSZ z0RjQ-wzaV$)Xduby>;X1t!D6ou-g6z&JX~3VeqA;(SZ23`tQrcPD8PJbJG=_P}|4g zXFO*wCBJRZzx`Rq=x#&KNl+0S(z^4em>suX0setBDp}kZBO!iOVRxPfL^xQZ%HuYG z84qL9lGicF;ffeDxP!Or*9JmBU1$XD5v}stAhf)lAq}oFiD&DWxt^78-lS>D(O>c--sV}~1pBbh6MQ0+>1x& z5TNa~84PIsE9SG4+M}~JdFT=it!I|8ka6<7{W>Ng|Ck@ayF-5CD*TuK-$d@QLsLRN zf`NaQMZ>#?!tl~q;ps>^gL`tw-j34zWp%Z$eJLyPF}LJ%`!|;F3^#;(GbtLe4HE0D z>%Dorpu4TktZ!LQqoWU!;WhchYvNX~y}=~=xyEtpuxhYrut$EM0u291{ulEm?B?tA zNY*jv8}Ho7_e%$bH_`s`^McsUqvL~aR0@a3mOai#Kg#!WQOonZmF?TuN7tRnFaATt z9nZ-Nua~M8o(sNTb`cL5kCaB6i9pC)!sm7i<{@24StdW z37AeeqGCBB;ye(Pp_A|u`~t2W@L z-WCa7`!2p@>fW7@9-}R)Xs5Q|AYG~5{2p6u z=~n~bM+0C^{UVKgKu0~vG2E6Q13q7TFI?T7Ph5^D{LVw%&s#j~IXopW{V6yDgi`&e z;{s{SZ5UJi)Ki0*TZ3851IjDQNmZw-3H zkjv-rA}0#GUkQe4{p(2?98{|978+uy5nh@aUf$|mu^Mg|>YC#gf;8t%u@X?q5nkA8 z`>*NSQ0mrD`nTjXoCeC@CDk*JGQ2-EQU~)dMqaS&smlar)I4X@A{2zKLDXt$)Ou)C z>ne?NtKXm5fW6nK#nJHb*YK0n=yS}dPN*m%H>m7ZG=0Rthf?p2RKyL9nCH@{ElyHR z&gfe6zdmkIAW{*{Q2GQKNFe(qzC{Bq~zu8bz{OSq#Wpm|zjXMu$0EB! zGyaY%?UO36-y#joG9F_rTdgeh9XkK<3=6hBcds;asWmc+EADwLgMK}q+9PZC43P|` z04Xe=%_Ap3vf#Na?5AY`*?LA$SO(2{bRSjWsZ`;+W**LYp1ftD*jNt9dlDaY0hdRS zMtK3&SU%Ty4&!)%7iJa~QnsdLk>GeP!FejDR>3$`(nVSf>Ub*rTw#!V(ramylUADh zdmiXrs0gi1(Dc&q@eEVodp6*r=pV9j_trVb;b4r9#Qx!^i?^%{0{T6$FH zdBuQMEqXbk&RbRXc)`79<=J{Qaz*vMbltzr5$G8iCWJL89d!@XX~!Nl_Iqhx<+&g4 z;1nO}w9FOA{#C8q)mt!00#a%2)JVucEfg%AqSN&%JefM&i#kl4Mn0ZKqK|4}?YhhM zI^qoUkM%}xOC+j{+K}1CRq3V#ttudPS^s+Et`<_xdYE@p}Z3FMEffcoc6WQ0}txq0Mb{h=>8Fii+Ew&x)B_GY@u#MjB z)u>GE-k#|38L6Y(4Q3r3i4|>8+GT_3)#k7%k=mIiGANxHop~Q^Z5gS<;T_{No#Qes zUY>QR7bPw-5W*P^g&TGK>Fv9~jP|CBmXM9MNtw)$-j1%0ZnKH*?vL(<@}lXB<_^!o zGnyutih3^pp4pAg7n-Ig&u$m3&N`V!LYc-zo|c-4_Wh48INWY{-tJtaa_*06IT;9y z$kws+?nj>9mx+dFnuaf&&VY_SLY`*4%N~}yLROge8|hx~%C36Yq&1oWX50bcj2@`U zTExwPMw&jFi@vFej(MEkpVr-Co6Qp)O+e4i(~o{`+=lFqR$SbE@lGUZ+Ck`weiGg; zbzUUCj%Mh}K>_P7sLU4D^8w4wVe85ki`!wT4hTWsdU4r71FL?y%RU0Hema~kUbtqZ z%7K=Oj^T)r0I!mXjzK0M@34>T0OnrTmiDme<}g5ZESY!U@qIYGb1X>*!fJOcXL2mN z6ETx_L}hQtx?(gma=dbLyxOao;%>a9V(3x3zhh#wigq+oc3@GvKLvM!AY&|_cQRde zJQsJI#cMLJvUb#ZoHTvBmbNvLr>mlKu-;N0x|D%Y#Pp>1$XAYb0XThbE#uQ!n!eww{aMEgfkNH*lX;i5;@m;@<-L=S?26@ zB%)v}DE!wf0^S@V-yAaC+zlMErQZ~G*BtKF9KH?2ePlnv=Tv#**d_MJlIJia-Xy!u z_z?8Seq{@i&?Ga^e->tIn$vp$Rt_1BZw}+C$&wHeOAbP43Q6Q^PLgk?(rfWSXAlx@ z9>uelscR;Sc1kw0oAIkorE7_xZr7_@XHMyaZh( z;A`0_YtDOoQEX~VVrtRi_hLZDirM4@>D0V()Np^~vOeEDUDkY|?5v*6!i3jq9NilC z)}+PV7{52NfWb0q-m;zUiY4Be8bDOVIo9|IO z7;_M>c%X<^$iMiutTMLqBe(LicAK)+*Q>fjy0$drwg)oj;N>S#uh&&SH_ml8G3dt= z;Wu#b_lfm3pR!ha>UO5-5UHZ~zqj@$w^pgM*HDG#GOiG3r)I&j5%CZ<2=ulYqm~2! z+u*!=gx{+^@Uvq4`$XM1qq_U@*_&_hM-0=|Q}DBjK1Ukc`^a%S&*l5{(MPaIN8F6N zxN{32^anrf54hx!q^b`A-^X_NC%4|43VJ8!)<+JTh%WfcxN-X-AjiJhh&ud;`aVZN z*+*JH{Nqo#qtNV~=<8Ef`Ym*%Go-IgD*&=X_F2ppMCRlf%-%`n^;tv2x?uMS`S*$Q z_Ca{`3D4B2!t^Ol+!0IGQHH_SsnV zWu@Ga$Mp7b=H}(*xgOx;%j+~O`$B(uf8+b;rt7p5aJqVZq8EJ;P<^qNefG zoFmViRMX$CAq=DE++pXO23KF>1MdiXE}-_V0gR9V{E%cj*Ven&KMn8Swr}pPZ%P@-oV0!Xu*do$mgUvi+p>t|NM2iU$F-kf7& zpBql!2e+JucZ3;5+ov4)Q$4*a1%=lozz#*!-30z?)XhGl-c$6<{sZ3|M$Abi07=jG zf_UzlSm53y<~d*C{-16{!SH+;eP3GhUa|8|+w%gy_2N_W&=_+Q0`k&I@ZoHG>CN!b zL;%+O>$CsnW<=^uxaUfo;NK34*W{WL9N?`x{@p&p)2iOrUwx#`?zg;uvoJ8`%2WYq z3wTn^@ZPq4zo+ngkn>(y^L<(K4qx|Osc^<5bkkk)@wWZ(n)AWp`%(W3F$CcZM0nO9 zHV_(?zOc_OPtYHVK)6t2ZeJ`Ciw$tNI(P6N{{&#IJa3#4L!nx2yf%L%lR(1M&IKJu zE|&q|Z0{UHF&W|H1kb*tVl|t~l}e&F@owB5GF7iN9EyIT zUZ@=UiwrL=dl9=o=nu0oF6X95w;o^{SUUxKN59eF5B`gsRtZ6NkPeoiIhC_yJWDRF z9XD+8-Xu$e%*aKWsdSi=G{q7EcBye$L~aN$HJ)^5wd%6;^T*{%70@OO&Ftp*s`h24 zwa4}XU2n7H?qD>5fun!Z{b92%jeEIMX<9QUqwHsrb^O^uPCN|-`xTPI;mmGRjk<1n zlS=*F(M*Z{&bLPUOwx^n`A3!Y-^qMB#&5TXE5WYFQK)thrhw@h(5{5vJQ=(=Q=K`2 z3FZBHO2W3n&w_)rqOZ*r)Pv86pVVa^?MioI{m;_1eg1X}F+vbR)VJc;hL3k6yYIvZ zBj6vx=FqFZQ5E=5M5JS+VA^Qv%21LT@1W4N#d}I8>aSReAEc(faU`B2Xm`MB5wHz$3gE z^NE5p>v}ZV*6-A0BUIJYE{#nro2a!DUAp`A(8iY7jfT`T``m__IC0z;mpC>-F7KA@ z62McmjedxtuAQ#(ElpVDkkJ%)lz2Pu*l+|SX}+q!NA7rQqiHazH>tiFxbG#-X|wN5 z)lG^{>9}fycG;}1a0be7tVO|2xvnoieytoPa1p;w1^wc)GE6msUo#Bz|KQYEF$Z4z61Pd&VDbwqjNoKefU&1Eo-{#0LTx1;SK?GLJiWtk z_s>5BU!0|T{&hwIAG! zv~R+*@kXU(WCh#>jZv9;sIb3fdwB`Q$jcGjB-f@<0Npsez zJT!c;(~OTtNink9I>BqVfZs7xLQy`pfaGYO+z{k%ZH%ot zpZHvpuM0i7jF-;9uw#9d-(3NYoV_s~67*P?6dIrp)>)*bp2 zHMGx*%78z}VWEnj%*rffLZ@k8tS#k;ObhW%e>#AwV_vM172|XF=C5n>ZqcphLdL-M z`%*v7v0Vs5|F(3KI-=igmGBg|j=h>}k3|w~trMy`NT6e8&eyMSBd^_`9jzomaLci@ zrK{)o!uhY>c3bdO9Uzc{@nY}kr)2$DRiQE50?yV)%^`cj3da|KW5 z;T?T?S3|OMl?~kqrMBpJ$FXyb_t%9G2+wNNv1Wh{u0_|W+q@GQ3hJts1*U@5`gAdS zA!w!PO4X{xo0xhD=-5%`Pv~h|a@TmHC_Mt**MY`n=MFL4jOX#U8MGfRU3rmKo+lqG zgW1+iUwk%xz>Ue-r8;1g0`ILK1@0cKx?8Ut?OBkmac>?yOOMDsz^j92j$yy4+BeER zvX}eduGww05CpuDcBAKKOH@Nrm7Qsd)GoZ)>!gjmW9ClhaWeOHDg3q0)4uzGa5h`O zYL$H_CuY(9E)vB^D^Ae=ueV+#3I@^rw*Dut&DDzK&R%X>M%tbNVD+%nz=T*u_ zar;Bo4R+t>u{RLtDLbS0+D!3%8>R1cNC13rc-K7;ih192;eXH1;V&84B;PXA|Ja!M zy7mWp-zISFYpZvj!^?WiDSJv%D|8L`B3#{f_)aiD0-oe-U!NHCzHAM9zB*{XfCYH} zG@=Vw0Z`svd||HF2>}UZK51paW9`o81U{%jffpG@a9)0;3+|bYp2GsZBTykQTp?sy zg1z*fKd^$RjlJ^|Jr)l&&~SVK7e#Pz)#l2b$ro*3+Cnl$0(J3%#}!Q2vV6pF{mI(= zzi4}rb%e<)6JaX5?>^8*VSC4vg)oe}(u_K>6MLW<`Nl{(KWI2ny@Y5Y+aRs^2Sh|z zWCz$-dw_BY!c^A6T$v(#Tz!48P4JVfw3Yolg@T-koTC>)_@4YAR;4710$6Z;zuoww3&)ac7j3+u0?%(@GBC?tw5tcaW-`JyY z*$<>d6=Qqs45<{{>&pUf6w_4^6A={%D6f#2?04+!L)&bpA}w5tfTBs2Om`Ab)sdu5 z9Q<1#mboeR$|LSQ*cVX96st1k!y<`xKpSu=80|EwSU4iW+x+4CCCa3!=#+`8Wq@9l>AsZd z861y-0t=m$`9Kc+AeQX~Lm@qsZjqIcM$L3S6fWnLK8|l~zZ@!;xTh z8ZXY2b{Ldd;DsIhlv(P9WEShT@?DV>h_D2adqf)c$7-GYy|fF zi>9jd36KgdSWPbI$j91EEqTeGM#`VSC7>6|WQ+DIWsduT30hF$edjJlorw%9!HhZ(h*~%odHFi6zK)^ z7yONBFMnqJ8}dnJ=#wY(awzU_QsE&2)o=1pc0~Viycllk6O6~?F{x^DV6S5`k9BI(g$O^<{L+D$17|!Ala#=8b zP-u4Z`2YNqB&Enz5VYD^)GC@p+*v79c_viF$-yyMF9lq0Nfy-KXms5qx(mQRa}&yW zb5#HQlPqQKt2t`;dEzN$!YyUKEhYAU-UyW}VVNHlnF(y_lHS<`Y)} zUrslkh1^<(1V>ThQ_=WRGs;pvl9di{8VPBfhdTw4KnsNfsTg?>a>tuxPh6o#gCc$F zA{|m2mX@`}Q@8h4!S_}Tuu- z5bZclt!TmxYDcAFxsB0|-x34E)|)c~ky>q2eL@<6RJxSRoa41-QJxWeMjr{WIAbxx|C$P z;?C;oY?}jH@sdv*fkl%Uvf|Qs>v{i+y}SB~JKov^4+JN8Ah^4` zLxQ^ocZb5=-QC^Y-Q8V-d*N=uEl|xl=e6}tPj}B;&Bd%$7xgE6pZ(jG%Vfy4H7zyksv`A;nNCan*-9XBXa2Dd#hiP>)h}IZ`gq}hwFnX z8zSFSgoftGqBda!reTqS;7WEW;cY)A;dadz#cqzITIudOTiyw#jw}Ze80?>XJR~(0dR5>758jEU;D>P-lr{^)E*P{vDTC1g`~ENBrhv(gc!|*)1SB+8 z5S$O#*F8g-t39sE{qC)8MA(Bpr~{VAbz%m6SydxNT}hk8iRwj30NI*a%qUF>7;Kp- zPT2uM22hw`%hX!M_KOkoyO0W!vAn>cgTV0x`~J18Vef;s!Q*fQ=}c_aEOwMB`Jt*s zj9+(`iB8DUSipD-|1S(&L*hr1dUkUsT@y5$RWh5CLVoi*9UTkVAD}Z6ouFoE&yqnv z%Pt>KLj($_@~}su$iYCb=%Q+_@TjT6U>8wLD1)v!@w$4tMZdo57FEiKKFcvYd z<2Wwx*{?^kEGz+FsE$)PZE#j8ROF0h*BF}gAM)3npIqX;EXsO3Y$uDYmDn8H1NE6X zEQJXU3<)MNpZ8R+ez&>|wY6CEc>OxvGU^IGO`MuvZvraVoc2>(G(H|CMgsx~z%fR~ zGF5vK9L4r{lUl%PmgJu_fhL!}b zupi7n?O^-i^BrX|m5c3OBm)PaH6+sJna}YcfBORF{9exB{*kJUyLEL7t#p=x-=g(} zDPREeqHpFh^lE(`N|!cKe#Bdt$!YYOq5qHRr44;j)yzTv(cEUzGUDZhQ;YSv>h*?z znf{d}jDhA=i<)1Rf(oQ!&{DS7)-}b2Eyz^1!o&u32gEX$r?q3GIt}c{)Dz&LR%+m^(B! z$o@q$-cc#R9f6`|owzHrOpcy!RL-p5583qWpE(?q2`#st!M+PjdTPt8SDjckJE3_g zl1fbT_{#mLTjO_4IzkF(KpLg*nyscVDpYkUzOpi%wRY3JcpQ4DppcObg~i|A`*CcF zMtGsqqB@17qw>RoS?}H+*#WM&Hymlaw8X_di>-6;4D8x5SH)@($vK(*zKGy<(8l(b z{I17j{q4iP+~rA}A!v8{*1c7KPo&#brtX>H2~;3=|J&w91?Id}!gA+c7Abm4veqfk zRWFDWfuPjt_QnZyA&PKcN%#dcZ6Lq=ka{x3;ev9ofvP2gJ!9PoI#9 zE0tan!QCVOO9RPnxVZsngp7DNY#>Jvw*y0>y}`ITgVXWq;)V6(cY(Miy|OC(S#!Bs zs7@9Si|MKW=_Es%g5l0UyYuzc^hT>eB8!>smBu%gt@Q+363WZJ-1qZyoG=+S-W?Xp z>#b&-xR_zuxqC1i%J4}iqPqdyIl4bq8SRF{_Y>>NytsX)UhhV`uRuTiz~Q-w{9y7| z@LkKiA=TBKZk`qb6AVA zVl&n{+A=ZfG4QKXw>05F7-nA3JFBn{HHl^ls-OtspaxyX~_vU`aHPzGT+Yb%LOdLC(Xsb^8k8?(qeR*0s4{M>mOIi0~kHXN8gvF0xrRw-lf45Fe?^3Wv zsNBRRP}&s)g?(OQ<*Q8LU822?;M$L}>d&dsr0>NkwYctH4zVa0mK26Bos#8!X9GZb zw%^TvQ;xZ|^(c2%=x z+IEH;VH_KddP>RX`Er?Q%MZLTm4CiAv86JJ z?aS-{@ryDg<1&LS46)7NBQTut59&v(y-<9op0KYn`kVRr{rHLUt5~EC zaVFN1k_+AkSzQo?i1L1%8cX(8RDdVKB5WyV>D~^sirIp`hmAQ`^3HEpbH%Lnj>Cb^ zn^i8C8Jf#-Wkckje0Cp;0_p-J=h*PLK~5*)6N6iSf3%z@VPZH+;j@6_5<`@NF$vDX zGa+e8y|F`p{#Qvi29yRA*b>r>rw%us7jA%;J2uwe8Z#<(w1zmvz(TAqrvl3_Q%+jO zs(V2#gLn~)6sUOnB(vsYvJPmp?2_PA!qgK)O2~;N%4Dd~O!-&VbO}a*s$|zE-N^dP zAgzOqHSdzJAq)E=)1BXy<;KmQ9Z5~uwy+~0e3j_6qmwI_C2VB6Fvjx-8bvi3CH z8fwVvb>mnHIee*S>^)4<3g{^D2gw>R1?+>|BN06&Bs-$4?LEKJ96_4w_Z?uMq#h_^ zABCX(_VqA@JR&=S)io3~a%s#rvzmcqPZzm4Y0M|6B0{Dd@1H|FP6+s$bq-52Z%?q8 zM?rr|<^NM;eNHM{oag9<;JfJ7sbY$DmPsN?#k{S~TsFdG33@cwe7=%NUdr81cr=)v zg)Y{_D|8Y!so*&(*(KMXl_m&8LEos+;L>bKY19$QA&Lsv^6?-JHPrl;BR&qoeu896 z+R`CEkqBl~#=IZT^uiSXmRXk?Nt2{LQa1V|PK#xA3)-7I{ zxmEQxmaRmrO;#TuS(a^vKSobIC91A&(Pv!qo6~rt^>lAwIay}VSA z*VHU-2~p-}JEs2Lss0nwxawzN4Q8JO5}@=VWFqC%|sli?{vF(})pi3s(loI9&8 zNS8|dWx#t=H2UAg=Yg}GMF1cLjFt)Mu#d&|VR3CQ7{!@?IISUg=29OSk_m_!yK9Hj z@H!N21cBV(qTA9vxsnceUfWc%+2Q^?7$6F89SHFhVtdsZ;H7 z(4eMMqY8a7uo5kx+T9q0zf6&)WhZ1UU2WSR=cWc(-=}Nu0Eu$BM$|F?XvBU!lHHcg zW_w8Mb{ON5(?gyw(OnCpwN{Y&j;VR8NUi+iOf8QmKJ~k)eb=`$!B^4M{I+GQ+nw}T z(1RIV%mA38hnEFS;Lbua5<}dfR{qdl8%xtPvv6jq5hvs8WYcz!^oRRkM*+3V7%8^gX0tAAUq2H6|=T3E|@EK=;Wz*~1>5 zpV5mO45`t;5>!PcOd&~_cd=ifD{=&bUV zYA#7#-u2q|T$e?Rnetpc);5YTF0ZTp^w)2nOw2)%%yim3(tLd&3wLI9O+oK;Qj0I!6Ps?@FEpo`@)#8 z6IPwyu)j9rk4TN(7Wxm@eAb!ht)r3%$4H6U=lAOrJ)VVqIX)1&@Y}plk3&iMlcQ{P zbwfn83wCqo&n`xvy-dZIL!;SmsK0fqt#gg-T@kM{j5;!8-`j1#({6;^8(YfsGNiLh zRm40yZ#t^VmP6@D*M9jvQZRWgy3bzmZM@u_OIa@mcQhYvyZX(KUcnPma_e>+PVyL- zo~6QdOe^=iE|q#;)_=9nu*JTd_nB{8%zA4EGJmGuaFiQF{c-E9H^lg6NzwPUT*#g* zIJ)dheq4b2Sm#{Upt~PLf+n7K_Fi;eKONMC?9O3c9+VB?(r$VuqUKQjqfi(Z#Kcm;P>{M$?D*L>$mMK2Q~MO;h6Q>icGn`~9y>X2Rda zYu(X!2gIl%)cy zI`3wh*l)bB7fGk+Of~CtTIZ3x>W$596&>Uhi*D#S%Np(O)1ev7aQ~*L!LI8fQzC#s z&GLhSjLKPCTU<*28=^6p$lc^Q zEaTQfQW6`M9u7@OE$#nM+A@mKa?a3o+J$qn&?QOHShChW;NSh4Q)E|y48?~?qLcUN zoTrn3<*b{{$8MH-dcf8|?n7Y^Z*4qpz79@O>>?)$IWXq6j%fdgONUeH*`OPOaUA!) zf8?LTiix$azUMY_tj9p1(6>$xEY0EDbYs{NmCbNsH+$qxV}mXez0&?%T{fdDbLKNY zJSfx;AWNO2NYR+KpeEAdpII48<2M9F?xr8v<3z``?2)q&blraw+AEV5iciBRQC2li zOU6!JCif9LP2&Ls-p`(j6pHJlAyE*e?1f=D%rgim$a(DhKx~SJ7%M{424`gJ z+{5pdq55hd-*c9w#^TE6e-P;sX*a36=bYppM9}N{z@{0ftSL z%*_*&F*wlIS4ceRTSUDQi2jr$D=*(ZJI=MJF1&?ZYmwbV8rwueTWu(l8c=q4#CQY4 zL3QDX=*cs$t-%J}|^mpV2x;D?DL8Tc{>Kb|||-EEzF8TfVaD zaA6SJGq`&szggGYGQINLvuIDyd#=|oyv=_dSqQnEK|8~7%Q$}e%RoAy1DL}dhWb}O z85)cgj7|i+5sVK!A1wG^W#j*78h>_-|2GBW@K!quD?3LgdmASQ2QLSgf2$UM)`|aX zi})Yq;s4Sc{#R%CUsd6dfS{0&&tKGk?FN6Af%_+~KAXD#R@43X`+wLkg$DghQ{bS( zi5)9)XwM2)m_3n{%GRtbspOd4^5|SebHk(Xojq!DtG4N!JmK>WlznFO)oF4tt__B1Gkwr_f|I!_m7XJ zcg_b-4%V-(PjCO+A6-1x-Ml?M`~}^49O80S=L-6Qqe95EMdb<0AYiaWQPuAigkps& z@Nv}_4o4re7($-blZ_|Bi3*4S8Vbanfa_7*=};>MyuWa#G#an z$$F>hjYH;S>-9zl($X3J--bUV7(VE;P2O*Z(a4pl>2h=|S*ngClox1zyc=4`G@9hUaZuatM}`&n;rxF4Ja{}a)BA(? z@iH80#WQE9RoSO)D|E+gwftD0W(;cVyMH!T*pd^%S!%xBRS*gY4{-8gmKEf!*cSd- zT=^`m_S11CEnjHN%Tj z^$Z=!@O?wDDRTW^n@Y4PECNU(m)o(9lbnvIsdGG3c>vi0rkbMpDi>m93aA7fDh26u zG{@z51^c_jRhsK(l}Rq{B_+s~H{knSibDDZ?4*+dK*}cY5pMVwbp%B1+eRG zK4r$UuB|iZ(CW9yi8SjR?fTUHavhH~_#$3;TvE64r2fO4+7C(xW~|kb<{4Yt(}#6> zaH5Av0^bn!Ui#bY&*ftnhPH9;Z7$9&%B|?98sSoU%Dw0~yr&&ZMM*Gz@_O60pmK%KryyVFdV4?lT28TC3kEveNo=Mx@lr+ zGQH_UCGotQ8$2G8d?+uv!6d{%P|?nA=+DI*6hbN<VB8-BxYM31+GiU+o#Y31lsp!p_!cN2##LHA{dVMDP&Iy-5n7mSs5*0|+9-IuLBIyg@n;6~B=udu}*1(Kn?(a)MFlB-B zYvoRayML+V6N^XVdPJ;l(oeZte~uTL8kI_`R7_+@O=jl7#*r1n5dw}#w*7*NQLRsj zp8yH9EaX)r8X{xr0V>s|$z~X3C-$3XSn2BysHW_KZXIfbx!N~1TKA{&&u3V$ekxUY zKV>5bFf+2&A*%t?7x;P^Oe6CY3ElefDvC;Koeas1kq=cyI}x$g3T91C?A2E3*bEBg zE!5@T=BU^`HHW2!tH0|@+2vy)ZWSEYH6B{uWW2I%a6DEjO^4Yh<}U{nEK?2?PunFn z=eYd3%Z%8o1ADrWS+B5aO{BmonYL@m@^IrqIj_r{nhf_wL+Il-{ z?M49FC6saNhAVyRf-R{F=11509pFlQ+ic_RI1lzkc&G3A!A2IVDgw{bEgDrWE!>3e zAZK&o7iUaXAYs)HlpkREp$dYrl-fqY9{n=44~tb{bOA`X*g;=xNPSrOmVSn>fj0)+ z#oP!jvOb~t5Q$A11)jm}m=Mi;i@VGGLT^rGo5mxKl%E_qXeyBUGHWnmIYNTCL4{sE zqdel6!99MwRuuL-7|FQ^B>HYDJqf-L&QX0ozX*_T>l@7@cu++rvXsi~Knk0=XRr0z zR~23u{oV#vZYg_V_#{>vf=yGwnr+~;`N zY)3JTv2DB)x=qwtJ@{hVKBHp86?>lf_1LC9mQSa{wRBj7}#>`#GQ>g{j6T@d8Rc6gp=}?H6`cfr1auyiT3UN%p7FDoIT@I)B1k;qc=qLO~lz+lmAlO ztaF2#;K@n-Jd8-_k)y)KspxYd%68=qi16-QHc5JtLFc(dZ}VJK%YUOO{&%k#=o+kz zb2}W-Rz7X>G_cQq93kI*G`rV zx-0n6guMM;`2z&W)O+`*HrHdei2r6g*X3oF@V(Z=`%&C!$jKG)C)ky%eJYImN2|jQ zr5}nqJQS4|Xx+>X(aj&(km3uL$xxB6d8prCHLrVDf9)r~<9^)Y7XKq-X^2$64e+Jd!D9K4c{^jCu|R)cLnPpPWPXsU-w9|v1=g$2Qey8I41 zfrNlDXL5%PH!|07lL)VD1y7NHO-qAg+<~Cq3EwUyh@%J#Z*waygD&Mlzy*t}Pm63j zajt<4231joH*)bbQz^$DMRsC^KevQ66Ge=whof*s<^G|peU3!n44*1<7%d5CaE&m4 zahiUP?xXTijH6x*3wtby!UT^-$%h^>k9pt>uCR+-3G+F@LOFAT3jvGic=qjlLcbh~ zJsb-Ow2w`x6TniB9bt-oJ&F06?%_FR0a=b3mluaH?uHGEcQ+OR8;*cV9p8i!2F7iP ziyaHDk>Jmf(DXY#CJ0@9DGoE;pC~;(E-WE+HQr(_0Z}qBfhdu}-I_5!p<{>ijmvaL zG@frQks3DE94u+V&XWY&gzGc`BRr|CEOEmv;*BV1i7E!5pCnG53M@6VnoEY`j;AQQApzi0JWicp0jb(+IGWtaj%z`qcFAeasmbw} z?(M0IZDBrcvHh!G6}i)r#$zK-QeELvv$&Fyxh;Q6grudXZ!)C^tfjla!iTJdg{=`r zu4NpVJte{b!Q;3{d|bqyD8Y z{ZC_5XhisbO;VqxQseOIe}YH<$4Tlla6yCmQteJ4(j_Dc8=7QTa%U)?Z( zZ1!m1W^$vu%9uQE!ko5=3=?k7l*!#VeDd;+y*>xIQ8NbyG5UCg`9*|BMTW-4#rOvY z#V4euSf*#DMdxIz1SExI<(A}Sl$Tak6_+U%7FAc&HrKQ^wKaCuclLC&w+!_64I6e3 zj*on<<;|3gO-@fO&dx6^Yt5~!Z7l(JBsaEqR}VIiXZH_JF0M{1&#&)3!_-sk?epX1 z!~5UYznAC|c6t2)W+IA0&#?x=J}}!+4zM@*!x0$}xPCcr7=yH8^zo0s<~6DHd?JG3$iPhW;C&_!P%B3lNdL9?fWyTrBi2g z`sCh8LZsX3=Dvk~?^L0~reZBsE9L=axkQHzCcRx%Yri;vgO~n7eh$y@J6pkKlSrL%5Mnqr&_^JtK1^}-FVvDnHVG_ zw9WEzzbj9#Ocn5cbv|louAS!9Y*M@K?JwMB%<;Yb_&{C3^O7A>+d)%f_QQv2t8dsc ze0HW>WduQ)?*@Yzx)G>XiPnLL946AW<~$I11;nk0!XhmnYr(NOQk%FC@Crn1hs zk*nrCwC!v0eGDHc>9?GcC)22E2nLFqyr^Yt*`FTe*uGL8rycHu6{SekjF%>blE9lK z`=$IUNq>wFKGyOWNIxl_4CbcHj#v#pD%uQQPsvYt3eT>H;q2KLOTif9p7PA0CaIUZd}pT zxR{2o^RV(0#+!6b%T<4`U z{0DAJ8lu)h%Z_mWwCip;n)=076zj-64PFsq`w^|n-NMt8#ChcG|sc zTOtXo2s*7IKA$57$PKo-T7Z<-gnFBe7u@2;(9&Wi@vcRucM_i-NxbD#EXCa3ditY zEBpk`u(2Y%kVi|*Zlr>texZTDtkZ=)zwB zm&*?O?tHuD<2c$``6{T{P6tM>vBH*_|uv8|IxJ*L;i3K$cn2eAf z5|{AS+J%@1T><(DYa0PeQ8?N+!@PpA;Ji3n6M{MtQKIKTjfd!9%-sUKv9zlAB-BVb zuL7w>^BAOlP#vBvWC6jPIbt}SG1Jmc9>KzQX8M%C7(bDque)K?!W4>l=#pgc*yBUD zSvE28R#AetW8*>|Hj(K`WK=wolHws>;xmGT;15T|E%Ops-P8|greQg7k(iUp4+4o` zxF>N!G%rPBTyF+7Nm%e5%sw|zULm(Y+>5oFHz)z=q#MI{SaU!Q)O zvB5N(7mIjd4PG@z!D#>op%HLrP$DA1ws)8BAx9+QqJ6AC^D<);F;1}Yn}X-Mod_8t zDGz4JO!Rqe7IV0fXion`klbQ)$|(^5b!md)8$RW&7(frpe)5x=XFee!iSmUMPLdWN zvxNZ-4GJs^hoVDKO2pAGCMhlx0#9!bd3E@;e-F_sz_gIQ{;iZ-v_cTsX)c>erm&fX zKr>8Jxsc+aLcE(=wJ}59CB~q5kq&qzp|n&$lU!*Qy)0)iu29zD!~{=8E87~OTD|;G zwI*qzrSUSEmm~N|)>vw0JE_&mfh%lR>59MO1b^eot6+h>(1()NfX#8LwsJm?GVWVt z8hWVDYqm1Elv{7&AI2rX zR(f;I5TmhUX+Za-RXxq?v3&&J#@_yX-Gsxa<##|aY!0o~8T?r1qG*k?^)In?GPJg> zY!HLninQ8|%Ogixc!fk;B-r?JO7~NY&c`;PiO zyjves2$RKkzSw6vR1WHCT|d$&J&4rB?)PL!Vd|;i*9@+j0cY7zwJc?n*cEgS?z%wK zJ_F=NH*f}@`k3yzU0kh(5kjQ;IPf-|*AlETju5*TWEn%>EUs>e$9mb+u6+u}g3*^` zyCg@gL*g&{<5a+gv_QVJuUc#P_K0BS=nB8yDKsYBM5Ud7A*hkYzRXBFhyL1*_Audrlv!jC)GMhcyc>Dmh%q1uoR|mJ)Qb z;U{aUIqCi&X7z^_@FR3!zHa2c9M00>F67Jnu646>)u52p!FT>(!mPGkDIEH&F@6@ZbLWTx3wO8yX2fsxI984KwU2eCPuf( z<6^PoPVOUK`M_C6hQqvB|CrdAGu3FIXhQAZQ^yh_4$-SiF4pXFNy?6eJH82XgBHhB zELYd_3Z#cLnAbBzLJ<)wQi-@b;d3oB_ut()(;Ti>X9i_%n@=@%^@IUe<#p|vr>beG znc3H&y=Md9px~<5Z`bBnJbSbJFNHR^K&0AWAPoG=m>R*AO)1-c?OVQ0!uwsBuNSk} zkGqn9kB2Wv97jtrC$d%o4?pDpMh8xNa6j{hi;sA(xo)2U5xgSmzW3<6-oCAk>d#;O z_P({1Gugk!x)@aRc^uyiYx<$L2)o?#ypaiaPDuFDP6&Eb`)Y^^2@Xd50tp2J#`OQ< zdHVmc5&wUD3HW@Trr5#0B}GXnIh0$mh|f?t(Nrtt7F1$>K2JM$s<>nr9D7e1d8}(X zfPa=d_z4@&pSwP6w(s73{rzMp8SQNYodO~wqN8HN;}YV{gF{js5;KxwvNLnD@(L7E z($WjP%X0Fo%Bw5tv`RuM>uXwSTiZL^d>czU`kM#4heo=F6MIL;r>19r*H6xkEiTWj zW-cskt^l{YH`exdwhoTU_D+ruFVE*2FK({}?yuv|?p`1NzQq@({e8f7tJM?mheAiw z#@fph3i?Vq!fN(&e-X4FLh4C)eH4e752VF4Gn#SZazQV|Nam(ozowmhlbZ z%f2%HTBw2P)1B#RcU)<-bnIj4?yx=ckdw}{mT$A)+kU|8jhYs|JwBN&RqN&JaJn#Z z8STB&?U_UYzWYGiVspQNz-mhIEFt05iIkei)3m-l+W%Jej*L&(cKa4_xa|*a$d%`h z=aL38fJ8nzAPBmWQ8x(w?(sS6$F&$Ubev;G(FvqTe_r-Uif)Z`XM8-_52bJ5+>1i> z`GciKNdc!EAqcT{5UYTLMH;TQ3$tb*mC#a{sOW-yn8Y%Vm5?lPONo;r$#Qy_VbuVA z1lf0JXq1u|4hI*@a8z!V>D2=$6&EKMPIXI6#|GN3Y5zGW@Z#twjne-p|D9#CTUJ!$ zvon5J62(K4mut@>Or7mhetKF?6QF6Fr;`t$F4r~a5Ql$LXj(!!!DCCnsz@}RLXI;Q$db#-7Q4UeC{s~L`*$NxV8p)@UHHW zzwM|e>hd07c>z&-HM4`N)PB*50mvzx})>3e#rC4%hr zcn*hL_C)jK+)%K-Eyeo0nupBv_a=PF=kkT+XKz`(;~S%U%;(|Fw(qqcbEm$Z?b9Do zWPQ-rYu_MHD0ELg~*fG)!{P4X*9q4YCvU zQFP!9i96mDVVsaK`yN6R-+eF^HmiidE0gC>83`ipeOR_f`w+5oE!^;WAEOO0tO=+&pr$yvlO2nNO9?pLLPaSD(KxR$X=y^H z)(;6&iEzl&EPtk=-O5@%-B)S$z;C)9S;eNc8o7Xm>h;`2O z;yM&O2wLQFhL}P1QONcZHcnpjmqmHF%l+^|kr^3~4LEgVUT8bw8itw;nPE*=9Wv{u za+MoR3!n#gJ`rNin6u14FA!@p6MS>}4cl)3#gqpI#nYh}gOgVbLM|>Uf~8SJS`Mb5 zQ33E7O#I5Yx-b3ERuCoLr7?97kENb2m-9SRDuHOu5(hiQjM!NqosTAzn*MBgPb`%} zt5me+S*VCd3<)DOBf^iJNp+qrwKOahvK$VoTXWWUScq0zI-hH`o-M`(sC;$2q}Y?f z$%m$5FZNurG~7B<>kk9)8b6Ri&+vqz7cJGLZIu{uPO6P}EY@JcS+QwJuJLMfl)E2Z zNULsyqa8_i`>6|;Y zUwQ7ki)BZwD37(z6F55`Woz9t_qGgo#PS!MfBEibu7mTswKD72vYA8Wt>O$e+{oJb zolovoNIYZ54lDS)`1yTxeIB9`WAs7z>{fl%A5J2#^&+IxzZ>963-}5Zm?^Z6==eB7 zNMO%x9OXxVi(N)HV$Uo!b%0&EI*M7z{MiIQpuq)BAQ?+dg~;R>*}1L0H{)u^k%>l`y1tuS(k)Mm{oZZd{1 z#QC05MsQJ4v);eP^EAH9#Q0RIfV~?C%VuJGBw|0$daZ2G~@9W)VtO7NQ@VqbMIj4%g%%vPRwaRQ)5^-%v5VSPP)I(rI;m)r347G1}YdE*|2dQK`!MC zYW{1lrS7==#^6rGwPk-;k)^Ey>CznuxhAZseUJeS5XMZ0_WjL9UezxR^%j^kpq9H^}s4l$dE>wGNpSRQ5gt#*sItB>5dYAg3B zzOo7df5U@jUbvg>&`ly7+5xnj7H;R{?1<>@)LsET4vg}U`_w`VBg@Bj;eH%jgWUEo zdY=o0lm5ic@`d%aJN`-&o)6Fq+Gm%4Js9b{1BZKlebn{P9re8Bs^L4=B6Kz-!{2`_ z;@`-vF*GR52@cO0S}}{Y*b@J_I{Q^%XW07hk!|T>otpQzklwd5-rjYSr=iPY5MQ<4 z_AAPY<9%`#_*h`>v$2393fMnirqEzHV02($-@yDJeu9UR{V@4N@Rb78l_IqN3xBWo zkAbS4^1lRp6X)#z2a{D(?SHMQ*d_jRQ^io_pUW!B|JYY?3HqOC`0D2W1o5N)4aC<~ zbum&fAjQP3;&JOZv)oFKq{u~-NF5b3`oV0B`_w77?ZsQEKwGN%U z4c$+SPK-{SK2Kl2EzZv_-n=c|t^bqPKm6qN_ntTR*B3vL{o{W}_8(8TU*F%}AD;ey zYX3ii%m4Pzr;xL)ESFh4)8e zNQHCg+F1@KQ&^3FRqd?DvpK?%1pRGnfQ7POxvJA1&gUyNMuTEoEiIQDZI1s^@_{rg zkc13fT=sj;iKOy2f7|{szb4H2j1v#%tBsUBK7v9)SB2faAVTDv&+Uto*-H6YpYFHE zKiiYB^1VIpZ_jt&2@G{8q52!Y7~tI z!L<`FO5v`hDJ67rkccHlRZNMk05C~b6oNBM(N;YvPQtUHK1w4_kt|3jMKdjku+l{% zHRpuDKF;Fnp+1gug$_T?;oxX5$^|E(rpmLRho#65m0K$gRt|u}*O?4%KS@PY$~Y=E zH_RvxThC6B%%l-gFw6NIf>CCb-lm^b6ctzy7IY$lXlOqt))^;7BkUfuHJv=`mBqcl zj?=n6G|Q?Iavm4BGU|*8i^|yw_{*k6Ra|x&ywR!9Bn9V*)4%`g;wE`zN^9H_H}Z{h^CJ z^Vjb2OVfef@cDShu%qa=6+v#3M(|o~ z;+Pai%##7TMpLdl`R|rqtWBFsn0>V{x^gVnr27yTaRFaQh)fy^HOVFIAm3GNoNqp1 zRVEY|AAAKkKv>qaMQM{@k)M-EQZ~NJcebzV4bh2`Mgv2K5WGB5F@04=1!Cp{hCHD` z9tTE*$)}^H31hYlR#7`l#Od@!yBSQ0U!!<>P#Y6h@b3A(sEfuynrKpK)N)P%je{cwm z8COctNQg0gO1nfX_odZbw-0S&A&NmfLt!l{DS%w|6vr{Wh4Z$d;A?O>quE4p+Kf}d zfENJ^^Ta~*BU|Cj<_yCAVHM(|WibcMhLuEwax%kLYer`(Sre(H3Nhyj^=2w~UwCD6 zm&Hm!#B()JTLz5RPvt^`3eC*3#g-1|XoPot#%g$mR4MjKH$+Ui?-dI%faFR6#47cE z9`$^J`|2>Ab4B#YWr4YedbMD4T}lM;K9{A2RC+pb=br_G9x3&CI#uQvmP&0i&0M92 zkvhL{N0-Ggn`;h#TTn}H^ngB`E7PXw4O}ZVfIeZ3ddZ3SA<~JoiR=24&LEv7uF4}Z5zyA8{jn=e&5D!8%}ektZN)sGId8apSr7}YrX0b zbe>f?J2wt%e7bp6KYY}>LJsHH<|=`+Evelw0vmcKTHDaPt34{_!%?IJink8my5#XPa?EJRH^ zP*BK%{H7|F;-7~kLT(~btBf&wIeS@4n1NP*x34~226<*!QZR&d`%$0Gup|l;xz)aq zA^?0Uzt#Ipb#0Q8x`T>kO&hZIwN*Ak0KJ$g4atsOhqQMZOni^G02KF5rj%KThls%L zuY!z(d&EgXS0x`KDJ;T#9hOlw8gF0cgr!+|pgsz}&u#ua`qG-#FPGEkby{W7_sTx2 z9MfFY{MStL%^l|D)INp-e$B<0W9W9pc*uBqS8Laj0MLef>*ue1)HG}berF| z#r~?$JET1coin1$w54(z_O@aCW1P=}Bque^)wa`De;_(0DM*>}e}zb_LE*YW6}i%D z9mx@$GeTTi=3e~y-DB}%9k%vc8)QX@l8x)eMxiDXG;p9uSVemnE6uG9*Xc&ZG7Exn z`B{`#?ut(gdzlK9>)fdZG;{6ztF)(6S~?FeWry(o-9@2P3Nv>I`pRxmK%(&=)X1=fWWNRLc{4Qhq^VJVj&V^2R2UZL zDo7+PH9R(LpID%OO6m35a-)Q(*~PDAM7YS2*LNa?QT-!JN(2)(sqOmvD?xy0^-c(_ z*P9HrodPbwS(>~ZY6}_KD!%`@G04NaR_+ly&|AcGyKSl1viOVoBDy@2!Re%O{i0dL zw@73h_*dhGXVKa|8LoiLPG?c5&>-riewe>w)yl%$^U?`5kY6#rHG7P>Z_`aC(ud zdr^d8d9=Fz7RMo6rXV)uD14-w<t8qx18&bM@FTgE%@4R7DFaE%gPU`iRx} zy9jz9?Dz|$K~U=Z#w9qD_=Cw%x#YU~)>8(nsX6DRVjheC4*+jKkiP*}2zEc%c^W_% zO^9$?Xn<6*esB?f6|j3k=z$Q(d%M?$3;={&D1IPUhaOlM05FDDn1)*Db-*`whIn@; zh=>4|f{VzAdjB^nAQg$2Ac-J#2`^ZKHkgSxXnmZxiJsVrtD%EKC>PuJhog9bq}V7% zK!^Cp1xW~gAh>~F_k$m(hCFDC+&6Ylz=wDNfnunC!x4w_CxEk9gsXUfRagSRn03GC ziyWAR6QBajxE-YDb!lN3rf7A$2!h1Hd!KiV+*pVtIF2P~cZukTC`cISsDcVJgP3@O znmB!%mx^P;icA=c2snxcXaIB7gW9(RugHYHXcLz*h*l?!_*aAsxPudDfUqcm_}2nu zsDBX%juJ?PC;)q67=#Y!jQ=Q&(P)v>QH{BH7}E%QNZ624D3MbZB8Nzh=6H_jsEF%W zlQu~NO#iS0OTdl>_KrTOX7LD$86=7?Fjq_X0^65;s91{!>5&>qim*64I2Z%jk}nyUZZh(QUDiMf~;q>t0Md&cO4w#bD$V317NmreiGM(7F+FINv*?7EnVK$umPLq>X(@ypxC3qZmPkn#;un=(Nf>x( zk68zrJQ$oqD3~Hhn1zX)hq;{0se&!YCX5-K()o!*qzhZv`~dq-K6U{|7G zcYfnJVSV{Aqd6SWnJmm1y{W9Jq#M;-e;N zqUI+Bui2!6;g&l9De^W(xKCtr`ZH?XiB0sI-`CHs5t7R=n|-Uw1dY9R(+~lg8#ax za)+11A_eBBpliyeZOWiX}C*5Q=sl-y&;&^zfr`GAA9O|lh zk{EreV~!ev{AH`SnyBou19*9BA^`x6TB(;Bla^|0ntH6Aij!{osXN)MoT`)18me_V z0^gHOoR&+W(>0dibf?iibpUBGD3skA8|u?ktGcJKny%+cBefc=>}II3maFobrVHw> zlq#&4daU~Tto*vK$?B}iDy@Rl9R)|QJ=AmdgE*0gGq3cm^z=iHmv{wdZE-+4|I$eX zYe<`;Xzo+6tSYYSs;(mYrzBf<_Nu7yIaUmjul>5I(Em!aHw&;e z+pH8it&(F(ofHIyL;?$>NeoA{O?Mhj$1<-3KM$ZuV*^H{L;|FvGL=>XWMp*Z`mrF( zwK)i{CmXh8(yk*zwks=+zNMm-I#;)*04$rYG8?z(2%$MUw-Q>nOMtUG+p_~3HC;4A ztrKtyG_*&%IK4v}PM1kV%d|oSIfc}7n~4nMGN$y%&y? zT9m~3o#=_4DobTzdwZYBorV~kFXy>23%A26x3;^pbgQ#^tGhKzr+qtcN^k^6(6~gS zbTf3c)&@kU$sv+1KjGh=Y+19Te;kegQwWKvj1uXOo}F=%cc1_ zmZh7Y6!(XoE4vA5udC}!oZF;ZiCM6FW$s(Mx4Xami@Uq)zc@>?c}oNWOH|_uy+J@b z{UbYw6F*{bIGn?@mS$7~^T4U(z!2=Topc28Q%Zj8zzjSyVi!;%i@iaKot$;QD>{dK z$-*G&o$6VcUpSFqx}x>lx(H|jS~ zlAjx&f&ri9+bAh~#O7O-v%9QZ%)2_ful*aw0PMvBytg?bs`8>I%qP726aq4%Gymot z|FjxGdsd7zPD?{h!z;W-^TzxHP#6%dCETjpJIIDi$jud?;QzadSdn#Xh>(uxolZ%j zRcXF?Q<;jaju5zq_lLukEQCgAo|PP>Dhzr6$-bi;#7Zont6a+ad508OjR=^L=ZloJ z%*tv=1m%YmDlEqOE5`qex550s0X)W?>bnMPrzBOeV@6uTTgWDi$lZ%JMG(onN2N9_ zzF;S*7%2uIxVd83xueXPOTd@%Nr$cx4g;i(J{`|#V{LorI60{-o<`u!?fMX;p43Rwy)JpB137yhfHqlz0yEcWO@Rx5*j1U-mwAgSU6l(x(|z605S`Uo zw$-Zr)f8RUWBspU?b@-u*3nGcY;D^pjM!JI*GI^tn9SQ!Kmoq3&E(wAh0Vy?mj*Yh zzI5Hog^j~UZJ8^b)HQsHP^yJHsg+FH&y`8tqyLQ9OufjT*}2Ln&j0)bL~sBt4Bnm^ z+1IQCN5I`FjMa^}+QQ7*_?_SSP1dsA-?1$POMu&HJ>a!{+X7CVI$INB5ZZG{x&R=T z(5lVpdz5?`+D-g@l1g>-EucG$)1@8VjGfR~tP;$cfv{_korlYPd5lyX$${M=&7A_A zje24S!w{~WDv8Q8Zr?oq+Wh_FKK|cSAml{O1aEB#mDmVMzT``Oi3I-S2j13F?$&RO zWM>r8I9QX;{oXSk(K+kHH<{87+2!8(q4|*qCV=Jj=T3w>HA&ifS%~Ae(0^f=qDnHpYkb|2<44l;J0qzS8nUK z-2tJ_>6-rQ!j8AY?$DjS>7~Bvs-EA_gt_9IaL}S75uY>yMu8>UHh%#O>bR z?co0HGKA_Bo$SR<#>8&ym7ebFj_&6E?y2tV&@Sx*JnzwN?}!eA8pJG?UPkfBeXw{K{|n%dh!c-}&loiDdO@lp8|Y8`xj92ByjsUUjhTa2TL>X+E)0ApInVU z|BS!%97O;1AOA#88j}tXO9T!iSkR!9g9#NbB*M_)!5t7EPNZ0IV#J0PGj8Ol(PNX3 z8<|)HS#sn_lL=9-q{7l=N|-HU&ZJq>rc96*N{rZvgC~ifJ!@bhO4O34qDAf0&^f2T z&OaXJco>nWL>e!0rkp z&@TiJOmIO1^J~yMp5Bu%y$LC_@WRb7)KDanDy*l z2VrDT#u*{BF~$dTyz#~&HuUjF4}lbNA`#gek)RWkJaS1To1{WO#_*7GN-C$kLPsod ztnoW8yQJ~UEx{Bs!XSq<^UN~S(IzLGu6~iPVd~)Q$7#%GfPnoHMP`JQw?-d zRvo3ZRr2VI^+P8M>h!%^H%yF#&qO@ zQ&#y_hg){pSBN9V#6^s2&bVTn>($xD4oW83XKR1PwM3!cw3Wo8!CiT2rWbzsX{dos zfjdiNp8pvLpn_0h>o2zsV&|K~ws~y7iZ=UfkI@GDWVVS``t7FUb~@_0>9+gjm?L)4 z4|Ndb=|NLbttL*g(5a6fvtV0PSV2P%%icPc(-aZGf!z~d1H<<~2m&jDrlX()Pj|r!rY<_HE1zQO z!2f`$@os&KbKf9RpgyemK?!m2$^A%>zsLR0c{6+-4QVLD!5}bYI*i-`N#;W!hE9l} zb086;R>5CQP>D-KA`|sgolID5Z>dus3IVr;!O4zxAzWb#&$0#Bl>mk}tl{$fcSan( zC|h9QVH>+Oy&#G#j-4uE1czuuJk}9|PHbWy`M5_vVnKt8;vkFmW(Y(AP7JwY;THIo zyA&W!c0z!i3kl~3JWR52n~WhR$;dM{hEk4e6eTHDQ%Y2(a+Gdd6 zl(@8IFTMFqZi2Ik#mq|~_d_#eCR3eLf6WHWuKeZW7 zfOeCY0TpLKk*K05CKMA2tr|MrnMR2AFE;HI6Gh*-#(hp9qZ*CYM(=6QkA^g#E6b=r z{rS&rW|N>RH7QFC`qFQb^OFyyX*w->(}?Z_4EywGJmZ;Bpc+x6L#-!I^+^SzPQj;2 zRccR}>MLkE6?7$SX;n`eP?WkR}DH-u-X)-VkIjnH!9Vja`dT01?e-GTun<=tLjyysr74X|N2_k<`Ri&sNi82tJn(ORsst)H?{-aZfx>v#zW@nf(8{PZXH@eKV?|e&ZT-3fyzDwP&YWdq-6!&+)D`v4* z!%JWo$GE^Ve(_;#?1ltWSjQFJF@z~x1niDjt|}(-R#RMLBqzDWOaGQ}lV2R;8zb1k z1^ja z-#Nj0zO8LeEq!ZD7Z}u`rZR3B{OeG=A=sU^ z?XVXsY-A@}*r{Iisk6N5@V%OXiQzt-N|)^xx9{ck51TfE^OcK?FUo#15en%(Ozce>%t z?0Cy42i{@za0~6|MysLP(U$SP`Tg;HH+iKX2ROLJt?4MAT;L5?H>eT5aG1wj=8I*+ z8r&W6hx0h+72gZbfn4(M?%U%eCpyrLPVb{XaNe%{_R&pVUZ^)*;RVOBunnH@bWeTe z4BxuCpN;dKhaEvax6#s@p7f#v)a+@;HQL=S<6bv8>YhHkxsR>&yJNlUdzX35{a*E& zE4$`57klA_DHxs`e(c`)dEM9k__s%1@{XT;9?Cr5YZ1&(*r$Nc4b zUpVqpKl8swfA!LL1L48`dfQ{a_Sb2=@V)OJIe@^Ki$Dr| zgX)7g{ma1YchGQj6n;mz#6>4 z8;m{*WP|$aK|1KcH~2vze1oq$5D(lw4Mf5tTtW_1Ld1JQDC9X|6G0HHLN%~LEWAQ3 zv_dUBK`;D5FhoB-13mRiKo@Mm7kt0JOE(V1 z>_eRKLsbJrL4-XK?7}TPM46+)L(D=$RKz$aQMpOd}>^fZhu3bb# zNpw6+EJhSGMr3Tm39Lg2#6wYh##0o8M z#Km3g#X3;7bmY52JV#zM#AN%$WJJcMn@4-R#|g~GHq=H?~ZXC#MB*=kG z9X>Qdom;$wjJ<{wM_G(Wh>XHPw8e6y#{W0qLW{&jbW}!}>qvYINs&B8GaN~bWVe${ z$&;K$mTX3qghqqh$CwnzPn=1ce8_Q}NSzEs*y~B0^hux$N};@tKe@;$%*c(*MWuAd zcf7%-G)buZwy2y+zI#clbV+Qy$~?S7t_(r&@9H%1kHg|$*y$63M@>vw(L#c#WY$%uemZP44VY+x$-O4A0vf&+$aa$UINvOi$xnjP+EE_9RaAL{H_MPwK2s`@B#5 z6ivJY!Te;-g7nVB1kmjqQ1K*B12s_ZEKu4!P6lnz`Fv2Kj8F-c&-kp+TI5gu#K;Wo zPY#XF4*gIM^-mEM&;ZR!mefW96;BdHP!>&4+-y-8HBj@UPzbG28@*8rrAQrh&>U^g zr9{dsL`o1HQX+lH4HeQhJW|!XP9`196jjjhTu~`iQ7Vm5D{agx%~C7n(H_N7FYQt= z4O20FLf!<@8_ZBNHAomE<`)kD2iT+P)MWzR=-)JFYPU!_q-MO9*bgFrA= zWX)6%JXTayRv;zTVr|xARn}&$RuF7VW_4C;< z%W8esiw#$mRoQigS$oA-o!!^)d$+u_fDe-Pe}oTC>I4o5k9- z{Z6$d*_I_*z1>@+?OVS!(57Wt!3|tKAl$)aTB=Q4t6f~i9fHPvPoR`dwVm6Qwb?3d z)~_AKkd@eNO;)tc+Gy?Blm*Y5bz7XJTY&A;)1B43#y^le}VUf>5_U-pII_GMr7{_23V_ zQEa_~kR@RgE@2clVFET?)HPri9#}po%NU;F7e-($rC=P6;PKsI3ASJ#{$U^vVj=$F z4ld%%)L$b;;v`mL;tgTqg<+yS)*7B-DlSkOzG553;RMEAE$(73=3y`%+#w!gGA?65 zXxcMQWB)W(<1}94_`P2@Zelrp<2eRlCNADD&SNZ=VLo2qKHlSi1!O_~<3TQDLq23g z&SE|0Vn$wMFE(RHj$}z@V@mD=La1atsN_qo5Y;I(JzGWRA=x|PFgC638MrUC@=yq;shkodW2IYIk zXa9<>=!uqSi^ga;PJ)aU&Vc@CkPc~)?qY%-<3}E6a!%=lUTI=x=yir@n2u?6o@rp# z=y|^Bj?QVF-f5fe=?{KbJ{W`r7HXot;-U^}q)uw3UTUUpYNtNxk$&o^e(DC+Wt2u} zmR4!4&T4l)=Y^JOng;8z9&555Yo5mGvrcQDUTd{(YmR2?`z-=ChUy%)Wue~crKW4A zuH?NgXTDZyUk2>I?(4x`>B2T_u1;*l_GPc`YO#LovW{%Yp6pA$Xt##z%f@WY&g_kL zYr#J3&jxML9_@qnYtlaL(njsYUTxM+ZODFY%8qT>p6yNk146KE+`ety&TZbVZ2!)F z>)+n&;1=%TE^gpHZr@dHZtTwP?Cx#uE(F^y1n@?L z@E&jSCU4s&ZsSgG^&?r&huZJO?G0rzeK zAMo8xKlU3>b!AueWp8$8e|BacbVa}Q zSeJE6cXc?&c3P))Ztr$(&-Df0bzmQNaxZsdKX+tLcXVHObx(IsAoejrKcZ#R@cE5Ox z&v=c;_<*-}kNu21r+<2=Cw8f41W2HIt7im&4|=WNdam#K zQh#rx4|}m6`&wR}v^sMjvt?z=r5B;PM ze8ew((?5LFKYi6t{Kjwnji3C;xBS?becG>m+oyfc-+bNQegED!b10DcPG5cD2mawN z{_!^c)Mx$T7k<}o{@0)V+mC+fpML76dr7E#Nyz=)*M9Er{_X$%XaD^gPk!Vt|K&e_ z^iO~FSA6Ghf9J1$_>X`2hlJ~=f9tn@{I7rg-+%rG2uT755-dnCN|GT67ba}T@F7Hp z5+_ouXz?P(j2bs`?C9|$$cQ3C4(YN8QK6G4Q>tv~@+HfdFlW-NX%pqmoQ!nx+}YBR z&!9ku3MFc^DAJ@#mokOq(<#)bQm0a_YV|7CtdIDLEO?*2Xe`10L8uW$c4 z{`~s4d++c6KYQv0D4ZuP9FW2R2^KOSgSyrBAcVCoHy?!+T6m!n2<^8ahaK_AmtNI-ng5MSjMPjlL}d}BbZ@|Isc}Q77B@4L5^^xCYwXH`5$+27HOoC zb=qm=jCkr9V;T#TZ~>qT;ISp4TxMCQp@a>#ct}u!SbviaRd3xe{9}y5|ZT?6K>*+b*(Q zMJp}6o!VKgwc%--Cyx7~TCS}C3mopi1sBY&x(UC#u)+;H%5b{yIxMk7lFeJMclm0p zFTdFO`|-a92P`tl1ec77$tbJ5GRpvm3IFlLFv}cL%r!?0X%`slyy?ardkpf)DGMER zxkDS>^3h1M+=)zJTuoedwuiPU5ia|*j*5PcF|a?y*Arz zyZtuYamzh7-F4f2H{N-({qoljj}7+UeFrW$;d&c>IO2&bzBuEJJN`K2m=Her7|FR#pX0)zPjeDyZ-vRrprD%?X}zPb|ZFNA%sPC*m1ks zt%oiAg~SgJIPAj$zdZBJJCAr7ye}=aC13D<$n#7azy0yad(Zv%;U}Cu`Q@8WenWCA z@?~z#ga5wx@pmsj{ac@ZKmPfPF8@RsoZOv86)eF#_|1=i$g5w(^ryfDG7xXQI^6CA zcsm0kuz(f3pal^Kg$8o4gC3mP`V^tKDx_h82h1P_Q>enpb?$>Md}02Q&_BlM&UO?$ z;R;cBLmj#WhCck^^MoKm$E{C-vfCjNlZe9{&J2i7eB$hq&dz)snLy%bmSv@)j~N^vXXC;VkaDtpaO8Rlb-x!C$lhzL~I3Vme|7{ zSg=V?K0*kqd?hCV(KtwUG5?ZFOdYQ*smonfO$gY_Bq)O^%wfV(n3YI^2Z|ZXS=zFh zw0ve8iO0)nPIG-u(KAwqD9*W9K*W9msjBte-2h1*9tx&lRdp$I;8 zXd`{vfuVAss2nI>M3dS*iaHSrPI&55)38#GYC@zr1*to&+EGhbq7kUvgYUZVR2z`B ztTZrdSxbnxLF!YcZvQ1F6b=#0o4)O;9{qq(^Qzap{uBs66`WA_D%cK;^On(6s{EMx zLr*}pv0`zVqf8(5l(Za`vp6Rjc8wAhmtIwX~rWLKa|2SGP@;ql0}d zUSVrgqQ+LXwY{waKJd_5A~uVP^&w-S3R%Yzw+m@V!(%(E+~qRYv!8|DXiY2KP2vF% zs-0VFGm2Z=a<{wQE$nW4OG`^?)vg>2ZgCw;*2Xrsz3z2xXF;2{D@={F(|v0ev|xu% zuC{I2RpfT_iU98txWM8)@ESMxym{jDzYcz|Miq$O^b&Wh@4YaFohx4l*7v^C1t@>9 z``-c&n8X48ZvS`@%v<~IrUgVJUfEx^IrzjT zu5F2rtk?GyL9lJzUkdT>* zIJ*H(vXbL`TP8oC0T8J3o$;*aJny+xyvqSlGZYa)7mEcrBeIqgt!M{xwGoOuL|A7a zX-QLp%QXJ7m@}^%dNoLfG#+RmOkE9&|dNp z3r0}u1gmY)zJ_roGI3B(K-!yKm^8AJt?VCwVA7R7Uzag$V@*@rtejR~6{u!kQ2R3r zqu%6@*Z*c}R128gMOAgIWj*UvtGnIlX7^D2{AADA`cH&*W{WraYek=w*uGk-4b+~!s?y4@}Ek-wYd?yfb; z+eqk@XDHtCHYe5gJ=tIv^bl}>17j6=aDpSe=R4m3(0%@Mgtu?u4WIVIA0BbIdHT~9 z_ooMhkj!P4n&Th8x^CYGZh!|%(+-b7 ze4AVQW{)?XyWssBKyK^pMmwSuYJ`Aef!=2zW0A#bl5lC zsYtIq`fa~i+zWE>ypQR`fnRku7vJ0=Z$ADrpa16rs`GXLKlcS-_z55Z(%tKkPwdH_ z`ehpX?T!1rUq8hk)y2)?kz2=|+KM$w^6j7Hb>IeaV7l?&2t*%JF%29PAPTbH0IpyG zjvoT@-T5tG`fZxtG~Jm&AU8>10VH14RA9$lVEw(;{Y_r}eV_*(VG*vHy!9UmUjK** zqFxHJU=&K>=^bG9B;d65UDC}Ub2Z@F*kIHU9zR_|0Kk+?=^ziroYe)PoMm7_7$Fks zUmVUM2s+>MHDORaAplMx6z(A(QlSc_Ufz-4-pQU8a$%17opULo7Y5G*x)mLjp&3S? zC4gJ-O%~%3pC(=)5IPeKXVb+09DUzZoKBKH{9uqQ(f)zn4vZ5be zBMMsKg2kdNE+RNCS2*G#BHDm1_EOdS-dj11B1oci9Ud{(l`$%#i47q%%KxD#GT#zH zA1WRnlQB&PXd^ZX

      tiAikiNAzciPBROtXLp~%#(!e=V4KIdaX)%o=Ab=u$*bvAc z1{bOqQl{ zk|uMe-U_59^Wh9dLsAW6>)OrGrn9oh308C zr&mHJ^N8hGiX(NB<#kF87&47Ia;Grafn-jmJc_4fUgk(1mDZgn5u)c_^5uFar+c<% zdp_qM!6Iu;r-k(-hE^wi-e=TQB-4l?e@5N60jN_}W^azCRDw_BA?R=_C`KM1q+)&3^LdCn>^rg8wIF3ZDfQ-*NgQLI@{| z-lLyMK#WS6gW4#UcIl1+j}v6pVSZzM{%AuADb(cWkrE}SWkCy!D2eW-fTF1Jsi=!q z>Hfj!2%ghc-e{NRD4-VHm)Z_`RcLFPX_-DGnmSGOM9rEaX#qgNk}_$4Iw@2pBY_bp ziZLUe-sys3DL=|6jru96vf!ZF&X^u5qH1W6CJt>HDWrN*)Tz>K%H>tjDS2*>r?x1s z=Bb`WX{4~{pK2qq)+mmiD(y%o5~wPDvg(E=PNP;_tP(&JOe&?8sHNiSNZRGDQt2o* zBZF$`j1DWgwkNXAjaU7wsm|=e4xlI8tm*Wq#4@Y1e(hOZEYw6R)nq5pTHF@| zlm}?1zJ@2iHm%cchPU?W%3_|L8Z0$#Y1P)Ov7#paL@dvOt%i#2*yiWdSOR2v*xI(O zLXGT4p)9UuCf!CY!A>pJS}o>YZMi{`T>4lfRRRjAzHBaa0tY}c9bfGomroD#@d#^j+;EjHi?Z+{as)%E^%76r z4s(KD9`{C>B*`%>=P)IYa%LH77EdfDgDoz95Gg0J8xr#=cdKy*vkED5EQhlskMqnn zvl$N;7VD%fA8<8$&^0&S$>tRtEB{RPvN3TUGZTR`Iq$PLm#aC0PAyM!CjXY=`Ev2a za|~w&_G)uIH+1s7u?_ESKc8k{W=}v1G^@5VYa!rH-6|R{nf}hqilVYZr!oew5dUiK zGGF5?8)hCyGfZDHMjJ2lTtXqV!4eq33rqnYEW!?p4)t}^N7F9>Ewnu|v@xslNoR1` z=rcb*HB|fVKYPwa&ooWjjv?TIPH*)NboEx70eUb`=mFSJTTe(AkV%p>G2?SHC2Ul$ zbSzJ`=Nv*ztFu)jY7x+YC-8FURKg&%!B)FKU=Q|SOMxd8g8R@`{b{OS?a)Z8^{$Gb zH-ED$OEg^T=ua;XH1F|D@Be{Z+sz{Qffx`rX`eu83${+1K_Ikm6zxjndO`dc^--g; zQsb>7zx8EbV+^$P`B;Ka9p*YCs!-O>BGkcYoAz-hH*(j3PqX&^2+M$a9BgkBD<2I77d6Kueo16Fmqc~^RVi)W|d6SQeyEm0*IiF*>dOL!JH}F}r z1#QinkH_|Ymw7`=c0?aJo4a}4!MW)uLg?l-9=z`JT*4bvIfU=|l$*AvgZihBdZ&lF zsFS)8AhzeI*w~bGqWkJ9XSd*_xuZk6ZV#QL%Z~YpaMqgl`Q$mO2fMHjyOk4ru*)~- zu)5fExU0W+$vn`L+|-Vi9mv19<|c8@srVd$FIoP9H%VaQUjI zm?D#TQe!tt)Bk$4x1z1jJHaiv3+(}4b6F=uLb#JVzz001OF?rdyR0XevnRZnH*&OF zyTh+}t`jufXtlssyv2X|5u8AUKew{GMYAhBuR=S%$@{H8yh>xc#FNe z8<0-N7f^MByrR=#ZQJ&s-w?^$yU%-Y#HT!K1@_CkywRij6gc-7vHQ+1%$R@tY{UAV zHu}$-{6q)6(5sEVA3fI>{mTQo%pbftLA|?+yx5zCk(YecTYZwFeAYwGB2c^rbiE5y z0IJ))*AIKBZ+zI#Jj{^&%?mlapMAshe7&RzrETFf*FuH-iLbR)4jO+LBR)l zXc2x6$^RkX7jqj&KI><|%OiX3_aR^`OM&FWzU;p~^2a{&H~-x8!Se#oyGUcxLsI8oztk_am>d4@ zcfSk>|M0U-AeceMd;0R9Kl+>hsINBWFa597K%tMFq3`~(<9@<3{K)sd_wT>&1B47p znmQFUco1Pig$o%rbodZrM2QnAN{rOTg$a!rH+HPR@ncAkB0X~CQ;A?jl`9KYQR4DS zk`WzfUa)x+XH6kVc*6Ag(@M`MLWu@73KZ#4rA3R<R0a%5%=myHC%lu~l&gfV&6m}wzI&eW?>v(|~0DQvT|WiN%A^($B0 zxq0jE?Vz{n5w&B}Ha-+NOekstH+Rk#F!blsqX%9wSaf#n1}zy9qj^doOQ5%lPP~}& zX3gu(2>MJOetE*BZ@1RzTKN6r#fkUdAEmzE1RM~!-F!39tFRPIj=}%>)*7V*Qf%t*qckoQ0gEs{D)G!Zk9+Au`L6+>I34$}hM(f>Xk zS=;HQAR}~e$RdeM&PM{3TrxokZZgupC~2cG!zwqtl0z%C^vgpVy-X+)JigP&6ZJ+i z^CKfXdF;!`EGcun7^k4I#x@Hx1S1phOOnqI>N5>U2#=H!O0sg`kx2v#JWx?46%4CT zLI+iDxlY!?64Na;&2+CW?fkG3L*97tGLlS9a}Y;9H7qeRjG%xsGuT{}RX8{5F#=rs zgi2Rj1^so>NFRL4&qWh8_Shz$lvG$|spK?EXr-ObQ(8kaL`+yqjS)?5+pE)BiduX% z%_&j@H{6NBEHR{FckMOTc;Wps&|vMg_g!R@b#z%~fo)c~XQLf>+JXu0tN+?`RSGrF zIJ-R+Vv^pNRbh%MQ3MZ)E4Em%ZS(zj-umjj*WX|dZFJv#A1wjkmj8`SV1s4el!r{= z$Yf)dDkC-Gp11YZz4&q-S~OcdepgH}>Wndz#Vjd|v*52nr&MTo9Q z5>LjA_+f{)ExX)vzh2w0LK^m2>9|9t*Xg>gMiOOx8O?idy{%eMNV^5cTI<5K^aKRN z^FrJcJ2+w6A~9j~`RB?lH$e(N7J-~|iqzma;+o`6n)K22Bl&K-Pm6j$oB~fBbxH}} znr6c*^dgOdJbAox#0tswa>|7t9m7N879n?dcfk_9^tq+)6aNR;1-Cw^A`oT$ z@8M!^dbUb0t(|<^4{jXiJ0y&Lm~aFiTm`?$#Seq(ftVEDu(=5K4i6c4pZ@$u!V>NefY(Fd z^$4i48(>d>LQ!D(7Dz+q*uiTbR7k6sCqm(AFoQuPTStu02G0mhhYE{C4~6Hv=k@P| zP;_FCQn*4GUXcsPX`$cxRuwB^5h>!UAp@tgf(^i-5t~TjLf&*iA-?g4!xICY);Kg0 z#m{t8%p(-57(*4pP6%A=q9Akd#Xl-#hGZP$4~hW6I%>iZ?f--0Bq@m*4?c2Zmv9jt z_voi6ehiF<4CPpeCCCK%QE(Ho)FKu67Q{s&eVE*#{j>!~AOf+HaU{v^kSNPfMM4S| z{D=uVDMdZbt&gY_mE33nSL-_I`AQ(X#czx3R9;F4meGXX>Dw3(M;Ll znnis`VtVSspMI5_fjDAGwfZT89u#Ry^`BH}I@PDT)p}L6VdHXG)`#Fom|)dwQ2FXr zf6~#eL|dXz`|8*GsWqumWb0euDpAKCN3PT1KpJxzScUAdBa> zjpAZk+t$aj7DADYjwNU-+=qQKG0PHdZ*r9juLPe(NPzkbBt+F^!X8@CgSJni zk0JzA54c_t9kQYwy|6;ymeP{GbfqVq>;FnyInx5Qt06QEYGaGKcb53GZeQKw^PbtE zD}}ausa>^NPb4v8^EI8hz3Vu88{Ga>LZ*SO)ifL%-6^0SsnJ7PFsHh}tUgM!mo{xh z3(%J$G6a^(Lm6D=x7z^!_O`=Ka4UO4NJ{AM8Z8m(bRS!Xi?DB;ogMEqzZ>56zIWX! zwZ;*-Dm?tw4vTwj@Pg-h;3r3UP{*xl3JA%@vOM?0AMSBK;JUjlt+?qlj=eHleAbNp zU?mE1^O9(8;gJ!9orLumZNrTcByc>M#;|ra8?qxvog>e5pOJo2n5l?*yx_ z5flHXn$#wrNZbJpBYAq%q26@6qyM}GFVB0igOocRieU&_7rZYQVXOR*UFS40JADxU zqZ-IM=&2lasiDkQwhy#C6Kwa~Ie%#k6nrDuYWe70zJ;U@E$dYm{NTeG2sMBm-t!W> z6?KGh+b4e2i%%z`Gua)rk5?pbxcYVyV>E%M9QnMi``s=5f(|;u5yY-~rW3B|(<{u= z)m#1QJ8J0Lf8WQt_dfVxKl{jcJY6F)e*DBBd<%bQ5fps#@|Dm0`qO{gD1ywmW=!s4 zzdX}oj%XHv@3xQoy06&SDfSldoXih)8gH!}5Y56x*+44l<_|MwL{&f}`aUPpj<55; z?ek`A1TD`K)Mm*@5CE%B@Bfqlw891OcESKxkJAuPC~6M^TSEeaB?rSV@~p;AM8xPg zuZRRe0NqY(J}~+2j|uUw1fMX*#J~?UhO1PN1V@khf}{p1umET9*gh=Xq7$zgEum!uY^ulEe zz)%sr@YoI@3^k$-$gm8H;|v+__TW%b=neLg3KN&9-$KO$fv*WA%!ov8JFvwvC}0Ww z5TKwC>KH>j$jZ;!%?kH!>Z-tjdvGc(4_iJ6(1nVA`5NE|aWGqW8tQ_RfFux5MmnA*-Lg<(MJhhbK>uKt+ltG@M~+aHJrK86M0-j+!e1mLLt; zQT;R{=ANb3kL0*zE#a|H1F-Gnd>*!*qy{O|c&iZLG_WG>lEZz+gK?%ELu2B!M?exq zLua9jt;Q+5q1k7}SXEjpnG*y_%t_abNX&K9A_D=@_#)`(g*)B?-+>-4kOGgk?)NaSx9nOq>lAo1$nH2p%hU-o|IwRQM`b80Fr?TL1~xPar6%H-YP=->qyUkc-NNhdGIdpNv;alar*kV1!x-ue236c`RHa#e4rn^xXQk4%4vx@}{o{xjZ_flA#oYPlTG8seQ z`#j`&j0WT^WE~nu<~*JBof!A+x1k^uLX|c`Su?Yw34=z7fq5aCFfY>kFNUmT&~s8> zolZm4AYp*8?W~rx-`m<{3GW(Lj#NV4?xZi1C~8$jZ0##L6}h~XWLq(*FfhOLSV|Ht zd?CV=lNLd=aS@47qPdKd(JbcL##A`O+)NVs!;;U0P|ktHDo*As>d4U7-oy#BD4{G1 z?(3$E!^xL5M+(yi!RUr%d?=}Vuez21m#Q}3LJED;1XZR=QRpTQ*(4Llf@h5Rq>{{= z>8>(d69KHQCFGDYK>BDK|v2p4fPF66Glmc-wkrCS*&~>Z9oa}X~7r=Ty~q2 z9%|9zbLZ<@V^ExI$*Lx>Ijx1TPyIzrZ&3*C_8~rw!;FrN31tb8tSWEBX`u_Q-80Wj z_h_+=>fzC1Sv_mn945am_Rhz_7@u<8uP$}vqLu0bzv^y-Vq&4_ZqnGY1x=;Xv1AZ@ zC(^}fwK|7N?$nTSZKPIjZCE|in6YG?tn#_yG$X<`A@OuL)$qwgv=2m`45hfO5< zWD~i;BEZ2R!NC#1A+f-r;UEw(pdp|U5YZ8^DG(`maS17@`BXXO?ZxHQrM2BvLe*4l zBh(_bw7s=-LUatBJq$w(jD7U}U92&8jr@Pq6_Z^5>45&9x?;GN%g=h3*iM&(L0A81 z*O)=K{{V}T|1Dtgzn~TEEdSlY@eeNy`0wkApRQs=Wz-MO(i&>n! zu5Kx;o`3z9vDoy#8;jjrZM{1$|1gUue}~#yM@C0RcJ9X3#{MHM-uzvhn_9eC{*)G% zHxK@i7C-(YEq+E)|6TX_M_T;&pVH#}$A72v^M4fy|G)UbCz~k$U$Kc^Aq65@FsvGb z_5ZMmgw~-|!cIkFiIf;6Z=){7e^MxghsCVFTgaz#yPj?QWS5@K75Kgsln)+Wp(d3` zFa9ZAz>0CRC6)9Lo*K|gTu}e)G9a1gNKLm#YBCHiM}^k z&z31xD(GiCoGsUJ>t@M!{EJN-*yx%u6V2p8o5O_5YQ0GpN~Ab0_xt+ECi;gNp=mpQU0Bc{ux573_+YQI}7~PG)3OUghCqK2=`(zW#3M7#} z51$DSCBqgvjVzvQILvaU?#Fz)9o=_ZVhr01L`26**I?SA!X-2P9Yk!5%X2F1L8V7M zfTo~#2pLH9DFu@|aiS#$X1)gxSaA26U@5z5dypbzps^)qaN`PV!cC2=-d=xNOQ=cNES}+78IiOr#TrPcqw6wnhnKfEM&uo%gp*+NCnamcvAE zYcF8ro>~$iCV%^!Mo8{|o>Kbj7~tU#P!LWyk-_&HL6hf&Xyf}p!91&zS)Lx(C1J+~ z;i(yXqqh}_Ov_OZPu0foiI*O z^3r|T@Cj6Xz2)~8>3N5}Bidsvg2LfBa)1$;d-i(n-D}fBHODQ?+r9khNY!w&^*AI@ z;rS#xmAGv(vb4shz?K)-eh{z7+R`y_xb_XQkQ-~sPCXxB7%19L^-nX}GCYDOB!Bi?rwG!ghRUPhBegW%|c3)zymdcx3d7d6-JCK#VJTutpIlfSAs31 zK5Ryt3_tx@j7ugi606C`Y8;)KB*a3{32dXOp>0S&qw-e}Lm?@Q^yo^ubFht>Apy>* z1T3_9i24R11Dg^!lllqc9KKwV21YJ{8L2JjIt9tQlng4=ZIUFz0hwmGj0SZ>d~Ikk zLovh%5B*Sh(H_7Ix(HWRYY(M63e48I}vL`l2|k7!A?yEEI&- zHu@8C$Zu605E@K?O3pk_ScWV)Hi-=GoOKvQD@Nrr6*+ZVaOy_MC~PMC6`d;8nhc9y z9y|RT7Fm(OTxs3Z_gs`-6aGkHNZ-hp94ik=c7TbMsAnX;l)SJN73mn149~*P@H$B0 zck-f087_RD#j<@fdU4Cr1x}Ou3OsW&lyz%S%CN&+wNpxiI5()@et<8QRDIoC(&?`k z`7&(JLj9=2bsu6s1$fNAD0+`BgStY&AU_{2lw#-r%q3k&D)oIV%G!dhZ$$A)q5dhC$k> zJ}B#Y2W*4N4z{d+6Z=JKAK@6LD6ttPrYYnSI!s3Q8(ed=SvWNx zTebLeKQ3~!tp!^c`15kdVe)voEx>?Bv4w(&_$=NT5YnfxJ7dJ;2+m@3qzOU##{l@l zEYZmf;W`hjyre&#Rd!pvr>#@n-~oz97Xs1AgTDLdA-<6i6aUQzeo2AVA1Y6aC?ajJ znK}qo;a5B~Zf`kXOw)8 zOKT2V;kt-M;YN0PX)hU=IM0;>AH$1;r2*L-Chj1qjFLZ315*5ID`gLWR(m|;3wo^Z zM>l~UT&M7+j_*>|1#rc+cQUatfcsT#!5x^5accEe$}%1n!vw8@9+#Q|>94`sI?2P; zU**e)Ffvo6dcrSRq{uPuuJMJS!>H;b%bBhwTp$7a&|t_K{7}WevjL7rJ^|TNVdbV3 z9coTj1)IdqKXAJDaAQsOm>sMWc)Jg%WBF{0uJ0;!HIMFzb4oN{9Ct6QTD2PVk zxuseZs>coh4HUp1ZvN9Z4Q6Caq5B8qAOs@nDKB+qt(HV@KovK`YJK;23|OtYDo1CF zcp^V{h~5=0QvXe`JdcCgE$Dz)@6%;no4#-OG@h3Cpn3BKfWTi!V8qe8B3V$itjN)3b94;tWmxoa zAQ)_rt`>=bm$;0SE8yBfxi#pwra3riC{K_HJF6eYsB3YmZCF?^E3LWls8ix%a6}jw zG-`PMz5Doi2cO2vzVHi{Loo@vK zMTtE4DL_`rv(OS8qBNA8+K*Afj;}Pr6E;wdC#-=dP)qAqi&kK2Nnp0I?#oDMuu`wOI z8Nh>9qM8zh>P({QHDGv2`_>~d*&R$27b~VL6t_2t`3aEwZ2t8}vb1-i;Z8^fHxzFg zWcY0|M_%ApZ3ug72vKPWlwPZ8+F-ZGBuHpWcp)g1xFExs6f#r;y||#Z$4`*)7cpK! z8*F;3R|3^fsLX-{hVn3`v9K(-#7YQIK( zMbA7v2ydVZv|LV$g-eL1OGi7%q?S%6w+{HVjNf@eheyp)V$6_UPBzw@KC_zcEbbgF zo*6fvQT`%Q>7KbUCbjvJjRu2o52EImgieZCjX(aK*$J1`znXJV9{6mTm4=6VdLv5) zF4INM87~a`b;x>&T;_CEbM7>qgFTU!I}iMu_mXz@>S`WSQ#R3Q-VR+p!nb_1@wAij zoYUVqglqZ0uj$Dz`D8u`x9QyZ$|?$dM50O>4rFo^EHv(Okj#sUkbBJd?6`wr1);ri zvy@m)K?MbS*u6FvP%@2U$MS#Z3l+;4;*76fxb2NSwQ-3YE9xG1wNyw@wr+h8G!^3e> zp*KLobDJX(GsYS(0M`K{6AR953?Z$}Q2FWX@~*6LT~rchRPp>X&ksK_z|9#62NM#t zOfCa5Rtw^CSqlNx*Q+%Z9JN~LCB_6hKKd+s*@uJS(Ni!CaBF3Rj2A{BRjl!?{K%(9 zKciSTvOK%J9Qay8?VV12hRNyg;pT?oe$vKqGOszt@YkwWk;$j;Xt);5 zoCWx!d+h0= z(wLjV;ag%SC#APbFykqP!USfK4*0>K1Kd(VGl4r_uE4$IxK8fTM)Ig zA+P-r09r1UDa%^1>?g@Au$Dn5a;@J5la~*Wg2p4Pk$rffo_lny@?!u2iys#>!QqQeFgq@}oC6R>&TETW?pZOlk3U=_yl4rB%*uGR(cdzg4LU>18o;j(DoKu6f& zwF`{;&C^7RmSWIIRfSqZaC!DgJ591ijmehT(tMu(wK5qUu{5pGg?>g-oyMgWhw@6z$UcwR_|K4*&md;cAQR2H5Y1xiFYi^( zdcD_qbS?Y%I~QxD(!RMw65{FPCAzF?1uv%jgqoYe6)x8J>73R-ebLQt6qKYt#3Z%o zc{0zw9BkD!B+E6H8If3v3$VAg4b^v)U>u%!UVK7?%HXex&K_ps*WK3Wx#acJ>V;Ag z0;BQ${8vN5)qdL%kcvNtxx1DGJ2#v*XC{f3XBcPa_?PGP2Pe~KSF$(Px;EwYmeWBQ zfukOP;4c8D-am4uy@~g0R6ip#{mkK3=8So)PGJGCz0pSzezUJ`zvZgnd!v%d)&=@j zFA-wqar+uKeFbKXfAX&LlMcIK<82m4WJXMYA8)OQPh}7;Ksrqn%T{qQP7iG?3Q)J< zIGG%$nvwAWSTx$9Q2S0UCv^Gyy1wq)Mb9|CZ_H-zFLdo=_=}caJLjSvh%g1auTW>?hAu>GjFj=}?XVUAZF9vq& zq1H~{3k-M?&kW{Lui$Mw$&yH9zuPJY## z)O?)PeVjxyoi`Cf&vmIwJ7c!zz)OO;NEw{=AYaG?EcXZeDRVg6_TP`gJIl*Cv-Lk4 z{kWJCxU2}+KT6#nui0NEK5y(^+cY?D4G>K*U`#W(NO1rXzKN7}RN2A7;4 znYYB3BRLn($d?Ze`!_Y0A5)i~%wmhc^%m2$Au7Sg99^jrtfaAM?DchQ9fWvZ-J%I} z><(;j-7J3XG9k$YQLIZw&BbHD%uV;zOU)HU;4PiwEoJOU^~V($$z3E!;hMwonzLu$ zD;kre6tgZ4lM53T)rl%5$i>qMnr#Ob^K%lKh1X?u%=_C_c|kz!VBcO z2=&m^34z7N-J?0eSk{5Z7~R*^fd|)tD_+A|0uUqusnSVrv;u)TfiGo!z$*tbva82D zl2h?R!_G`W2^}gYU z>($9c5@u;05u%fB0Li`R%=3UExHt)fXzV==&P^1m<{%0xiJ8zEm?-qm@32_IENykh zBH<`hB5pjaUJ&iklwIO0B(FZBmw@nl~s%zn=uO44bW{lg|6$!C3a2Zr`H z9#3aVhaf*_FPtbB2_;kOk1tryXKTC26jv0VsaI(aSRJk{o@vw>4#iOEa$RUQnXm`Q zEw)_JX*q0S!{bTy3rl_huMPr}9VX&sBUEm4m4Hqa(gYvNt9#DF((mUAab$3_CS8Ci2J6?a8g}{EzPYOZ8iJiA4CAr4c{DLf)=7;{$6xR>8{#{WNk^TO< z30xGjUJy*0<7RN}n&P|#%pQJ999LJ(Ndn(iZiWY5*_q`lEc0930Lk}@>n^fjhJ;b1 zc(>Rgv`n!ZY1;HAdU5(cYnL*3jaAk>84gW1vdlm4Zb-$(Iqu}x$5>QGIg^WMrMdQ# z92LIuyWLLF-b}boS5+k4asx~k&?i_BIPaCjrYk_M$`SU)*CD-K^`A7qe2PhgPaO@0HDix~_}vno9i54Z}j;v1&9` zCHXjeRsR5FwJjpPyU$q`CcEocmlvmKn)Hog>pFBic<2gE znOML1$smUN@!23)6nk|iUKTmcED3>2TQ3%bEJ%`h}Z9m1=p*_~3-J$a`!26HLi-)&OZzGd}Q-3oPUsRSm5G{pnM<|r7W=Mj- zC5HTX4V{Nja?pNi^-=GnQxwPFt>_AfzFYG5QFpLcH+R*d%2aUUdexeH!{w17r*&i! zrQrZttn7!es}{q{0D2FqZ~)}aFPxlwkr@H0*QrX-+pCuJa)2+e!|}zjQy)kBZP}I^ z*|2BkZpvMA*$O1ETK(P2bFrsC6*~Z$sM zs8o5KYIl87MV0B7o3;^wZuFEOLNi8dYhK-OrARfz%tH86X`=x2BuAZ}1cxc(>iuZx zf6Och2U6uUCFX4!ijL^2zy8q$!Ly~VA6RhbKL1H3oD1c{GocyP?$cq$(R%@K!{xrf=MF{9=comFK*`)%G@!9>JOWVi@| zpAmlgmjy=-Fr$=+`)tbkl|6Tv(ppfyeLApWI+kv+L`eTk-YG}5fL-2HjEH_7DgJZq zW?m}cKR%xuZd@vIXw?|BHedM7u8f@DT2=B)Eottem?7Iny)tq>!Xmju_mE!fR(v); zoU`17$X4l(j#>jgXSJ<4z1k+edfQr5g==x8`lZey&kkAbXLi!?J_rnQoCP@hqJsmfZp#JAVdBI|GK=ufb=4X)W%KviR{Y^!%b?%C{T4m8sI711}m zQ1>gk+O|@+Yj^3fCA87bY5z?B+CsB)fYHG_7Gd+CgbQUF$<8ppL+`l86FH)o+4Ry^ z|LtfwB4P8=E_cnaC8xGyo9fyNNpCBK8aEY|%h87@$^cgKx$i8j*6;gzivSD=c&ujs`i&HpFYF3)*l|AQ>@^LDf2%1gef*zdbFPf zM=9QzZGd%R;e;8Fpmui=qkVS1-Z74$*7)5eRYYy)p`fMqjP6HaI>MzGORe_gFAcXs zt(;_tI(`ZGYWJ1WysUruYFr<4j`{G_qVtE zr8U1-f$oJ@-$!WF{PuaUywPt<3L^Mryb>C%vC$b_!>zLY}cZIVgyp&+}SzrEm zjPKx|gYtYXc|yE%F@2p^-1c28{dh`4;XT)YabN9FxU&f(x-sPT+b2Nr9Q~tzn;6S` zNFnI?yMyn_llymRe$BA~P1e~lHUAF8_GzDC_I>&G>mZ(>>PSxxWooJarG239#_`8} z!j}KlGU(lVT2cSLgr@uIJz#f%rU&Kw4g_fxlkdp@?`vs5C$Kuu|H9JnZ`$$u_vmfU z83NyD7)ze(o^7YY(!hsF8V?cyB-qD}o`?BT!3z|{_mwL>uN6?jK%CD#@2%XgP{7VSdOz@~u=(t0us-yRCpjRO6>*?R#Aqw8CO2M~|9yB#R z42C|0bwR!rK^!|_Tt8vFDB%wTA%affc-^*p^4|8$CRkY^QbZB5iEnUOLeISYh()~= zYW^l0;$D_#YAl9~y<=4hCr4`UN4yD(8g|4hHB4`$aK%#qKu z1lfy(_k0K0`7=!j-TjZ(GcCi5UQBu-}50oyAexYNsp+Jto`q%of0^2 zLq<)K<(0$MeiDIiBLRp~!A%k&3{w7`6823Jc4k9Iu0!F7BO;U|>Pb?OkdUHf;vlK` zPryzpMolc%O_HEcB%W{#WpIQgsSi$V;8S4?wv$ff`^2Xu(z2u-`NTsx#IvfTva?3B zFUF$Zq~ahs@(9QCAbGtgrHkZb3iV`)n$qXlB51$^Vbt7JQhWIHcLJ3IfBsEyZR%J#m= z_7TeUBTn@5$qh`%G=9BGM?8*7pp_xofMC&bF+#xG5Tj4a4ETug3e$z>19fhGwR_9o=^ z`4mKjrVjKJoW98)tI5y$DbUbPo)#&bEc`halfQHuU%ybe%9^}FRJ`FCaGxtUE z(E3U+_A@ZiGmUnNPf>~p&5DRa(}-P)NX3e;e3F27MKq*YG$JK*&RKxEB9#6tIKL8{ zzcOyLGTws%yuRW?(=5T{>~@vX)`k*E*UT&89Ld8BGL;JQ!_2$f90sE@wY>_azsdmo zEVlV9UA4-WNqPEgWyVbvCM-yzcNLcES)w83Ni`+1he>v#IS%!C5V^VPB!>!*`jkk> z9F@BYZ`VAnx=MJ#{Q1P(mj@Mkb7ja$6_Ftop-*%1Vg6QafrVd9@V$u4S_>wE%UE zK>a0(u%#d@tq}1kiP4Gg@}Z&XTH*3qsMQ*(i%UO}wIahLL4I8;2AoRXLs~Hp8U$U- z-iKNqP%A!I+KKuC(Tr21&9i~_+Nu7lA^!7e*{l0{E8+T(nO)kMliFFA+7XAUKakcU ziF67kms;gk3lFsn^gnOUWjB7!;%H5Od7X;Qm0v^)lKR@__Bv^oI<-{V8A$6EhuYbU zx{VL3jhoty`YU1YLN-`yN>FP*8FhXa>n0?DS03sl46Vf>sdOE#Cls&sys!0A=?(Df z1!3t96)QH#>$Zrmk3{Q@ChLt?Z-h2)gq=Fn8}wi8hgzRu)Ssu?4A$3M z%-)c5*PHOyUy9aW;a~Yvt-oHpxjv-7IkefjxnaGy0h)%|+L_eo)Q1$M)jZ%gIFvUy z;@|9aH#p(k8bn%I(APh&HfS0$SRLB9%--C5-vUAz-VlBIQ=7Z|hON=M_v+gZ=G&J= z25It(C)tJz)rzNGhL=Nz@0;6iU0Y3uh5%$Eu&FJe`(^{9A*6!QlDZLeOsGT}p^?}H57?y(H>S@q zCYstK*xF@0+GFZAX4%>!3z#D&HYMXS-3>DVamJXSIhb%;>~qHK@uck2ckg|fGT|NG zzj`-e2JRCgn+kat;Uk-gV4I0Lgt99fkQyAYLGMXOm`ZsZoH1;Dtud4BHscY{m76+{ zKia{rF;${A;)VKP?*?u#fK3Tqsya~)^|97rI<^%nCnd)>MofZw1gN~ z7&=^<853KWFj<%)n*%3J%>~RYVvHFr4g~`&ta6StYbMGP0mqk&Mx$ZJkyBQq%~mm6C$Z4hjE~y!OxB44 zr*V&#ej3&(K+Dts>ojbu?>W{PHP)E|C!qmW*`J{upmolNbvCti{+3mN#A!a4O%c;s znu1MBgZELV?m$>Yf1?*NlE~Miw zhq@sL4K9`?F4j}5CV=*!KaZE&&<2Gd$t}XP69tYlC5bbYpfk1O4YlXL*u*CwL9Gix>+P3m7lv&YrYjeTDQ9xQTOtxy zRz(+fLl+Q-;vLQQHJzg?H}?&9?49fh}p}k1IckBjZ18qKgp9y&#DjGpZY2 zsTCsg9gCz3ndZH?;GJZI8>gY`Cz~kSbI(70&$sO+e|7&g0*aU0O_{`91!hm=_(+x8 zU0u;#L-Il0(OoOnUEA|P^XXb5)(y4CUEk1+WaL3V)y-(+!6?^FhS|eZ(1T~h&HU3| z{1=;Ob#<>o<7QLqVcX+jH|=4c>kcpBW(<0yfbn!5aW`Z3bXD|lQ+$%ueBzGv@C@|y ziuLr&eYCIj^zHHVn|=~ByfYT`3!0?A7ficbOe3pUAXis197hgg#Pobkyfdiwl~^{Kdm^x5{Vs(r2! zbgW)}DgeC>Lw~Y~z6~@l4ctCOihm0gpKBF;nge~?V*i%p`nIROR^+!%P&bU=+i&X1ZyF^` z`P#Sl*r%W5eU9dRe*1aI^KX5s-;$^QO6+@5soy7?I05q8nD*b?eh2-ydY=LL@1O+i zl6>rNzb^;|9B_YRa{G-b`mF}OAIE;Iw)!i!`6bl`T=e)~P6q(D1Fnw!uTcVLNCNkm z1MmLLCUS>8Xa+n52L8h)<_5mjf}$-0PNxIka|1qLekf#phGsr9%YC7+SWNc^*T$k@ zpV`eSE9IRbB^1tovx#x!k_nh!&nU-}=rtSuVG}3P*yJaRtnVynnKj&QFHT*Lr}IRD zkr{37|6vn9opRoIThM*O`nYFzUMOuQu7(ezJ*6)zr#m zD!Wy-|FDTZ=PJo(PmYGYA^)(6JhYm1kr*INv(A;g)zJhRUA-^!x9bxbPc9C>xd)*T zaZ0q#s^&Osx*{NI9WGxv?Up{-ME{EwF0=7=*DGN3?}MYA{se=sVcV7GLy^+M)x4(Qh_h+UOj)8alZ>L$+5i4LBGX6YE`&U<2 zxq?9)!Q7;tQ0QJe!H0Bhq(0|g({g;#WO%j%!8E*fk@2?bcEdkr)psL^BTu$5pfi5# z{G=-=+l!QAwIbG`AL99B6S=%rzoRI4ZNy+3JX6F8Kud2DvBfzZ#Q%uGB~O%RdMR>a zjOp7;QkSu&O3}3OPI91KJ(-a)Y=;C{#F*DCQ)FNu|EA7V(vif;A|XHRk9S`4rpfVE zD5c5uR-uE=3wEG8$qoI4aq?jIP7Vt=!s$#4Ekx3&W0T;$tuxbY&Mb0$iGK&}BCCe{UBH1Y8Q(64`Eb_FZ)5eCrt`DAG%GlG*i=`3f}eh)Aql19XBz%Nh)ek}cPU*xWPkxFkJ8gKduSUWIv8CVC`s%M!;KA7HE zN6CKiv5iq>`mv4E{lg|QcD#Wa{^0!KV;{!Q)N>u?IIm)wICy+x|E%hK9u^fR@aLF= zzsh2tl3m~6m}j8=WE0hO{W+JkZTTDKl?9PFBaJ*6)o^q({khhxE4w@vO@F<&EIR}e zaj*ZIO{`?}-0&NC_uLMMt>)eh`-e@WMiB7a31SDT?ZwLqd_A;g{_xsQ=MAtr%=Z2G zdctDZ{q?9Qw#M5qzq0$=d9|S3w~NvdfsTu2=JRjB--<0m zfoI)(cOJPaKdyQM5&Vc|2?F>Y$82N2-4bwv_@A{z4M*uHE%$hLS6ypA9xpra1>SCO zko@VY^ZX()JP#&8-GATju6p(lXnMhNqQJlK?BJmW|6onJQh-~>=vRvuj0=Os%!3^S zLxDxm#Jmh7hTMT!Ze;>bs0)R^6LX~$3g+M=3#0clhMz`-)v|(A%rg>;_W%qK-J*ua zvf#sh#}y$%S5~6tD}Ylj6XEsRMZ-EF!z@e_QF0T;Wa>0Q352c5!>a!!ib*yfM>`Bg ze}l*?6beyPCc!{&iJ>t%h_7EJUXVQX%L9_)V7N>YIRGVW#uSoZ|C6cX>-!l})Jv%N z2q%|R5MSk0G^h1EB)wIiFtuiS4iAQ)Y!?@cc~40zN;j^YkdOq$3q`{o3?~73WkuTr zjz8};sx3nbLjA@wK!#z>rghzr+8rv6Y?KepA(fxj&1JBSjInd1s$U4&5rY`nl94=lU1PS0(=ozIxnR-PzPP5&QpPLP zQKGX3v!1t7X6>1YV05>T>55xAo+?<0$ z9`B!1A{$`X*L-v`s;^UtQ}b2`S$+JbGQlD{Y%%YYctWmcGuiM-rO=nYlT<7H;J$oe&c0^o!*x?!_AZma@EMis@U4aZY;s@{%d4LCBnC7W}r_MDVkP zDlP?(pnG%4eR@q*a;6G}W?F;Fisdc?&SGsM9kQy?#WaC_I4<>7El~PWlMbLd28mub zntqi*nyJ)zlhlGYV`b7MsV20;R`qIpc{X7wI}j@aOQC+cPsSN05Aen0>mS(&F0QiX zu1nMDZ>yVZ4)*zkl@_gZ>$?VAZJqZQmY4WzGYziU{*0Hdg_X#KvoEj=^uwQkz* zgBrA~9Zhl&^b5Ee@!qMOkVKAN1H9jmt@0o+Yp%oC?RJs4m%t^yfwKuSBz@tNhw&IJ z2kGrsZeumJ4FQObX}o^Ixz&)ta* zPcZ*`O0ew?{VXelkYuWd-vbyMtfxaZFwrh9z{Xf!wzD$6)TbK2Azayc$fVdlmr}x! zs(yWV-(oROxrLs%%y5R|$~IM}^P)?{ebJ9AD=;15L}-4kiHHH0M&s8Bk;r0> zmLA(^2I8slU$wbZ0j}`)>I-v(CfKQu+tPIOOKaPViJ1~JUoh>8??buhber**M+3o_;4wK}|Dw<5J zL{Odq?z$Ym71u4$=8) z9J-EwpQ(X5w!vb7o=@6`H#ywPP>kxewTKrI*uI$3v*8Ve3_B1#etqnM7a-F<{#9oX z-$^~gjV(^SQ9zx~4pgqsLS?`MH4R@C3iH+Ae8vrZV@Mw{iZ?BgG7@Bvb~xXCmlM(b zJWS$0JJ3Qu-_iY29oT)R9Q1JT`g^2Fvs1=CmyPDYV7Y_4>dLuWy9pupEsHzgcs}-{ zg@)k8qJ$Taj`IE@nfvjm$$8Pp^!G>y^g6RBFus#HF@#A^8S!*Oe3&hFjYbGzvUOce z^tU<}l05TopW)8v_V2}9=qb4!Sz8&m6H5{(IqgB%S&8Ug%9b6_8l&S2BGGhXX0s;wg!lP*PNFySF zd}@aRH)j*R-TXZ{GDa*pYApZ*AAm7C*hqNxN_&HJ$%rfi>xQ)ecZvKj83}$n3MGC% zi~(*APfEBaEO(VthruV`K{$^w zppZPgkSAn+gUV2sC>tJfpR$HxF+VHjGL6-ufRCJl|64v=0%!tvGz=bo4&r_vId6|4 z82lMZk zKx>C39BF70Z|Fc~R_{$AnnETQLqU;4hUTsKO~*|9$PA{Xm&KxpaM%=Ms?ZQ=MF5xs z|I$a#pu=@U$c?`tGHxa(VlHZdHz=(q<}fXGR-~b0rnnU?VX`Lyo-P?PL6jsSgEHc=mGz1opeb(0eiV(@lz zRgojn$zpRIY9bTppL z#a#Ubs^ioi7Nz}*)Sg>K4&kL_>0MD(w-@x_IV`9u7O@hEuuGT_m9CXM{j3EXc91CGkW&&rPM=<+^j z%Y4cy!)ZJ1gT3+hJF&_u+OrmagkWHTXIh{Y5%1v1m3`5m&sLzu3o;I{sZet{!|^`L z4X3Yn$;&H1%Evwf8BY>*o=xjp7hKb_AfK0} zY~&Pgc-K_4H_$Kb#NzxIr&AJvG}@)W1i}5{8leaZaf6f(v$6Fyw`tWm6}>&RpNgtW z`O>dKR1RHIKDD(JPv=8iG1gX@kcIxiH;Z*DBrPB;r2v46qnWv{>;YmX`&5>MeCf-X z>Z7)+KRc?=k#B%5&M%mJk%Q}(lSDp^9l6cCmWv*ZvD4l)>UB69%r4ArVVH}g|3iNH zyL-R<8^a)R*+Jq6G@kg0n06phyo+f ziLq$bY6kqmeW`lI0e3vbehzrK3QZq4bkUw-t%6r%>rsu9Vz;u!m_uK45?{SVZ@J>}_eTmHI-G2gUp+dY z5>=mqGm9$#e~45&kzbu-mr&C?p0haKkpu66$G!NMR~A>N-L-#P$VS0SpB@dL;Tm4!_05gb&v41OKC|}cvtTwpPvh+KESI_Pne+3>FT%? z{@PrXvNi@-N!z|b%lRa6h?7(%w%f1F)i zlw@y6;BU$>qgft98|EP{gX$h#90`}M(tvevPgwA&jx7At+0Zx8P8n&8s%WiFcr{li z^f#*^EK9J*u%axO%lnvxi1b$d#6o?T_W)c5aGJr>Rm}djca=NnWbC_W9Edvo$eJUg zTJT@a3T&*b0xbBFH}5s9V_M+kgY}d&V90U}L`mVB44ZbB&N?qK7jbx`mMpVd=BHHk zWH@Z#SBFRh$kec<80>7Avcaf7FxJvSC@+F3?}V6^dzp@JaR@`GHzw1ZUD(OgZg|#7 zd@BcUfXno`Xz6V9xh@=qjCi)u+qBX=&KE;BOzWK@*6IuJoVg%Bu734hmOd9ak;pOBoUkYClhEBNNWOFin#%h6qt< zSvg^o4t6aQ+Fe#r zc!(Nlg=N7rSkn|Km<9z+(X$?n#2G~Bq=e9Xn&ZAEl&nKgp?i!Ze9ne6=WVraTADPmfozO{upxdoM*xrQ!KmHI zS<=N=v)RS=2~A00{kf^#x5@Qw!z{qr9Iwedz{y5chWRDcsn_2E8&S)V)oZ!=tKbA} z{Y z7ezkMm@&_uxBOz%&lZ2zymIl9YFYE(k8EGv`d9SDUiBr1h$1!{fE3!}McGyo!{L(P z&W^{P74VWT%8};L0`t*YsOw%K*_vb9HY4VbYsFrI$5EZ`Ui##&#MqXC6jc_|st3_* z*F2pz%~9W+U#S^|eO*`mHGPxiY@}=}K5jP2m#&3?F7T)g>9@lg=O{|>sK+cX;%y)C zyu(y`YwUij>Ib!V48Jwf`co`S)+rg|mA9q(yxo&}UPu zb0WRp29@8Hy+8JIZ*(2AD?fX{rLh0ted+P(NGyKqO^}k1_3LNl8l&Yh-*~IhWNcJ^ zhfyM#(B&FZ{cbz|9DiLkpwCr-$<-UcwH@xcm(xc*O#hp%Wi3^p81rS6wR0@rao`$3 zW!!T@wR2I?t8wvNo^HN2puHSvtPbL1`i(28+4DTZpCqupKLCu_$#ECCQ{t^{UX>L` zsILiWTA=qG?)n2+tz(HyGOgA<8p9g%p<^YWV`g0%JHT=54nXMIyqfQ9H2u+c?YAlF zy$0{JeGd9q1a=)e^2pRrPr`MP?;F5-aIF@9?iRc4l}C|NaZ|Z+9G>42;D4-T^rf?Y zqWShZ3UzK$Js8c4bJhEPv->>8>)r-=(KvA5^*d(2wf2;Mu2gsZ*^j1{1@2#SbPl%@ z@30)DBg`JV!)O6J*8MJ*C&>@IZ?Jv7UQV~DK7*Vb^2i%QsNN{bulL8i4F*Y~n7zWN1;~4nIU*DC!Ril?>Ne!a)ibs$7X@6eF=XLSYmOF_cKsm~xROr?wZUw)Oj|N}Af!dUd9KoOk!Gn~5~}EVw(px>ug`ZR7MvElz5WOk zMwbn&Tf@-=^tWe7RL7%~BH~N)XJjXl*?d7wu7dbNlf`mrV*%nn%4du9%)lb^I5V3~ zezz+`ccyEdj=l#BJe!QkI70UAEi3OwH_hhxd`ZwBLmRt;ffyj`R-vu&*d9>|o=+B+ z``vlUbC@)?w~3e?&o-&{>!%l8+}7|D2#;?KF%6t|!*l<#2Qq9fniIO&W2XHoH9eN& zq^y0W4Sp9Ku@4b@;}6&49I8C`57Dpw6g7tLv4epkKWlp44Kn11C=|}B2XUO?PKokxSjbT4{G{E$`|N3 zg-|om{?HCXqRvY)3-@z#t1}6svQg$S@+yepT6ZTI-6blku%FIP^BHG4%aK!bI*SX| z$M>uUIYeDpCET`dX_EhBhclPL7DIs03kX;T}Wy zDe+GV-)_{-amT7@uV2csQU+|!Z0aL0v#ffi2-5}$NPJ)BmBq-tUbAZC#sX73N`Duw(_?&{? zWV#Wz|T&7glQJ&^JIKT1M;k?oLR}ONnXf*lhx)Sr2jRxoQdW&V-=7ETxIJP$-cc1CknDFawB)weCSZkUuI*ek!#@xqkE9LpvpB z7eBZNvYyC_Ibi!mvsM#{%Vdc4U45iX=`uhF4W3G6NQB!W*j@^Bk&kiCCN3$XU>(zt zH%;!w!!cADEc`~a32rXNAO0`#L14d7VTM_HNYqv7h8T`keO%_(jApeJ5so?AnB1p= zS)mlkpAd72y^44#Vyd7Er=Qtk@V3!SiAU6p%uxTBQG)>mq|E%Q!nRZ4sR8iEY*D2o zMiS8WEAO(Gf5gYlm+F9L3kC4o?8Htlx9JLW66}Mc(*{58GNQ!6ejWV8m$jPCeAp<$ zXtkU4Cyh&)zaZraBc1SZh|T!POw5q4*BA0BN(!4~#Dw_^T+y>34Iz*paU z&1JC^Nl-OPpT8x!aU99Ul1$udLjhl7CRnMRQ07@&)-`-DNJ!mX7D`@|OcBdsx{BA=($-bJ)gLjALhs<$ z>}x5HuX2S^C!Zb#`$D_|7=`NvB|ig704dY1LsqDnUbp({*cSR9+e;JW54Xj3Y86qE zpXqwyMnxdJXk$jc{h_O5e?X zEj0uxUzvx&7DBo#{%G&)bt>iTQj~i1O&+Air*FrJv|p+k5+b(W4S;na1hyI)+vroc z1uYOJ!*X;&IG=hXLX9QITrSwy1X->}`muKSFOdA<0_lgy<#B(0qwGkOg<6P~fg9pOq>P_-&7fHyZY`0`ueBmbth1-z{ib ztiBRq378zC1=XpqnP`zMHi?H8`75yf9jc1rltTjDgQZ2vkDx@4-w=HDv~No2B)}SH z7sn&5SFflq75Kg-WiwYRpi+;@bgKV15NoQ_?RI2mOmkNtP2uAWQqbr-@m4NrL+}Yj zbT`hCKt!4^=MH@gP;Qq~4Fyq@zVB~Pg(PM(GmY~nZPxmtrnId4sC<*2l_{KB*t@zP zbfa`*%Z9Nk-s_M-7I^k}#+nEb%eW;fRG}NUHpp2397!CbDU6ooxFCsbDqY9^ZD_n+ zQOIEY+regtSu}0we>ZR z9ZchrnFbd-*8Cml0!AOHJ9j_+Inomx;9irJ%jJgsIc`s835Ogg*Z$$Zskw%7e{eBQH z6gWoR)gnBjwoX_4V&3a({Lfyb5W=>hg_YODH?6lZx0utJ!Y&|9(GS^my4~e3;QjL5^`^SFZ}JuK=H;{h2bSGiQTdzA#g0r_ zISq^igWOGcEJUl(HPZ}C67|C8=_89EDL4(3zI5&*^|6Z(>Xj|5dMv1I1}<~t&29)% zb8l;9s>Xc^fJApWHooB^H-d(U2&0eS3@g7<{r$2GJPCOqI#!$|f8mGhXVWPhhV9`E zG4y0C9Et6YN#(Z6K62PKVBW5I&xVCTe{UnUtAiFi3~p?w8YUtbsd-@kzGhRPmPTlA z71;t#RUR_mY|Xbuxgc&P z7s`Q@y@J^6!^+^#a{qEReGO1oG%R{;16D0E0t%!p3Ql{?CBDHwz1i&oB$Q@ygrAq< zzoo%Z1km`9Hl5_&aO{wNp)?dk|9q=@G(h^5Z+}x{ugr6Ugj|i@I2%?3K#H%G&WZw9 z*J3=_Zr}XFWz5I4M8P7eCHxLPa$^66hPdcL|IUUG&~bwJ5e5U2M|wf#8jD5$Zv7-i zd8kv<0#1WNRCj50j7&Z!Ju}N=F||8qclXEPYN~RXtL~d6A|kRMDZ9K|yj@ul%J*?u z60b0bWqe%2xtS(8N-sO!zqcQrx1_C9WSF&(taWR0v0AaTM2m8pp|x10<6ygbU$hCu zx+z+I9p0UPGhmL^`h*y?d5Dj~aH|JD1CO#+cME6lfC4tNI>11-d5-xr`UlhuQH(=> z{2akmE%xX+k=SkF#l`z0AqnUfRh7Z1g#o#qeu8C>>S5r_D3-q4j#QXImPX-jExxUa zuTr7+M-mYY_9ZlvB7xf+Bb)(~@FiQ>98=1SKlB~R7pvb5xcqv^lI$K1&Hes4=ddG7 zFPH<(sBl7)z{Q9{E^dby!$`na|5!vyo96iOx1Ri}i1IsQ>yJ4^7YBHVKt?7}&e1}a zN>mNHYffj>egAo`(Zbs~MegMU?k5Msk{>*WQAP!d%$EsJ1caEAv&aPXQ2%;*X67vI zP~m}$L;>~pW6`jKWAc35cl-%=E06X9vI!#6b=pfk0`&L1#b$);Oc;v}EVzW2ob%yY z4%B#7NAL>>lGFDWGVq%BZ2I@Yoc1E+4pRk=qT1H<2<2>HOc?dCJmJ-BPj`VZXg~TH zX};(HY$xI(C5f;?i9<%7V@E@kc^QHqh&c0#U)zLXGzp?}Y~v|FfTFN|E{AZUG{T;A zQa#1jDQy@+kAspz0F$J1{J)Z^9}P3#)Rl@O6G7g!V9oQAsOXFviSiHskWk+MRsYF;XkW4)-~U1OgCqOG{k~YgFVK&PQ~ZBGzhEteaIG)XPt8sB3-r^m z@znFz{nGpl+|`VHivO=cKdS_L>yQc?2TvOpPaCgXo3Lh^=ngv*EjtS>x&F7TMY>h|IhRbwh#C6`#%Hy zVoRFhGKS)#1OJbvU%Xaw%RzeQQATv||6=|AKc-)P-hZZFb^m{?-`HKr)=l}B={Nsc zxlmixoLAej^(FiL?^(Zw|HbQGN#b~iH zB8M~_gD)74Bd$RF9hpoqPph%J|8Xm zkM>wYNhFqRzCh-gQrTj;TD`^QSY!EewQke`vZPDJYMt3^6(5R!<$9Cd_E?l8uxhi- z_4;gb99X^G<*QkN{+@EP(;tjNDKp_(yFVO7AesDyh8>QlGFom;wALR_F^dKMrfy?0 zpHo)Mm$80rIA5+Y%+CBD*{`^BlAs0#p*z49S;n*F-`+?JrR)p{zwq%SC%ir$^l9lK(ez}txZ>FlhnG3h3qTej-3>&uIQ9>k(N^0HUKxDKbj5ck-!m4Edfo~n-}<&4UKKmD z7eP~&y63~NB(@zzc_q3Z%>{n4@5>8IZshkJBTOO?>$S)zUW#ROH$Yb8`(a{Snpj@a zPEZL+vP5YLQHpMznV}c;5e&9+`6(M|^hGVjK{|imPgCDE6mw#Ku_N=`EKd%K!))Kz zQ?k@_Yjg74P|{yVe~Xe@$@63W{wz&Tpy40OT4IrE z5g*=Uv6@>&13EM=Y*>Olt!z26uq^6m8a*xQhQ`L%&k26jBuXOI?2Z3Hm~MqVA+Ri_ zRYk1%y`fk}@~mv#rQ9NY%Yh1Pe*Q%-)|F*j*6Mj%->Zaa$Nf@zdgfr)A`HT~ zio!CE60-bv1nQX?$lh*l{h%(4K)(Ji8vJ+v0a&=+C3IRXEqcwW(40$Hre_bThHtC{ z;3%j__6&oNmL4}6)_QNZr5j7{m6OHE<#$tD{n+~{C$Ae-GZtN()t!8V+y#1re@;{g z-WBMriHAw$M_>qq;)SrijiiO4=7(@_2J}>SLhz+SJFD@)OmF>1-h#PBN3ci!{TsF` zm4-kMG6HcocQ2dBiT|({Jh#QhMUo0wXZ1K|n`DDyb(;Q4!|orXqE6bx$c>uP9!uaM zSk3iaiCE2xA})y$_*Y!@5&27}i}ou$O{%Q$Y3aYgMm21OUVy0*A}^a7cDQ0gI(i9X zLrnMf_V*%4VGfW#*K)xkLwN5l+PCMmQ(8lAggz0n+VC74bEba2#;J-r9VHL@yu4pW zsQdhl-`gg#5ILr81LeZu7mKm>$m9Z?i)U1agy`s6NcfQ(=6i-`MCvwMt=Is9e)kzW zbYyf$Y;BZ*D>_G9F$hCQ%vkW zh56piZ7}QT&}ALPq=c@m|8$ zC_Wb#zEA+T$Y4X4mSfWXzaR2v#ch@qHmaZ=qyw zA&FnLtz2qsypT5PkF@cxdDeeQ#khkODvhtid09?5f*%xWov+FTzaJ_-$8jVJ%Ve5V z7IPIJWKsA=7b}+M*y@Pdc~=_&k)G!AY*oF*rL0FjLhakFP8VJT}&3mJ4G4{0RiDHHih} zRGQw6Wo*7CH)|kRD>Q#s+eJ)i@lrn5z#QLb9>S=a-i)#;mRvr=kNw;8Vdc`OSyo-J z)G~;0Z9gozbxVpFR$*P`o{6o^CcoTSn>lBFow&a30BnDnq;Q?2-1>Y?=>~|<_@Jii zEdOe$yp*Qn%y!c58?Xv&*VdUB8W9uPW9>{QETfw!e{l9vTN4k~=;*IIf z&er`!)bt?n3MAKj^>z<@ZG$$-{smn|?2@}ZcjF-5#t^h>+=oB+h|<)??|K-Nm$jHv zE#>W4z)V&s_aTjyLDumtjdPGvB@IiZ<2^bX`vk$OBMBzojdjo-<-UNZxwhxu1XH%>$)`rr(fwA zVCnZiWT@BdNX2Kc^DBJ_ws6Q|RK1HdRcU`+JP@|a2KzYX&rh9cCUr{uh0`9~84Ilu z*sxnd704nmtzU&haLYE+zWq>%++EIx3M)U%)GlN6Ak|pL`UmPddWVAKRiUMq)87_C zy=4Ef+Tz~IW~Q)x@erOe^h3*1^Z0eEWr)=o*lEz`I%}zsp;AB=)kt|U?vm<~t69U` z4)u%nZ_mGFsM^j7HX_sYvMqV=FINeG?+g13)}shsQvy!DvmpRl^ea@-2>{^t@W9gf zszTma$6I0nu8ZPE9y(g>Xd8PRe)UeBa$9;VYtGn?H9MtL-G|+_4K9sYH~!+U6Kfz? zi%15bw3+n533ITm+^RJc20v_{&aP@ra12p*x%AD903dVxC`NdyRKs z9T~@pJ4ll+RKC4UFaQ)Y3V?Ss5R^NPz8{PLwxu+>$|iAQRLV6Q;q9bxu6a6l$eNg| zWPhI6#r8f1MkQ?b8j+x}Zf!e3(fW`L4Ub!3{KM_rm=i=x%IEwTq#Ew7Fi4oUM>&1r4R4}s{@p;B@Y0~Hr4e+ zRU9T1aQNh#stSH(>J2l32YupJ2klP?<1VIZAjgLx-DE4PLbVcvgXV(SzKC6e>9O{J zH``3)#p-~L46#iHfx8mWW#A!h9}r>c+05!dP7lBhfIu({WWtBIJ*K2Lg#;%6W6J?} ziGnHdc{48)LfSbrg#^BmIimSGGRT3ki9$)MfrHfq96SXYp+Ep?0?c3(gvkM9$DVSv zuHtF{e0--BRni$z-`}Qz9%f+lv0i7GOki?e0-%r|YA|F6%>im+P^qfH_?Tg1Moq` zd{0+ROJZ1#w?9b|K?Yd+`iK({3jm|yThqzNFf7Dl_m`7-T%$OjqBhx5Qo%ESgr&@n zrckiOd6v}UrCq`snuj6VDR0X>DnP=qib2ji0glw2LaPW<-5qS`2;S}+|_(xT2N z@Xg%3Iakw`F(XaPV%cia9k9~0)UxK(lCNOETT0Uk)HB*xosLYCfX!U@D?Zig$!+X_ zPIgxWKJ*j+D4vxxWHmsAd0++w#=-DkaDq%Jr!IwxG94V!Tb!U1lWwOXG zaL+GNEAt8q@Al*KiYMTGEeoXgsQXpEHHz`=yA5n?>flHOdQF5-msK;Uvf(9Zx~+%QVbeV@MhedB{dh)vbWsahC|MBmAdILveYo)1e| zwt!v+ubE%+H@{p$xJIKEBb|rbt-M`BdGwb7_FJuEo*VU<&`-`^B2)Gx*$b=m zS>ZKsZ#9VPHH@5PC7@rmY!Og$Ir(UB#ASi*u%Z$Az}m*wxO$BS#1x2M5h;J*>SWp* zGDIz!C>F}qZ;V93pR+f%Zo_2!9J3T5pM7@0g-&O@pgVDThquY)!W8G#jtC z>DSA1*jXj)=_mjs)5Ym9;G{1MrS=2<`Q(YtEiyV%}aP)3kp zNkv+~?P%w$PG;}V&%C0-O=luX4QRG3;HJKy1I)MmFtv+N>594Gv~6mCj%X+@i887! ze1Gc~pn`BHb>Pz~*)jJ3pDEy%0*HopKy&p-w&#&QM}pyJkQ|jD|BN;Ozi6kW-TulQD+?XnBXI0?C;U+*8(z-Qw6+? z_lHz;hl4KE$=TC~N^6gP5jPhH4v}YV0X;s*lb=>I4pI`x-K%<2JCrWE^XL7(zh{ub znQ2)W2x1Nya`oz$4;gcf*JTVfO!O9>^>VK}n>@0P&$E(Kwd>sR6F7D+J2=xcn4e2B z&x=4gCyEl_i1twN(7AN;9JEJl^!Kz+ic?C~32DcOV`OY(LAgefs{_ga{?2ki6 zT5=S7imB97e}{x(+;~-w;=$HTUt>D%QB*sxC91zg8~Aybio11@;iHp>o(@M|i3dHd zWo?-PwlFIg?c%}x0M+J@w9CHLZeB-`c_C#A+bLfAY_pN>zUi>N)$rrg+~Y=`<4s)i zb)XHIc6dxG!!Z1Q!QB8l2P+oZlTHdgixEe679l7ADjniJ9d{?V#H270pMKazX2aN| z3il$KzyLW+o&!g)shOk7MWSDGG|O_tIXu*^RkUg(2IS2&acMFMd!R5E#CN{g_Ar34 zd8x=vDz{k-E&!lY6Rc|%U?&j-m%0qQ19b(H3%vuit(r`skxM^Z0-omqU zvkmkI$R)>&7KzY#wv8;q0HExnk_eCIXeZYixmxKz)|j~08Kl>}OUKvGC)1ftf|nG< zq83*wCb_7f3fQ2`q#Zak6MN5AR9B(PwZpx>LE&Qg{<7X^W=$sW3gjc7GUT4A1c@*2 znGY^TO>I<0LFYtphO9xzZ78|=98b>noJ0dVOEYno4qc}kw6kB{pr5)1Q zR5zNp)pkmlhBwv9w<|B#5Ovm@5O!IycMCOkF{%NJpV zrNZUGrj~Ah1D;D`>^w7biszjo0DdHI_p&7kr@19GFFmLHg@|>1j|2Fa4hnS5d8sA> z0Ko52{+&;WxYSwY6c_=n84n+S2~)OW;x|x@B~fP1eO2&GCfHSN!^TrfS`T z=h9p9aw+;4hvw2P>vH|~Uaxjs0*$811y~VHj#@d?kn~mP?-QKjDpJ)W$v>I_tN`bp z{pm`GV7Eaqi*54N)5_l|X02;Ysypqa(idOsFTCuf5z;pO1@A5Y^qONN48rRQ;2u;pzDj7Dk#jU%jK*) zj_$k7spHUzJHn}6HP;g94e0Ceki!ax4f3qf%hhRXKPbwOE*(h4&?1dj-=Hab>5b5H zn~ZNYMX}3EnHrm9XN5kPF-^lILKGP0F{Rgkrl41rTuis=ry{}Sz(QVq(WV!ne4q5A zZlI^Gm}<^jfnQU2;Lxa7oOMEf^9@ZNAj&qw{}2AZt_ud-bq3zMG~GLv?UxMOT|Hl@ zHJ;0&obVC=Y)STO>9+sM*6UW*Bpcovt052b-@}5F^5*Fh#;BL#GcPjU`WXp~t#9Wu z5pRrb)8eAxc%e|3+bQj2w`6A3elq!8YY)-qUNf@sKDxf>AoF)Kuk&QQ#5H=30x5!f=D4cFl3 z>*|WX@g##H;Y5yBFVaLlJkeZ{mR1Xp%h4FLP_FEkvlsp+Nwr2-7GW-&xjeRBWwHpj zuj%4zVtQEREU9X(-Qji_J~Q52z1`^u+KS>_xzWhrv2;HGM&j4=H&X*aBn_eqD*Go*}$w+T&pdLFwt}lvfd~e`Hi8KUSqq}?T7SDORL5H zU^oEvdXlRJZ9X5ne}b#?&iQPKRdqOPlk@2+YcQm_tF6Or_C&GVhXec3^7-1BQdx!# zsHzyyb>&?<0?MNd&d+64#jrO*LHttc_@U1ouX>LN1CiNIr^=Cu;ChKD^NR?|yn7|0;;y}Y2V359kdUI@AM;#QKbbHPChjhYIT`$b2Ju?s`p>5iMC_)G%z zm$?*QB6j&$+;_y}4OD)1Unk;79$vMB05Xj4pni1x!nuQB$l^#v1&Qj0TLsBlV#j%E z_Dd!ydVU0FC0S1HyM?SJPe)}HO>5fLwzeNoV81f4jFPyD8E#M|ec$VYI1XHU<38Pq z!TBKB@m0!XV>9m6%@~s~D$UCae{d+)Q#)%~3!^t`+O!HKHQ0|cPb)hqJEN<#*f2u* z3H<0m5XCiTyI;oB-jN^CuhtVPGtza1RIprSe%|p%Raw!n)`WP{MQNLaSPtNG~seJg7Y{4fdC7}kOumwuXNl_vdIf0*cS zHOuR!UNa~drM5ROT6B8dDCSK5HI#i#1X7oUz~yK1hrq^N;6sELs)5t*hn|>$@Yrgd zYg~PNxrD;zakpusEPK0x4VuETP~y&dHSA#*VWTNOUWE0>fmYqP9Q-+~blJBPjpHyj zYkqwFx(K4iSRivF5%PYL9uc)OpDhJL(`+5$TsFPf)$Tz7jhc~AcN0ogq7 zMQL^JAJ&iCZ4bXZPN#!$yU)*}hU4GB50dR|AAkX^FGPjp%bX|=(1vN_}s#R3Dw%92D%gE*dW z$IWx6eMqE7x=0X&!O!|UA*SE*Q51jle{GUCl6KYj%Ox7%mb(s9S-77gt71NI9G`s-(l9T$6}LX6+`abu^dIZWMspS06$Za*nxnE1b&;s-`WgPW{U4EmLLs<V2FHxQQCw2%H(Caqu^HZ=xJ;;sQXXqy00QNh z6u8U3485;{UT^iVXocK-88ac0ceyYZ7J)*796vmXKXawe`e_Pj6m(w^?Q|B!V)nz+ z0tY?09BAbdL1A+Fh}V&P7Nt@oXL7}QHu-QBw6ZRvXc4#&8U7Ndv?wevWUgNo1ilRj zgq{BQRrs=QZGZyq##5QMRoMcA`I63bOYO@M5#c4dTuUtr-H)?{Qs|{T`J^*NC~W1( zB~dEu&TxDxx|~Fp2T=JqB!%kBf($PjW2L3@x#lW|#L%j9a9)(9`Q2Zo`Mk&Ka&9WU z^s}|TCY7ez!b`nzb!EQ1yA-WPD^6|x)nu0>=+wmuU9DaDQoE)4@k@P2-t&z4B9*rJ zLL28w5A6#P)%G&uN~?Cb_0^@NrhSBJSIcxYdT@r=e-%O=>#NWSCQIn2OcV$gtttma z%vn+7fexJIDaW6zJrG;Ra5as=mxQU+a56Ri^^$8B4o~ftf#yEzUqUvL`-VTAKRs$4@wPUG~{ZaK7+H@gl!~9v~X_KBNc+FRo zy1BD|<@xgoY1OA3dFbQGluS9lL64~&-K9KT98+q(OuJn$rc_@T3!P()M3~&i;6|B< zrT^?CDq<|Wt1xQESMSxPX-HuII7LAGHIqL@P{O@wu4J1w9H!HlH+XR-I@~sE9PLy& z8+qEO%`wn+#GHjhai-+cyUjFu8DB2O6j^ZU({4tscp%+La@HR z^mTTeX>Gd=h6o&CsiNMrblkpLC<;ES^ANWJRCOUs`FZXl^fWHCw-28rsBY z?m%F&f_i&#ZyfP{Zo-+m_PbF-efgCu|7@N}kEQJ+wy}F>mt4EKKkYR@>Dy3b?7gGZ zc6QnC>w8}&+x+ECN`J;KZz0PN-lR?MTE;%-FmRav(?0Io=7C^ye~)U{ZC-K5Az4U& zfpOMB@f+z`SJCSN1iXEQq~~Vw6#J0#m4&{~<}q&y^XepxQv<5@r6sM~7w7CyfTz9j zz4`U>Oy-IGT=T;8*kk+S6X;W{ePacDTZiMlPyWVrThb~!P zd;K>F@;uG&da#l0xKGFPI&Sa!R~+K=kv`>hsfc&G!piWuzvlyh@3}Z7xk)J7q3p?9 z=iVpcg{JDh!{$1S;JbI^dNFKW&gZqS?|vBPdrR*@Jm~p=>wWJpJ*Vs)M(Mc_=fAFJ zhEn32eQU>b;&X6lx6k9p^yI_2=WEjBz-{P(z3)A-QPA)QVk|qNfdiZl;8-aWQ=KZi9Ks_vnPs|HSqH63`Q)BM!pAR zT}aeb@IIqTHr$Kn5RVl~jWs!qlLU^llDD-+O0;)Kb~FrC8i{Lpj^a0n_XrKwaE(_} zN$EL;R5Y zQ>cK7FhvP9wYxF7jUz)PJh2-oj}ax$a4G%kLzby>*6?5!glnxBZ=}ff(GBr1i-ar9 zAuab!dYCI|j_gvA=R=V%Q-QxyL4aBb9YOwwv=SDHln}L|sPn9-mlA8H5^m)J8!kTc zq>}Wc5(k1b51lj=f-OQ`Kuz)q7Ia=VRG> zarqr*MWb-qA7NfgSv5#|ImlQw*h?++BLJAG7G9|aiYQbyhMM%Ur;LYQmN z)@roYYVpz<@zQF|+-S>OPb}2z9Mo)|)S8;q>~>zAu3YUW(VF{`{kS!!akM>*wDz2| zmZP**qBdI!wI~NSCLgpmCO4-RH)k%jw90qsTZ%|4Q?J!UNmSM4KX?PF`5 z6Xy*zFYVP2xl`(eqfBkS8m+6#t@TZf#!c;ihuXIYTh7e7JJPxj+S~WcTKitQ&)hl( z(mJt_kf&aOgM-`0i`$olIxh{|p9p#z6I;4oIuICokUV-&kGf+{+QCs7o zddUboaF3I>xZ4OU zzq0fJL%P3<^gl24KMuFyi>A-Lb_iwkeu@~7e93++2D%8kI88gSOWGtydX$fPRM7fA zwhU;l_9~PEQ=ts$Wden;be^pBv1ANE%sPf(k-OwBdSr;(p^JKBXa*!r`)uBN9HfD) zGJ6D{hCD-hq|tlO&_;i@39Y>#ij2gI)FpNF(RmD+OblhO zjB=y&d6)M29u3(<4&+T%@E-M5Xbu&w_K9SS)w2%OqYbFG3^k|LFO`i%t`5aM4@H{} zBryJy{iJ@INMh_`ZW%Gskji};nJpO^#ve(e8!IFmYE&JnP8nLu9B5q~2~C;k{x)^k z($nKP)@3nq);X56F*PbOaw$46aRE2+J~C@M{^jK#lkwH*x#oFwZ2Wj^gnsNmY8F6a z7ASM#AYvNqa!eC#8XA3Kfno*B+gQ(^%$`S~N_ViOHQe+MG8< zTg1AY6$e|kC7-nBXoOb>v`(1RCUUWg9*F2sNs8|gxoi}(}eZ|B_ zO)Q0DA)C9b#;2@=dM=u~EK8~^3v4WAFsxf2FVJnQ`issMXf76Qte3s5S9mT~L@riE ztcO|7N2jdEwl2q(tUyzr*4xlmlZZCi)Yfw>*84Oz?IJcuHa3T!R_j&PrzV%DRW|2c zS0__f>s@9WT~=3*Hk;8_yT7ltNUwJ=Y^ENqAEquIOs;2nu4cTiTV1XWifk!;ZRMA2 zKDKNxu53RaZ7;8`E|0A5Kdr%eZ@_7&G+GdFx&ROum63e zuThXrU_thTw6_GT4#d2-c*o!j(U1`?4&=5D6xp}r#SWC+4ph?)=-ao~I`*{Jw>OA) zKV$3}$Q_JS|_Fp<5i>)J!tOI_CBfF{tN46tpwIdg+!}XE_9iAQ8wK)&SfsXbr zg7lug*d7b-UP#nQB*k8o)k%!j5j*?7Nyd@2+evELiKY6QbJ|h%`d${vSq|?(UiDs( z_d!JTL0I=c+)vf#K_%uvEZbQlX%q9LS#i@qo_9|D1TAf^1!#LV%$$ zKoAhEGa*M-ri%)q7;B`x!zK^g4x&U3pLtRr%-O^%S z(yHCki(k?~&(Yg%nP0MBwVgMuTQ1(KZS#F1@2h{v%a`nzVe4Mp?H1wet8S`}nm=_wlPxp_tUYj@CUu^z~lGy-3%i(A1;(KiSWt*vG?F*R8zUqhi{l z^Go)dcCSJ5s0F?CV0!l9dG_#n5+l9VVY*5921@XGjL<$gr@S>4zmI*bccwijuRZ>g z{Zd|J%z*u(o^xNaAM3~bwOf76`;e`dn4Q;3xAT&!$6E7yyQzC}v1j}CJ17+7`ISuF z>3*3R4%{X4-lz3G;Qgc#^E$HiUI2c6$$tIE{v*5|1>Ns0KA!8_pKHV3SO3X=-v97? zZe_jic)jm=K{9qhyD8q4yrfT0&xhHd;v%27YM=Kn*{>T!{4JD57V-y<*$sZ5KLm-q z|H2HxK=2PDnF_3bd4rMgtQHp|v-`ub_`=bU=J7xNzhyuA-Y?mYbSi@b_$B+@9Z$*# zg#7p)*)Ih{+U$^Gp+uorq0-`i$$k!(XAhJsH3qc~1m=%aYYFDdb;_J~)Eg}h$KaLf z|H*!W=L~}jPqaHd{vjN=md|v11L2q;MjNdpnu9OdPqE6X^_Vm}jrIKUBJFr*##=an zW-_rvV7N@R{!8|ISQxKcpQ^HcV?5qy0YV%eaGsdW_XeTTdUGt;=hmb!+Fo%nJ1sXC zE2dISWa$y)9&B&mAf6d>X>h}Lgi_+Rk@iP>*PS=ZbwzC{o9L`DC`z8C?YP?}pljmXlwnz3NI;^@%-BOFnsMDW z{POT%=p!eau%+n$Y2CEK)f2R`^g4Cb86*NJIX!(pm!mD?u2%jZk4 zE7BF!c3`?U<5^gF75#o?d)CX^!kCQp0VN*~=T+-@m&a(w+mwfj-SFh%O&_KY*X<~F zcgO7{BdFtURu_uagAB^Zc)E)#p`Av0m_>?r~n; zk8V_5?vrQDLXZ#tyJUAa2%Nm<6Jdsab^rJCk5rC*oCWf5Mp?(z*0ZjMd-W}V)c^`Q90O0 zmaOP~#+wN-*Ubhh@I#>Qi}5qg)keE?5dFR@8RovNjq!db!iS(3;s5a?^2u`F0=adF z>5oI)2qiJ`IM%4RLS1}v2QevQ>8Kb-T|$->u>s$y2w0zeLOc`6AH~u!<+{40DlVc} zq19jN47Z?!2G0XZ$I`EYgfH1ohy=x&VnTl@K6MZc4%54I!kD2xZR*09%9cXf@HcAM z{QC}Led(mNLw&mY|3=+CH)j(4?V`V9PCT(~+fF97ZQGvMw#|ucJDJ$F?PQYsp1aI?Fa4%HI>7_bnU%{X79K0pF&Nt>h zcTo@>!N~hwC*^$&Q3!%j&;A~02>SAo6+o<x zNi0PFEEf`@mW@qpDkeWFmgLKvPr<)09Ot2uF{WPNsZ9RP@=(#4S1#lPGJz7jT4Ej= zM95#tB%&UY9P!^pi2Zvkt8o}6bEIC%Qd(l1J)lxEKZl9u%dgV=q}Jd;4;9k@mFQrB zAi+fbjqAYn#}0UPPRyve)E??m>3TKC)>yfcWY=76|5>FE^8GR$VXJg2p)o>?n(k(H zEAqvoH37rX97kVHyoNv0Wy#X$YI#hJ*`iX>MqZz@V`?%8K35itT3?E6$%xCLwK3jU zp14Lv%OHfXQ!mhFqHbyJ+4=*8^Swf(Q^m6dYV=JEU-+USxf zIc5QjY^-oY!)J|wWtGGU{R*VKY!KS~Meq~7OZOQc2<$H0&ZO2;Ykw0tQy82Ay-h*y zXLXQUT2}y82rqk z3E78a${K?iKGk7Gmuh#%ccYW8OsS38M=w_GlXN4szGra9A+ReW=d8?epIK&jz*Ynv zHRkLC+7qtt@uE`CL)eFf>0wLTjNTVZJ_z3dQ zR+7TVLrz8XD4)R63<~94*)QC4!6fcULwr*@>rI)(mehqBKUb%Pb_?;wx4Fa~wi+6p zGig2S1;yn@JY8KY)HttIzvcT1DBB&KfsVDm+u!w9)n?k#9`o%j&&}?(<9Z(*gMBSU zbumCXJI5epSOztwN>r*D=9Pq{a6k6013G&Ucjx8i9{1+j>KiWW&cw~@XZPMMJ2`Lc zMMwgU_HhFlB9mQEY>U@H68gIce=X2Bl0fe{*&$KK>;yT%eyJe7n}npzC0NK|WtKYw z*4O+aItsDwk}V6Xo6h6qYYwtbxLcW^^j&C%=NVa9S!d&beX%gk`J@_`A|9Q64ELD@ zr`tAGgswxiFjs1&-`eWs*<-ZsT&shBgX$TGE-3=IIId#sGdH@fq(|OJf!)rlu-UPD z2;AFn{Q7Brx2H0|k9iP+*Z$F$Gi(CG(b4(93W}am)!z59>d7al1I$sQUfyGtT2Ek; zz48@HZ|g>VjxEp3)}Sj#QQdF)^Pm&m8*+M%y)63IwS}JNU<}Y}#GTizqTMsP{0>Ya z;K82_c2wU}kt1Cpx1Wsq4}2b9_eBi8C*M^C^HLw{YxwV1D{tc^K-Za<&G)+xtmpbx zzW0Tjm#4g)nUEVkB&QqxL5`lh%4gznWu`Z1^`7@HAn=hb4+fkN5GXv=t@*r${j!F; zDVDhDyJL{Ejk&c|pFl8>k@s$zf7zS|X|}unruVr<@D-v#Z4!9*L;$!3fRygS!WzK! z5W;uho>(TGnC^f^;@7YdlAhs$L+ZS0W?a_8y6r+@6G0Id%uVYb1_SdYY!w~( zmQW}O;FS#F^@tu#iQo_j(e3sgboEchH&3?mH_i-*_zV!gQoteeW@2z=EA(c!(kPH~ zP?ihuDhW`Tb9IG?FuV!~zK96j43DP`*q01I6N$hQ^|0r+5Wh5#5DMyl?&0C@k*XP8 zEg}>UO`$&t5xNz^!4gwK5@XKiW0tN3AK@Sn6K7`-5f$taA7c@e;9qnTkrHPOASW#< z8lhYll5Ovi^#q^}C{r!{Mh`7y!atxOCV|5ye2yt7qROW}#->3?r0H3ra)1xZ&?5=O zeCs!aNX#UCE~Hl@{`iK!hP#TXGq7Ce^_ztjUH zLyILt5BVXL1VWe4BZNVr4+Tezglh0*ybgpyjk%bMWn1*|K@UWz7e)0*#otMJ^h|iU z7kF!OvSqdSiAyA6NhMQB33Es_JQK*lNlU8@F%|Rc=ZN2~4kPFGIH?b11CLOSN!909 zky21#0Y~yRrc6deETMZRcNl!@#!AdbJ!>VB+(!gLWa_pF2K zeq>ysCA$fxnqF!&l0wXtWZG)SCd@kuHS0ufqiovixyUVft(h=3`mzW8;Yh^pXS4eiZ&j#~`sM4!LF2r4$6!6w-kNE}(lZ9cDh)IX3GQ49ldx z?^{rR^V|xHD9+6N?aH;x$XR}tIE0o5#Fl%?VgJ5P_$^Fm=!dM9nyEH$TsLkA<9QUk zOgWrm{N+Fqc3m#!MacqU5s+9OzkC#Nt{CaJ6B$eB!w$5t&fN$(j|*O>3|=l<;5x?t z?nSsSPi-lA3@J0?HvSoZ5+7Tkgl>tCXL&|uY1zCNMSp6@U-30dnex{%S?Y|Fn>0Hx zD%6fD&&d+-Ue5fxJUx-BKrcOGA2}1h+@^xch3fRR-y$hh!*!j?cb`J;$}-QaGOse= z2cVMK_IEylRYBre!M0-IHEvN0Wzq;aeJp0ldPRv5TB_AK!L_-zS0%$Vc6z8~JpK`% zTV6@GkxdD8R*R(!dwH~*Qcll#axMYtaRsp$ zMWWP6{nutOJ58fFRjyo0tQ<|V*;y$pVa>Brc_i?>1)-vK8JXhGPi+`$@b6A(tiwu_ zJ)c7Bj>4Uez~rWmi_XCPu6w2K2E5kP)9zy$ysIiOnSet2!ZvQJV&O`NT$-HN%YHQ~ zs8d6~zgB}aHeD^3Kly1HOsiV9X^IWghvyZEL;>Kh7Y3T3ecWk%keT(F*8Pb#1GX>mmKHg z{wy?H!ij@SozE}cTP@9BIvQ2uTMiIA0Km5aMTL5+kym+SG{xD~d)R;Gunp(cR63Wb zyE<$KwJuiZlctudw?IlvB=6vV6RuXEvm?C*49t=GfUR@F*by+ z4@T%ON9Y=lRu`3MuVXEbGf8)>E`M+LktGjMAtzQQ*3j{v&K1&;Zx_y2(q8h{%FkcZ zOkYju*?C^u(YVQ+1pb7_UAje3x`V7-wF{}EgRa=mW6$N?yWrX!sSOe5z z+^w#W>Zbo7c7XC`gr+HaJhng5x~`SO{6t9pl5@xtx=;nbg%~^s9H_+P2yWmzq{i0K zq}0LiIOqx2C3@NT1YTY+*&|12y)6UH+&UO>937wqn9vUDU``!q*66peO%b)}l62{i zYR}pl7=b9t@Dz73R*ZY%q!-+GP_;}rRSZ8HQT~BepwBoKl-3DWGh+6}A;T#mL^EMg z;Kdf!q9Haw_1;n6-J*Xu5XTkcL80MC)y|UR-j~)8Z0x}sTQs!<{%B<)5~=yFDJQ03 zj$mgN$B3jY@N8doX(ZKKKSQKlA-?@!diwR%Va8J+B zS;<5@>4avzr=3{nU$OO5KZX5< zT%bwh=7g_EiC_DX?tukgRhY=7Ne<^5rE9`{oMg^0C@X37Im54Mb7t3XkXovf=4eji zRwn0tAW~~Gm+D7s3#7VKq7oIxKV?PmXoe4HR`>o*WCP0Lt8=z&bVJ9gEdZgExqw+5n{1_ry~WIxFz5-S#>79y)_X+NEqg;dfX zEM*mul_%-WqeK2As$$@Z%EMC&g0R{H3I#N%AGY@&D8Cn!AERcfh|r^hnCNYls><$idtM6-CQmJ8XN;= z=1PDNS}_P`JL^W_6?@XIvFwH)Ry)lIH$3 zb}=?~_TJ_i&noqjFJF78_@UcpFQ`v-)UXh%u+njzdPbZD@zh3Hlwh!04mvOTgr|Hj>mv6h7wNq&K_B^KPp$_ zSE1Z@c>!1}6Fm#RB`E7bi7Li`Tm1lg4k*D;YmD+s&I)Jj0axD38=8VJH5Cp_LR$oo zBV?cvdaSt+6{6kWgiHJs0_rfidLV4Ly`_hqX+=C&Hqi3kSk~D=@cQS% z3IC|6#T@9}h2fSv*y>xGn9ndTMB-hkU)DgQQpEGo;cwL0+1c~Azl-8ui!~2H^gHR1 zH*^e7FOVZ6%Zv9X=O6Q~j_=L&xP+ROkAbkRE*jpkmCibMl{Vl#P?EP@Vzc*ww8Ofq zc;;WqO<&p6C;lEl_y(n@-TchTJE@5MiK zN6@YhpV=thZhIc+N1qk%?p&zP?jqiysM(>ow@MtI`BB-vovsZD-)VWiC2vL2F`-qk z&lTs-E$hz~j)7SoUa6GN!ffB(s>jKyZscE8Q-h!Tlb@U3bEWpa%Six)!_Px~{$=y- z@Nn2wzF7?5k3KhV?;twO`-xOMQIh3^W@3@PAA5 ze|K_HTgmd6u?hr}s}*{~%TiA7;BnJu;nMr>{ zF+6eTY=>K{1fCcu5}@NY=-~y zlIAbhQKqp&KNMbc9o^|_6(hGIr0`hE)YJhZk%*|`jPSDzQ*hTMeG&;DvIJ14Hjx*e z*;4T9w92tK6@eA0A1?$hq6O##$0$kUdQmNbA2;Pl0f7@dJ5FBUqcnj>X)`wwBUKR` zhdRAbGZ{#HcQ^qn&twCOh@B}Mi=>IG+@UBVGd99y*`)Z3)OBcKlpq4!X^h{Ug;|~t z3L0<2gDB%dgXFwan-Y- zgjsd>L)2MKh(D2i!bwvZ1y)Y0c41P*+{!zBKFoj&auz|F}iaKEnrcMbDdMJTVtA zsCB9D{+5qOTC+!%pvikDH4R%Vdo$tUD5m8nbBzNzTZ=+5UU0d8dKC?sOKw=nFL`vP62GLSa*{fJR27+4|3k-Ga;*;_Qgj% zH=CV7i{38t&hHIY+DA5$U8 z422LQMV+V@3t&Ixg>fdZ!zUPX&9H*01gO&k6DW#+*d?WiB=tf8$E;fGm&b1knTsh6 z$rW@lmR#nMg6gz&8KR$)m<;dAiSH^^5>Ek0)!bc(POeoXs+F7=YEz{(KTG9pbqRRf z0&zlJ854>F)vebS;FJt}>x*fQqb1dzG9LeoYgcNoWoit6kykorP*6d>spm+M*Iw`x z8!&CCBHgAGxi_bogqSZ**(KXjkzHD*bZC?jyEVhu((1_|YtAB!#GB$>3DH-rOq(qu z<>gdgL1GL4U0*IM5xa0aSzKPOOl^Pjyn>m(-I(zpPU*nAa+o>QK7(bbTOqSlnyK78 zigfSt*gu$mM1k37f<*is`>76)CwDn?UP_tHtcq zx&n+WO72w<$(d2}8-=n>Nh3Fk!@eJpg)dPXER+9=qDZHflZVe#vN`L&HNCUbw&9J2 zaqY}>5JJr~;E{L1mSZ4A$muguVZ2at(4LG`bHfm)kOm>P?ZPAuG%9$G**KXOhyOHwxLY-x-VtFCo zvA$f`HGOo7ro415w+^o{NbV9>!g5UOB+LHw=a*KXt+}4R*FXa}d&dHvjj)~PysjL3 zdJ!MC`6%-ClUg-;RCk0pZWf^-O=}b3@9(ZRo)ywOXLAU@pyZ&G_`)`)0mEx>%?9sQ zL=L(y>gxej0p1fHe8+!+O!1vsT0ArFukNBk;atgHhvfeE(6^lz$<~<;hBkwBVMq_b z#tVGl1%mdQIV@%`wCRTGO*10@fG2|L&&=YzD1#7NkBOaF=lJEF*)YTvx;LMYuIxHs zx;3u-s66>`bwSh8tIjNCsCTZBZOVqa%>ybJwYKJO%`4X-Pu=$ru~LDFy4!EHu%=t108KrEb?sfydeio zjKb{_`xGaWYzm~sCO5B~ir z8=Z=M9)th%8rP^aKG?6B2JYUxi;MDF&;ey;ujOWe{PqxU43O*j$VQfBDh@ZL*MD&x z4F1M|G}l~XN0k3N0hJ8|jXL|lW=IR3J;6Ux37k30W%xRjUmiJGRbhmvh=(XsfOwMa zj4vU4uf0*3fxECVNQPN_m4OPP1GNC0mkT1*Q03#7LVKERr^CLGGTy~16foLPQ^%bO zB0)9G$`TJ>DAd7L*CG9Igjh0RqJ_HtCx29ousA}e1v&$dN)IZG2pF7*J-hdM`%h*N^EV9EUOaxB_-8qoNOBzFi5!mD4a5dA(hnin z*1Mm`PDQNcKVI&T;qOy%@8A$;@$kx@W|_7i>wkcQfUqQ7QX&vM6<=N=FQqbRw}@hY zI=+3CAXQ!|_8}AMI|BJ@VPbA%aTDP>9dP?+;p`c?S%p66Q5Na%kh|(hutK375l9n; zZ1L>}X{?pBcK;F-*ikGwEffzD z2Qe>-3*uEN$^g&d>f@CRiyL&)8>sf`7?i0Q;)=0o0#Wsf!3~wj7^28I#C{GtwVB)_ zt<~eM1ThKREDSl~R$ViR3T^7$;PNeCyiFi7)Y4xiVk(0&rVO#>%rpGDUs?pi{xpD* zMkXxlLkM?LhCS%Pc1Gf;eG9F9jkRMgs%KtdMu9rmwn0^Q zCOtvE=dRmBKxJyJ$B`C0fM=l@UeFXr<*-MgBXR;)x>*RNgwmD2OxznZk86X490#qdCFdKQIGFqA^O^_bKiriU<{RCCSLqxpEgIa$m5Df~W{Ux=2;INL4?A z|2&YbCYA1SQpuVX87G&3sDF!erl8s7TWPvRE0T|UQi2jOte{2^!c8Rg;G^xkM)1C8w@Y<#E{8A&B?+n zXUND)3^xgzszLc9LtZ=?u@D>IrPx0=o5wi3NG+QnyICYG0To(Q6jXVBCe^60_ZGSu zQK_*m{4@tMHrJKa?_9cDhxotILrB2L{}w%j1cQY8FZvLkga@0Hgn*Wxf>-g|KxC7( z<<^Q8l~EJZ7W$>>BBN5Q^xqz0xcaw;==JBDMAUcm_$CnzEnQ9gOHG|3O^#lf zbj)I#%ykXS?X0crT&$eFFCQy+cdNiZR*6G4K}Fv%qHU6sotnx2$|I`8|F@86=kkpt zIvJ@tIr%ubsXDoR--DgJ0-Pf1onnif;<}s?hn#(5oMVSvyj)y@;{GEf{(ta@-!S6; zi%0yQY{Vch-&ildV6VVnugnP_8*?8Y7oVgy-;j9U&>}x8O~1fkznn?G+(o~_d4C@h z{~%-kxV!)vgZ~9d45^L`)pGftoWx+Cu*it8nDlUaw}_Dc(h`G0BTE+}D_5h_>Z2FMkJ{p;)E>+A9B>;Eu3@f$t-@&At=5@545)fY*`62ydD zj@1`S##4%gvW_PfPbT9CRc8NcES=8cbUxo4Z!DY16AXgIlTs;%N0&$<)~#%!QZ7@- z6Hk$Htz1G=skiFxXud$KHE7rSlwz;cY{dIpsXN(X6Hj1&FpzVhRKNp9pWS ze+3e&eof4Q4??i`Yuk#eb*!sdAomY4=1xl1iAl>9#ZrmfDK1n z7j^ps2@rF;-tJFls^n+WzMBVp7vE15n!U(M>hQfpxk0&E2OT&#k8tOT-q8M8!529I@ z+Xy`P^3#f9IL}W>;&{GRjbl(iId>Dp$UU{Sq=ZiolQ6|8OJEh%xJptq^eRllb?ny2 z!t^7@$RZ3;%nBnd?omiAI6&8qvv_OHj-#9*f1Tv8v$q%Lf)JlkClI3fnTb(-T z1!kCrm`0vi6ve5zuQOOyS_o&mHjqy1z1k}d0 zQ6tFfc3H=L%W42Fh_0pDL`3Fp%_40QtmLE;3yYj0N|AwTYbh#XvRDHInv@{`NE{0F zB=w0&Nd|TeLYiVh#JLwAj>|IV0OdC}ONoZ!G8>IY%&=u-F#mFhbD}Lwt%ig!am*ha z4K|)^j(58>HRAWwr?+Cq(_$P}-8rB?z_!;0mzDE;d-&Xe$zc1DNKc-kGQctCcJLW^ z5({xHin;gzfTc{g5$GPPI3ya`4ri!_B_zASgCr!C-{$Zjl^6Gjbtpm*IenbubHQId zDd^ZSB+R@pf$9Xojt}5`)w;GD?SrI`cSqXH0iP7_g4JSFD*KhYA^E`iF9U$4)|Q39 zj@~qcN9Ua$)K6qo$DL_w$fRwMH_B+p`Y3dT>l4O8c6b*eoMdDHw&6a?uLTqGk~X>CV5MYO+7ez_7$12kgi`!5wrM-;ia)Ngm<&}x$7XGDbr6WtVBdaAv zyA*9_h$_7otCINlls^Gt7n*b8#Oc`RHDNK8TKeA;m6q@t-Dw(=ZYj+kE%x%?cz+Do zI@hR*e@do7S6fKXth+Fy*T?wMSmAZ5jEg_#y18Cin`^JF10#R7z&mT0J*=&5d%1mk zI7JR~#nVgJ>dn7o>8)8pHahiM+Gl-h)R{W9ceGwQdZ+1Y1GBpJ@n1S8f7IFx;VhkI zw$>zx-FU9hY&|QrcC5zKy2WWRasOyl+9s7l-_Sp-*aHdeLuMN^|CPl4NAa7*tUL#gwUurb(()F^{eW7Nc<-9h(Hl|UlD zwiLYkjX8$Itf-KU%I=dPo__-dQ|&-8oP^)Ov^eno=@2Hbvro>mmg}#|6jat_K;7u^ zT~JKz$9k%Z9Q)US`&Oq*Nr;o#9^U(W-w<&~0{ii*8aS2C*_Z)VL62KX{5RM*ujBkx zpNv9Ng+1jeDMQ8rElhPn)vdlzAoysgEn<>qeY+!7@;?VdUELoF(4V1mwGr-O?x_pM zGv5YAhGxJ-%7dXe898n+*Jk`fU3K7OFSIt^mpfEV3z54oXg=NpV^WV&J9&)LasnI* zdzwh%I7emk2;=vElZVWO1zy?CIB#X?XZH)5Ul#;e2wk&;o8n!3f|^07nk0G&2&zVo z7>Jy2OG6DI1$$WEZTZ%}^Ms013-Gtdl3K+10jaW zX`_hcP!F9I7{MC{n&N_Xi2f{P!;rAzSF|oI=lsECI{hmJ}LKHX@xl& z5uvV;!A-K9-E+%azzIn+|5QyDpaYlzH8vT8_S6^rY5A23!5MIde)|D>+6@Zf(RVZY z62F7Y7!1Oi4+3@T8_FIK07kp>JdhRu1jCJgLGWOIgN_$G2+{us>LUQnEz$Ra0SJJA z--A9i2O{s!fE2LsK~6~63k7&Twt8Y2`NIVO5b_~mFnxst!6u*}pIQLp=J0G1{%0>> zKahL`6)-U+J@3l=TlWDd0lp)%zY93P-ont}7(Ijpf0tqem8E&HQZlhgx~jdNNAiPlD1QSS z{8?|ET}zxr1^sYu!Oqp~g`ptN!+wGVc!Dc9x4L^uw>jhO`r`utJ}V(CNB}9xkQa4K z{V`krFi%iMP$321PV)eoQP5vN3_mCU#%ft8yhDi5st1BYpg|p=V}*zo32>U~BAE~x zW(W_KAACOQ9x@gRCJ2F&@2hg_{6!wb!s*JfYN5-h-`*A#m_Pu0jOqbI1Bc*vFoQ=p zgAdif#h^iS1B2lKA&!m!62=IbwBLhep*_w34+9MUG5{8e7Yraue@qG;DdLdgx52HG zNqCHJIb@-SvioTW<7o7cd#4j<=hsvsq}>=SVE{iAq_aoB02Cm|9l#549+2?4$BgSQ z2s=yven0?ql6YyS0bk~rBY+sMvG}1oCnF?hYQe}R&cxnOwbpR2;QlD;_QZ~{C_0GX z(R3~0@aPOD_tVwjN1&vOXdNg+D{qUk0erM)_CQ5K5OQ37LRJ2Hm z=JFW<#yeSSxU8l*@vHyCa%zrb%1n2Zd;o-C*dqlhF-uLTOP91D)dQ+`3xudkR4gk?!Ce&gv1=f>72ryubx^=i@`Itg^6_`GncYJQ zM{R$t*XYiJh*{OD+=8GGRt6guun-0q)D@sBB+E1u(9G6WaCu-E7oDDhz)EAH$JZ_< z)LnXET%1F4chmEX1{J~v#$v_v=pq+b7MLNDpUYuVT0U@-D?k$C*sVjyBO) z9%|x$ZQ^)n4diLd6>WKoXkp@PdGXYZylCtSO=Q9$R*?uv3C|PpZnukS7o};Hz-j$# zuXd~ATXQzgL9@F(Fx*gvDH}0Y*ytDw{Iv$wb|lr-fYa|wb9uV+L?;e zm2uHNw9!7o(>gZUE-no*{?UGn(qSlp{TJ2o-@Lxu+<#!g11ze z;Q+Nqfsi8t45rwCWA380QM&WDb|<`P+oQF|Q&eY1R}I-WThraO-Bg`+@G^Udsa>6P(%s>%l~C8p*j9aNe%0kGzSEE;yS$vCVc@Z*dkk zu()EbpMLiuZs;ea0nvWvMJ~R4al_jo#MU0??^P7-h>6ZfZj(xOd+gHMfHqH9 zuuw**drI_Z*2ha~1O)&*VAKV^@9RS>qO$^D$pr=pa1vqABgORheNYfMl_5SgCcHT& z!8kK(?pNM^;v^XM(19kMSu>y6=CnlOj3V{b0GtgF7>}}CRY2nzfU0Z~r^yU zip5?Ieh8+6^hK|X2g7E70(K#NFvC{=04`rbRpJv62sco6Awkam zz??!#d%Zp%Rrgbtyl057%h8_$Ui{uK%0;4==C*oeny)XiTPR+uv4TQ>9E zHr>iQ*xa_f+P?Lz&aWCOvRpm)Zf&d@=46??-Pnot9Vst~?rNK*g7#>qoPydd3fNs* zKMTI%0@NF{jI?~XqKEXAPh?$MNIx_e=GW^;JzE}mz-GJ)ao#OF@@C10CxX0zhay2?D zL?&aZE#hr}I7jRSCICVmLN8BQR#-i{%2PYg9re-Qep z0CEBq&m#E`pl^3WVhb3;P69Tk2qXINbQiqWd_BK&LEFBenNy@$W%Z}$eo)XD+Yl08 zOYyuzXSzo!Ul%=gN1FVl!pB%f{Kx;MgTA^i$NaE?>kxJ_4H#a#fv^RB7QF*9%hhL9 z*dNZ2e%?Og(_PSj{qfzIPwjx~5NjID2*0y+^}ss*RA@$!qf^M(?KUulLDEy3nm}9`d(NeLot=p#^2;b-9`?`DX`nK-|_%8`- zk4FDqlE~ka?OcAC9v>h;L)8G%>1uymCz%8D_pz&*vw8i%`*N-%DX)^> z8{)0b?yfbj{7!{;0U`K@F?z9LvAY*?kNDbKDRK=20mo>$71PwWdAU!2b#q9h&j|xB z_yf*azRox|AaLr6841oHb^&d2>A7T(9iR7dUxQ-*w()mfdv_hVVH=<*ep9S3W<56PK;%JnMf8YlY* zJMO=LjEN#}gU8FSGpU)!e0q>{t(^AgigWc%O)dZNmqJqR3jxA?&|4pMfm;jwlo|6| zve?_ewp0;*V)7h!X}!b8)7|QU%$~qIWK5ZjoDqnU>L-Ejj`FiK}sZFNgGULSg|Nr8msJ8 zWJvLE^e`0nSA)q|G=^&Cqed}Y3NxcAb`s&ikt`g7*-)@$!Le+vU_Uq+HJXJS9CM5k z7B-qpd@+Obx=lxu#SDy4Ddmxr*uYE;LSdll`=Ah13BUez)B3QmTD5NNgzN{PdJ4fU z#VCH(bpVV=kPOpV<`(T^&_r#P)KZ1+vUUf2!&Ag^-?ZJF9Nlb*FrNhN| zu|mF9Z5kUvI;6*BrgU2R8Ca4`XlQ@fz42ndMHhq!x}Y;q!y ztoz*!3xeBE+LA#=SjV7e|ACnL3&qONM1 zAO6{x4JS=EdVtc+P~Vj}f@IruHwFCedzNMQbV-uk4NkUAlXkm<;0WbDGf9?f^GGb@ z<%TIiMf;+i|3&sg45*?=g6Nv8nA`*HtRyw6Gp8h@JcTwT#ql#qMq%1Vc~NnLlx>tv zR@Uh+Ax`>_8GP;vgF*#%3z!5>pK{m2AFP7?%Rg+cDB;zJnfK8oF;vkfMAP{0HIws0 z(4pk37Mm96tESbo?dm@thnZ*K*_M=K$y#-s<@xC3*0kyurTD6EFVg)?NI_snu^RkR`qQk%3KJC{5Tq@_2Pwc~rIJq{fu z)G&0DXJk2+!ha`Mr$SzC?k5@?<4G!L+l;g63nNnnhbg%HWKU*<79%>1ut7%OPt9`U zlqxSu&9t=o)dI{kPG}tQx`^-W={QWPMfmuUqO7-OgP%oT2O>jQzGjAbAERoZ?fp09 zRQKt}K~hBYvmsh&1^VV$1r>YOZGXmxm*Ysg+ds##?q%%FdK!ignp{!S^0o$5`&Jf1Fnl7mV`Z81Rt9#{F}qIoZSn$5Ig1q@aOVD zIEMyMZ=*mVU^d))t|aii7eQ#^zafm-hCkd7gm8})!gvl15oIX{ zKp_>wMR>JgM5TO+g4%R+2!svb#BM5a2D}p5i z$Q-hXLCC2J|8POh9Wc{oF&ZH9wBaGu(hTzqp+ zDgBLppg8s(k~95Yo3?*eO4b)O%hxiB&3NopSemvYWrD=uTd(wvFZfzRHb zLKJv8oAHNS%qpJJ!5X!c3+_=YxK=S2!NVRs5@gBMEI;C7@Km%mLo32rvXJ1KK>8ip zlt*MrA}Gc^#gfZXKy7*^h4nrkHt<*=@|uuS_^XyOSg1^?PZu8`r0k=`S}qb(@GHh^ zF@gMN1%>IkV49bLW8ot|y{)CH>H1Wa8C$9LXApAdyQ+s4qFVm<&p9JVWCTDJ&hV9r ze6gcb1u*a@g|JfM#8cgBznM(_$XZ|aSiKLjB})SBQl-LbX_rW?UhRll4R1qZ%x?); zm6SqjdUdO|EvfQ{)Ad4Bi3waLya37$LX4U)0k+9V_@~7ZD5(_9`ftJgGO&y*He2nv zjpLTokRw}r->lW0FUB?rU0T5?Z=Dfwwf4zs8)v!;ol`aTKTg=zWP(C!_yNR_iVhcN z{BY27p&)4c(^S^p@sS#^s@<+RCMq#JI1aD(OiDf8+(KfG(+L#;glQJo1 z(}dEQbV50oghBt$K8krpo5pcNROdfaMsLk2KK}GCXw(9^VV6-2YyVn^jqifAD@Oi$9EHIdaOlwpQqwsT=R)$WF-`~XH4cD zQ(4C@WlPz|@?n|Nh4^e)Wi+Ior5v?kW>16VT~@2Ir^W3;!;9Ppbhg=l< zzVveaA_VxlkxTPh>i2uC_13-PF!$MaeFH`w&D;WhdCw5|T=!%6-X-vR z9aepfOi1u8y~w=|2msHkcX;;OdptI@1zy&|l#aM&yl=vKdw0Y;Z^P_;9?JyYF3bha zm4SZ8oxsOxf8Qk-hC3u@|BsKA-siF>&jzB-5b3rX62T`PL2wztM{9xCC;_NsfmLTd zm~6qbBEi#(&W#6wuMI)3i(cu#t|>49C3mNQzI`;W*;p^#G5 z09Drj%;5me;44nrmj(di5c4+*P@iVAj(sOk)>7mM2m4~q?n zId%;@{u$QemC)M^cUc@3A{3Y96*l}=>ApGiLNj6pKHT*%WNIU>6x^?@(`^&Y&yYRx z8(ie{Lp)eUGURbYtZgK8Q=D-~z=>AEIa@N4Hyr4y(;OY#9*g@c ziBv2wxhHvOB;=p4ZSWWzsi;HtF9w^jFqyH?KVuSIk}ikilxt(TDk2u5-CU&O=)Av* zWuz8Zr2a4J?(sX)N9`7M#U0z~*tR?ApgZZ<=~xxpcG9tJ+qP{x9ouG|{MK6U+3&_U z`}6q=YK*69)Q9=Z`VTMVT}J)~ONMaDkS!}VXH>Eih7V@eicVgZr?2;;r{(iM>3 z)Al46??#b4#%sbS-1Nt7(|?WBORtYhZ>&pi?u~EOk8MH9fJ*Xz&R|T;u}ja>k1uFW zn8yc5WJ4Yr4jiV-oHzvZJN#O~kU9&HzF3#Z%oP^?GPy<|yG1X1%P)J4F}dv^bWbkh z?;&f+{^^lT?P(708&15o|C9)sd_R+Y50Ei~lsj~oI6ISpD42k-M1h1Fy$T*Ci{)WySWUP(2~h_hk<;u(!ylL-!@)Q%|zOnH{T8Ai)tQBQdcqj~WN`6CCVpMgrJ1m8KN z=cM<=WZ#wK_UAc_P$1vIB|@f2IcCrV6qKa{R4jiAZp?MP&LCP&b#lK=vZbKz-V@A(Xjo33FIAWP=Vu71N6%^*E8a|;Gfw<@lr2^J4%Ydk^f4}68 zsTS8T?~SOIprxMZ8Q?Fr92lXVoRR03u#yV3pctqYdA|s=zZ`L|p8c+#L%14gxtzT) zt0N$9g8BJ?R}wuniaAz_8z6rstEV++ly|HKY^QfObkYhNMiTodYSQRv(<=-dfx{f&^1(b_6z*ql(-E)LXw zso2_glsQbuKb_FN*w+DV=m3y(D-l}&PXKyPIA~v^(@3*YM`n3V>%vG|d}Fa;Q-tV1 zl=0vzr?DZ{nC#@99M-;(m$6CWzDbaQD&zi-LPM&|1O7~1)5&#;ivv}sE&9TJO-7)7 zBC6J>(D9k&@mI}Y7CUeH2w^p3^##Z7r^uM17k*AOCl3986!WzBWtUD z|Hc4CaTA+CJ>SWlpu#PX`lNw_ATWH=M9T^2a$(~3apZQfA5C=ZdZ6vG=@-YjC-wmR zL=U~4Onfqr%z{j%BTbbHkI_9%G9ve_ur?$fOtTNxG8Rp88O>fOO!H;TqW^^+7C4y| zd6mUyu9Qpy|3MEMPy7;$DzgUtCtq1Bny zxqYSOWuxWQpylf1XC7jGD`+kM?eb0qxNmj2*LXIbXfY~&@fdX3Q)oT(0e-$|{SjnU zx?u%qx&UBbfgS$6hhJL)b##~7wvUwyrd%Cbe2HCtd zo}n~dz9e3v$u57$T%R!7fHT=(cUjGCnn1~3;TBy(%i0hK*$@_)!(G}EAD$y1+mR64 zA#6dC5?`QaS)|)m}Ku*gRdll?|#VI69es~if(y}?4_G-dA9CkKn`+Q_QIF9Ld1@gT=(C&&L*(} z8H?;xnF3X#?mr%kW(4olnjAH|9JQt#C4hI@Nq0YC9&S1v^s{WFf^YA|os49yWq}W} z5)X3D4`hxa#N;yPP{yd@^*8>evZz1DeiiV06v#Z zxs`9ZB{bQ%0H0HZo(r*Gd9$9Yh1~0fTueZ&jn?i>sxCRIFZoICtyS)AS+8wHE*(?W zwnC4UvX=@df!#}PwZ!hEmpAoH9s{!O)jDsrvTsAd9wUd(O;sLaU2i7HP>RzYlUp8B zmmbp+fs@v^?Z|HJOrD?3s0E$(cH%d9XU~Wxw@TzUMkSf&yZvC$bCvf@(Z^>>@YLls0rN$%3^EAs6FsC=)NG8_ zJGvt24}qtW%vYP)5evs-vs*u^G3bjT{q9F#T1!3}M@toIc6>uIp3EranrmuLS(L_W zzt~T6OEsPSFZ6Ie{#U+a6r<(I-G8Bn%BCX4U+VDa)#UyPS7{DeQJ8b;t<(b-DhYqs zQLH!99FA6)|AQV{Ki+VR1krq=hcM`jns>DNNq;`k!@<;MhP`2n8OhAI1YM)X)FwN@ z;zu@<*4)=vBuh7TvzDMw^su6tzUxK?Dg-d$yo2v)Wouw=(Q@EM6RLlkg{b=3#cW|CmSO0==yuR+|Te<(t! zcf4sHnsP(w8;?j$kr=r%EnsJ#;v*0yn+^QYdR0iGh2f4fgT?S%^Z!uMrjW;x;rWw> zGfCp^$Ky5V86~Ki@yI(N(;n?d=^)X7C{qklT`6NsNn4ELEE%6E(``q2s4}Fieo|z* zp0rS9dA|IiiZV&$Db5bSa-+^Qt8FPxbL`#u7kXF{>#gBNQ+_-{ciO2oDVftGbA?J!wn&-oc8f6FPnq^au_&kDv0M~}2 zHA7ha@J@&GlE>pa*I!+DZMM}wd@t^uKY1POyAgaJ+ zTefn-1bL7B(<-@7O3Et7P6X;cc+YCa1o_UZxEv%7Cigq}E<0X7+#S1|1^KUCPc1!; zN9elvZzqDaAC66;HhAxa+pIj#m&Pt68QNX41fI4((L)9gFmJ&Z`ob>3*FZZDadWi<8FA z1j>7m;?0GK)8h%le|Is!@t6_enT-i_Oy4Cu4;kXWnTbTt@m~X{8KyIXwbDG>**v2P zt7E8*(eoh3;Zhr9kx_^M)_U_w)|RXp8b#_xMb2Xvo>R9K99*m4jgR{4Ck_)O7QmQkeP8^ z+WQ{mw`W{AZ=|~{Z~+rxu+N?B%(|Q-4-?#ASTT;+*yNXXYVq@wnFuS4oK7`w)iESu17NFCZD^+pVzb>`{ zNuT`AI+<5B`#jBtJk_`@UFx`LsPcNJ(}kd0?m=s;4k9eqJpAmJvSL++d6paC|DNqr zz^Y2P`*FJw43RXpvUs%>nj^klI39G+V_z-%b(s4%fD z`@Oap-PrlgVB=4>zTKMG)WUIL6;rm}92ws{>B;DjN2j&T_}Dzs!01#}rWJjm*Sh)6 z=+Z~0-KoOWwl8q$G-s~u6WP>p;mPFTAGUcvsoF8#z=Xe3w)K9~)D=|0 z&SmqS49?2%;MYN8;F$q~{c}GUA#1WNeHfx)_PDViTk6QK18xUDO#ZSwap&tlvKYb> zrj2ZwW9zV!POf8K7cAMn1P8)ZF5}LE?71}2M`C1dQ|ee(S!5f)LbTRdQcm_fwu)nE zK8-q`#JeJ@3L~kw)!yVy_EN=&1DVGJtkPkqa(@!@x*eqX+|Id*@17dMNvT~)E@BKp zzWaLUZOem#oV9TkX9iJ@*bOdXbV}EMR9qhBT~#<5@e$PwY}(c~68%~3K)MJ_SKIL1 z%#YvY!maTC`fQv9)mLn-nuBUd5FZ-3NCk!A^=|o!$3B{BoNM4U#-GuXnjuNg-U9;J z+F=p5dU{di&n*pTP zW~3JPcNp4hZ`#D?K>$-vaqxpG9lmC?KwztNNc!{*)Hhs(!C;epApE)^IREnh z{0k|bO=SdmZKTVE*&{(gtT99UB`Es~mNwIu^s){=T7q>VW-$0#UB+@I>#({SsDJ0*wZZYeqS&p2H>N?U=%V70pb?Qk3jU=M2KizXBVrUrq4RE6R4jba zCc#4LW9nXo1>b;c{E8ElgBDJL6_A72u6sA4dzO>&vGDife#_{c7|ARZDHjttat)bO zm&kYng))a&;V&^`4jS|hDwZ&na1OMJBB??@)iz#|x*nEzF4jdaP4?d&+&-c&88}v? zRIz$gR-|}A*dHZ&csLpOtt130i3F1*c?;X>8+s@gIrJY|W2m_daHNczJ6|vKNo2M$ zC`p-P`=N+(i#@Z+Yd4uJa%hW1$VI^^Pkf17J~6pG_Qh`;+GHHHy43~S)Qm*cSN9}Lon-tc`uwALo2Yu|ydYmDqB$0xouHHj%*1R8<6O!} zUk)roPW@eB%6t*Y-A-ErF1I`yzg_&zY#w8L-oymn$z1Wmb=R3)em6r#zx*F6e+9Jv zN<<`7-}g>}k+YqE;n5o+k%Ng$?xA((OK%z?rIR4UlHPmfiO&AzCQ{*1*~`!(S2xOk zJ|^L#%>GOfBzTP=!AX@O4V4571TV;hf;7~$dYdDDf_9 z;HCWSr^@w^uL({ewnzdKZ`{W_F}C)iayiLzi9B30GA?}vhpf)E3Bt6+Dss2VHxZ<=pFETh z2dWTl=^Imh&K+226j^$yB4|+F2U7XAX3!8(`^_5Ztx%+5`ZI`jH|*romn1uhU=9eSl6sXqWi6?P55i}4l-L|^hXFACRasP$NmQUWm< zzEJ}zfh_gFA)0;O4_yx{>R>$6AFGFEW+2>X&z?VmG@;s5-d2Z}DhEEXREd*BezQmD z%SXD~#VLQ3>8?yJo~fg~3U%BxW1NbEiAvJ^Ow2M3S?YhsiyViRnq;Kvg}EgqXwxJ$ zY9&qrWzCdVC=WSEu4v+l_}l!RNE z`bL%(3#KQ*VI{||Fp2`0qfJv}OfFlBqIqd!D040KGV%{-3y2C?{uH+cVj@|TRy)xa z2_9$4U>66`mN3$lWSZ%&fDfqqK$(0)B`?kGH9O#--I_R25I?E(qBGSn%L1dzOf;{_ zJk7A%sgYEzr8O^MJzec6s{>alMFZ{Uo=~I~(hwULo6-Q4Pfqf|EtrtG~&5b%g0`tSB3Iv{3BIIyp<56wJ~-%!i3enxQv)DCujE%0~T2 z5qK@`2a5YY_nM4p23`^dwCM?r%ja#+^1!!-{K~qKD0^gp)wyS*sphS4r`|WFZP2CT zf@gDyK;Q=bWMl5+!3OV*#n6XEH~9ImmnCDO1!hM1Orqs%;{Gftovcch^WfR|r1r!E z=7P#Ok9NhujM>l);gXx>Qm1JM9`Op15`t+`dL?L0=}4kNEXHkp;Bl(aiHK?+W!27$={&FHZm8MW$->#}MT)XjxxUqu zogsrCL#*B9VNj*Yr0F%%}kZ zL%{m(0F$1ey77G>MZfAz1go-^2C}YNcZcb(3Nv&V#q~uM;?`C52a_$-6`;-XHpoWX zQ{+{FiH_U`jMXM}62$br$Q1lhaS)k`z;}S4bA@qwWwU{Q3P(MTR*n3f9_3b<>T55G zDtVfzl5U308|ywg*CL!mHN1cMwElj<$tA`TGtyEG8httSjSaH>^_thUPJ;+tfDca) z0ADW6$dfp)&~}ry2EVCVPlh>sriO5f1#`EC@OO=kuNm>wkqdaOuKW&EI17zx6@v@1 zaZXJmYc(00Ej*|)5~_;A;D&zbX4K5iWbGe&0{?AKarucd_SI*XE9+M;W=wwp&u)+lv0&NViH!>b}E z8>UM(FqpbP*gM`!BjK*wrrz3c8i(&p>M$qn6r%36b;xAwfv4i^%I;T4^$mU<9GYBL1}hu}*bR?^?7_$P9JluZhxJM@w8m-m zdQ>?2R3IlSp2qi92Y#lKBR>wKFh`wNNA;=1>52*s;DhezmNA(cu4sb!BHSED@FqrGaK=_ij!d~P;|C5r6qbj$8M*9dQz?)<2$|9U2u$7Mgn zVi>1p-PPp2<=`>2=%~}^VrcOsfkXxWtW#;v0c2LJO$3VIcDc-tSiuhe)x-bk$K+ zfSN`cn?muqzt?eFl=SxIa5!~w_j~oAw}S_Lej(A|Wb;p`F0Lp(uE|R-l+EA{6JV$h zO%F)PB;d^<*o9VE&9OyKv1|2lbj@6Fk4kBGRE90qJ>b*;zhvZ>Wb~IL>|W}tW^1Fk z)GmBt!{oH!2UqvK7<4j)H2`Sw*>}s;;@mHx&B8P7j^gP#OVuw2o3}LUC7a4Gh3>_C z0~kDJrU}G3l;O3C;&fnZsbm5x8e62Gf5K9HMtTC5>{4N9_bn}YNn&!Z#pk6?X0gCk zCeF9%*-Y%}t*MCOj`ij!H0RBbZT#ie7W(jF(X*ea%2NVTp>^P?Yieuja<9V&@g@`Z zMt1Qk4!o3isa15j=9|AZ3hks{x)}zwxyQX)EPz*Mxhw1R+PC;+5An5sZ|`4np{`l< zq{Kjt?AEsX++umc6OwBL@@YFebi22WguVX4_^lS(R)Xdju)8t4%M-&_!7KH}Zhy>+GYh~1k<=$W=dh0^An)7vjAFrg~&br`(0lsR+X;4y;vWd)E}G4P-Fqro!sZXF(t6c~@5j=fSV+n-E z<#c#LA?@e1Ka#6gLnTWI$7eFT8@AOSjv^EDJ2OGsA7LQ>RqrrT3mKBcY&u$wYhNh+ zxfHW`ml6k*&HgUm&FqFDjuT5G#b{JIn=gX@%Z|E6!*OJxT%*YewEw~ZyI8F|kVxUa zXt7#jwh}v$z^t#?Vt>5Y;Ervr-2u<$`>cm@72fR+i_MAf6v5Q&j{EBO@?>f_EJGt@ zC5bv3kuA#O{6T|J|9N6B@%k-Q>DX{ALESoD1H#f`#oV;1LCgKYazl5E^Wh!e#bz7T z9E{h4!1boD77Mw`y~XivVNO|!NkrrBU}~koe(2-2UjBHYc$x7AKxtFu` z;qCEK6Eb|9PLKEVqv{9oH)aLX$0+!002YXiU)9etMCAG_wskzn zgG~f(o1T`RVCw0a=+o(WR{>}I|C`=?Qx%IzjGop`*@$w2*EcVm7b`E|p1oVOW zVH_MCbNoCM>9>lqEoHaE(&qv6Q-aF-aSO_2;Ow(%MgwISyEq*UW1<^41%v8@BFD43 zbcBoZikEL9^IYGd5`HAni&iX~yKfZL{^8nJC2C^G zO{#S>mauLMLtCI4ir*SC>#~ihz6m_uSJEB5vgBMz)Y4X=B2yHv)eWfYSTU~Ay-)7c zQmEk&|5%^SH^{`c!_kjmJE%gDAJt6ObNY^zXcj9~=w@udG5@&l)pl^Ul_w_?ca~}^ z$am;(yS8Go7iXQL>YBj^=^cF zGb91UZC*>o#&VEh=_cgLr43(j#r{XUll})>U=lTMZP3|6!o#fBnn?b;WT9p zMscy`xJBq$E}^mHyyvfz^0e)r-|h^R03-rU^toxfH!F--L;W_}0CXvRQRT1jZb;S! zK;7~}J|J7WoyxvUN(lF7lzUyU!M+h-ckSRZ`9I{TeEe8$Z=44ALr&3Jj~7R288OjE znHQsD2J7s)KGXX{s=iIX+y}4E9AIFs3iD_A>x=2M_9L4f>>SpgE8!>)`t}8QSn4LO zCx$@vy)caT-S149-N8RBh!weygp&waLgwUiKN6S4@0YVNHI#;*nv;vMRA!`*+H(jz z_e1lwWPNln3~>f>ZtZDQiK-hL?#`&58tA}r40SnR%yG|0`uC!s(SJCpQ$K%zt| zVNeiNJo@JhL`R8Bi4yuRj>2`a##Ha+&@(}aO5oY4iD~B7;kk~v2`j|LXkrqh#7Js2 zgZqHD?^1nV`33Yk4n_V|(4^ZlDu)!CxDr57IEy1{xDTIhOdq>EXhP2kP)zQzkfrpl z`N_j;kuVm2$oBIYTYT9jb(2)=QA1r4JB2B6wVx8IO-Nj*!8SyTl2DNQSxk~)z%IbU$OM&ZQhFkGCOU&y%;0dIx^ zi-D)?$f#r{?#nw`n}~q|!D^O23^VW3*-%2mu&$T`r(6~k7qZ@Nwjy4vZ0_lsOA{c* zKc%78hlPa#qj{R`Qu8fqP`Og)&Pb~uaH(WgxiC%usPj&ni#MN}5w<}J@8YIbm-_kd zJ1i#>O&J{%*m&DAw@BEU0%8|#QEAHpyi0=hbmpIZ z;M%iI>^3P}eUlsfh4RmSn%WHLJGm1o!V@pK6oJvDU&3htbZ{){r9ic(m(${lwoC1n z*bYg{7*yFNmLbTIjBko>o5wCU63O@~H0=*8`V`#22%?6+tef7->|*2B#hRaLu?BCH zQFSQq6&j2=p=ez$k(L~l;mV(T?Lto@zam*p)d6tYKXFE`8R#`z){Ra!pT<Xr^Cheg(ejOkrxzYeTKktfofg$ucyGXAYPcRua4y;tf3f9tFz%wH)ek-WV2UNM_MW`D@!I$ z1%V6D9wrZ(hVq(*b$IKDDiG#P4AhcqJS$O&oJ_l;$J)PNH##@t(OOQRs1n^7UEv=) zyQDQ7w$t?M4!A0pJa^6f0~BC_ozeU?F{PlF%K$}Ev`9T!4m#;uQ9+!8iVQ*EQt7`j zRqiU_Gfi23|MrB7;;K?qHstXCe4BEr-NiO}EfGe7K*CW^iJSO06}^2=?|~IrDY6_7 z*t0>a^JK1xblZBggQ~mCJz=SBzfVhnpqgn<=avn{aP7Xm&A7~XsX-|{AhO|SsAt72sa`#E6@ zpCUOaY@Ff3bqho^nxhIgIRMZR%_e&O{X^hx@Nviireg!Hs6)}x+BF{aS5fVcz{%6R zFnb7{OFZPRr)R;Bo4Bl}LS%>*l4kf`DxqgThKqT8rt=efxW1GZ=5_Z+8MSbIvC5Fw z1OJ`Kub17(U^7+sZ&pyhE_Vx$pEi*{qGiK+FII}r?z1n0A1)s<_2I*<<}RW@tD-@g zJ#udbzc9)~L6UlI2+UxZS5PC!8)gzu;oX%6cKZuaiM6YDn zuMBCUAZ(*@`h&4<@|@I|ez6Ke!RO1RGeIL?z3EQB>HEOrSA&^P--Xfy0)(H*r(tMp zQvU|kX9j+WksE3(+so~K;YCsIM!HrTzEFa9k`#TdmVDK0rL)V1@%p> z2GjM#0p#L)@$C;7Q2y!d0<2`@&cPPjRi36-9D?r*jirWw?FvDndWm!Z$ViJKZ!7f@ z#DjNmg=URc#E4fQ5B)0NvYw5m6pbA&4F@p{y&#J~Cap4lh0rqt113u#M2gNPhh8#u zB)aBzIg!IgN%Si;w~fV%P2>zEKe~OMXZ`l(Pi_CG~!V+_7Z^=e*u|v z;~Jk3?L!R}q28({8yqq?W@^x)i*WT8RBx(m!_5M|S7s%*a`+ zL?FV6cy?jh!|xb(loT~LC^=^o?=w`dh4>_Xv;~!vmUj3(Xs45gFf+3-T;K4N&6yQP zAkOX3cja(sX4x+lqM1!#^Wa{CzGI2!&{W)f!O^3uAxAHbWkFSJ!BXVvu;I*`#RAE( zn#OWlPqQ-JiZg;Ca-iSy-l9OFk9{@a7ge+im1A-?B$Zd>yJp=Fts(XEM|@|62FAf{ z#R}FlVW`$}+28h`7m66;shA(L!?i8P(ZYL zqF{I53atw|>4ggh#F}ouO<57r=yPDhFcDCm5GWB5#|tPryjmFwvd#Z+RebxQAmW|( zgM}TT5AD?MhD$?_O4@;ePZ9mfzIP{rw}V>TQS{qNh4`&?)e$%b(2D871={e=u-o5Pv$yEpjd>g22%g^nOm=>Iu$^NL!;e#30<~VvVAqP1%7@%<_Qj zCr)m%dBY3Z?SDCQ*y1^or{-aiDwmgENY6Qt^URY=DGTh@_XId7J=Y3zFv@~@SeZys zR4V4Fgh#Q|G0@xYY&;s&T$JUhrjjN{zK1QKOd#WN-Lb*4k#pQDuEnt^n~TXBVvB>J z6tKLDVDQ{p66kQK#8nA-qN9}Bu36l(a-wK*QT)PI*37$fHV#5Gw!)*q)LMwsI(1+Q zxYg%dFxba5{2hxtQ74JSBw%WxAzP&#mLvOqcgJgw3)QerIrhzcfln;gcxXY-QAJNt zoYOO2J-8H3HlL1$(=h76fVje1<>8kHrKw9CmMvOOC8lo4;umO6pCi-*6f8BvDD0QT@qZmVX8TDN(YX&y$x5YLO1-kFf#w+ssGPgFU z^V-afj@V8584I?2?9QmSYBWjD?Aw+xRg&*24EG#LS;`m9i8jCQTx79t>>OAV?}5G! zxX1N|phLS|CpT+Vr>`6u8SF-Us=7LjEHTQD)8rmy(r|-G9$Qyvj{r~PWXB|D+~*}u ziUdV2nV(rn`k|awr|8x^T!_yx+7!vl-AOLEDn3JtE)26uD9Ns}vT9a`i;|O$D>&S* zx!B(?vAu;Tzt$gm6red$m5vqDg~}Rau(P~^WZohEh+tBlVw@9=R+5y zYg(~+@?R4Tc3!@|VETkYNS+~~U;rckH)9eOU-bWFCUFSJ|1C|D3mN?{*yK-j$4_bU zSF+(JHmPVHq7tU5>YSzOs{9W&>8qn>RfRZsnO{^{2@yvfU;i=pS9u%;I0bEPt{iA@GLc?CGd4>+X` zx_mN|iSusy>i-2y2Dv5n|6@%48<@1U{Rfy-u<-IQ^z!oipO{Gt&3~B5=uF?B$p3|z z{O`bIP(?&=XlQVFa!7#3A6th%LH{x)1491Gn5_PvjLE{f|1u^c{)aJHJdzlz`HwM~ z)05V5kT#o}5&h@CGn07(r}_B>1y#KTEz5uQ=eYcE^s2AAsQ z&gvGP8V8R)naSqO;m)(x?!W!rf1i8CE_!drKC#JxruxB=p`q>D;lWRA@@e89Y;yI} zoBYHk7arf1HV!_q$$v|e2aoIj!6u&{Kc&fsyY+uzlaC)SumAtTCjT$SB;|jM$+-W` zn8YvnKN*wp)Df8fn=y(0Z)4K@zZsLn|1u`aqlo@b#^jg(GA0jQz#x9?4uz9_*XCER z-5*V6;#*Arw=wBo_^Y)Z>C>1j6a3^W%@?Z-`n3ONV^YNA|I?Tx%5#UE$?FOO5l5x8 zKi(dRrO9r&cDOyB?T%&r$Cz9LO>}j6*XThF>u5l7D*yGhz+6^BgvVR@>JR$alpTNs zu9Aa1qh3rBL}0bF9lWY1fy+#uXrljTd!jKVl)i9zCycQYhwRgsq|Wo=`&(=f$#l`I z6Yv2`O&%?}nWz$jOj)uQh{Bly9w*29SpZZ}f!#?^(QnB~B+))5NeYZ`*-7pif6BBF z%uFeauxLD{j56uOJxpi%YMP$`Kq{fiG^1H2&r*V>J+f2(>;wktI+d8@3em3~>FLLs z=BC7Nnv|rQ&z5|a0G;3t3-7^N*D~`%%}z=J3wfz?N=a8w%7S=7w5Lf?vl^#PE6*o~vXvgOp_!g~goaze^@7_o>RIkjxkwmbLNC8|zqCE0UUCzNs^} z`y0bZceTS^Rn#HVNZ&OKO;B1ogJp5mvr74v-n-@& zX4$+Y@@Y(BsQyx`+>fPJr#`*t4(;*@$bq6G1kThT{kEuK`N9m@bB#nbL=S}=Spx$ZW$c&b0ge4+!~hL-U4=?Ki~~~M3_M4e!duj{@xW9c>Z#_z&hS= z7R-o{6o6q*_^^z`H=4?Xo7Cb=nHV7QNL@6M_H&)_8xcgih319Rbq=*R*NDsbyYtLb zB_9{QUbM%sGhZA(?v`oaYwZCK)+Eb=&sWmcjfX<*^7o>pWY9;&L?y==03jQsDaN;l zQf=P8rUgDC-uNTI+<-j{Yy?fB85h9{=!3t7m7i3fOxWuuI0rse4+udqCPkMFkNN4+l%#kvtG7*og8jh0jF+^?XkvotE+W@oNWQ-qas_fAL2~ z;V*a_MY1gvvLD0i^4KO;)7K+J6CxiXGNQhw!DbY67izGtU%1#KwJL!Y2z_|BSUf6_ z5tv_HAlql5J8{aVpbo-vb}pQFe)&wo#`I;822(fCV_t_uE9H`>xqOopxsFvxCxzf> z8L{E9QH{+ZA)R$e{S|%#q|k+EM~UIgO9Bh!FXcMTrU1vg>o?t{fg7bq&Q=Ctn% zaPCaXbHrqbaI!F(2}$u+F$PEf{(J941ft*UL{=;)REzvK*NElERO~7w6*$Y!$zKXF zaY`--SCdX;<}z_Hc?L;*-rTY-tG8ZJdk0y)Eg)H2&Y85x`68h#cDbq+TIXHSB9Wek zX&ITbxY*Ko{!7;hYPq{ybjv7q**RI^{W)&{V#yB)4LJz$+Sq-IVoBAL>BOBtTf zaiFAPcyC?iP%f3kPqY5a7Y8Qr_aZshlc~5wi~<@Xn(qlG3crowwK*4Pl(uLViZv2S zdEcpp8eZlijc=JW-;KZhkzC9@LCX1QL`%6aI!o(PTxipAqDaT9+_F<&DnwwW)}@hN z`Ep<7vr(pdud$fNdtGfRP5(QsRE1q{rzSdr-cT%LsdX@+Qmx@M{bFV=vwz`^u3M-Db-yac*^*)FUdV#++W(5^O zOLq3mu*cSyIyoA9UI#4grL;B`=4zMsEgYN5v@R~Pa~|j-;>Lnszs7MYvq%EK@gG z3r1n#>0?$Vs=b)n^jq@Cc$u2em9f7LJ5-&qsaDkAnElas!AgC< z8(P$2L!vy<$B(okxUU*-AZ;!6sYBU>B#iHMMY@cTi`T@Xmj9(~Qe#1$Tz1%Q#9^pB zwL5kbZB6fnbGW8QKSEnEmB9_ayO%=qz^4>I)7408l{5@PJJ;03D_ec$WaUznm2b9C@mKC) zF`3sdD)--U056&tfTV;hT`(Lta0s|*09j|cFk%Sc;&v0jQ|bdoG~9L*v0U6v_4Nyc z4*(Jc@a8}T0Gk-{1YOgh_Y~n3=sN2bm50S`S`$_ z&w7tqBI%;?rl)ccn+CvE1I`k?zurH(m%BBUvj}$p zmlHj)K7f3g#BIoqa2n#v5rh|v|HcqWOA^)rHUU7+gN_>8tqBmdA}k^|8BIP3-kY-&6Oql1yJpwg*=zE%gpJwYLMyA#xcpBMcp7!DFY1VCg5 zS>QmYCj~o&gaVhTe-3G|xrA{h`|}ouwI%yMgYoZyhj)JspA`fD_QknDB4E_Seb6od zUDs#&2tw)z!1ZX-feoH`M2@fKzyK2_0t7hQ1Pl%VaAJc6vjK`<0A@b|<8i=LMfbA_i6J9~kNd)7}0tR3J-oXI=Zo6)055455 zgOI@3U>98zpE=*CISB|i6P$SypL?~iHyr3ND#&6N?dD~bmSmjvr`SSg|6!N#F|{~O zQ+aNXdfa3Ph2=6J0EqJ!2)K0)IHisVQG@*A1LMTvBG6#x`WO<`9ChbxkNP!Kq}mRd zIWPp<^$V_xtgGFYi3bEAfvzZ;fEDmPC7Ox~U{T_6-JB>#6LFdxzl9THbL?(}GZn@`o%SYMaW*iu6G`$Avhk#Qc4dH#i&szS7={AcxUsjSjJU*Q z;tCUkgOT$jseSRk1p2He#Y%D~U%C8g#Rf=@1P)5L9Jl}oVM$MdgF=oWyi8(kzJNa; zDMHFcV3s(S;}WRT#DXP93%MrhWv52vMtUYeML`3&s4^ChQh~5vn9EZL#1)kCSjv!K7WnHsZ1dxub=mHBN3mg@#wI@`ae9w zr~v-B-sonjNR{7Q+qT4fGO`fCBplMoyje$dhu{Qt)&ftMyW#6`i85;kJotLv@n{9$Gk_TqyE| z)HT`D_0id7#Ti!DiL z`i&};LLvcx0uCGP?z{?c9xdtzhDMs%nf@%oVD{L-^$wx62V+i#s)q6$a;F?A(NGHl zM+t@nfE{pwQ9SzjkpK{{!l_m5<|J?qTYNJ{U6V^o5S~r^mQz1Fo|7j9x_A{G+=cUa zg~=%esVg`$3rzL{g&)rqf8F9TfIe*Bz{Ge$AXmW%;Uau!?L`j3#3Zv_ufeWqtMDYj za^OgvaDvW5!46j|X??2pUYv#HqIJ4ciN01Z9#y5fP=LL<+?Z8b%R%~qMXdjX5(@xh z213g_)Ci$e34G3UKjlF$gALJ?Bcnj$=vG_X)PR`>oBsvdN^!tjDc1zSRj|-h@V3?Q zn^y?pJM!okw)bY4Y1D7>vi(>qY}~2*RaO+hT`6rI_V8k!qe`eaMxyAZ5$@Q)ncU!K zo2lKVWbFfBrAwJ|tK(U#TP|%B`dzW4k!9p2)*>c3qVPS8-Dx|uNrJAD7_IRlHNywL z!7oig^Hf6tzd1yzf%OQGa^!Gu2=H=mG^cBc8*4N*Z?Rfyv|g*zA0=CpbR_79)0Myz zQlT$!XIn6U-FfgA3&Fz~6c#UQstwbL`Q4_?+uWSi7QAL1`r6dd_O0=ELp)!5LRh0k zT1)C!OWN;t+c6m{e?j_s+k`yJ%)-{v0LcP&Cx=~22?N-uT}ukkSBcd^gY`t=!fgKC zwx*wDonWh-Ztg}s_+71Z?KkGlU2VGe=5;UbE!<%(1E*ah_}$>?EfcTb%JsP1$tBdQ z#fb7C>=wDxD1|q!4T|V`7!7*z(OC)DAd>37yUcN$#7kC>b&~V9F(@=Y^L5FjQPZsV z#-yl`;m7IWwEuqX^1B9mHE-wT@8%D0=l@+HXaQ}AS8sP}d&b7IH7JNc5ByfmpBqPp zNiT4=+s%9{ymo5zlb|OrdZ5C*_u_Ow2Vqdo2dC}_4q|DqcUoG2ZAp~EAh=DMPIr(6 zEZ8D70Mf?GhCZupOf3@E1-=vjhLU-*P-dVQ#QCc|1fly4RMsxi-Xgr-H?Ps1-H(^l zC!wc1K(%XxHr|hi%|qQUHT0cL@y#*m3^F1P$g{$UsoAT$K6;vXg9<%ZU1*2PhTo|e_LL!0Jr?bKIq9`d6m-4o{kd`Ua^gq&R0IX z@)jGlJ`s5~5xqVFJDPt~;!A1)yH~ z^VP>^;-@!;u6?xmY=Et=_fj+LvkB<1=_14{Lf;P=bmc|3>>X{MH;N602cL5p>VtDN z9ufQJy2vvy#*Q#KM<^Q%4$-f{jnCPnU}_kOHe(jH+x`Ec?jF1A{Qo_Hr*RtFPGdWb zlg74fW5;$H8%<+3w(Z8YZCiWx?|-n)%&eJpZp@vzp2YS2==GLro(S()SY2O;u4vuh zo7`Q8N+eJkBx9@M76G}Eg!SUA(}b1tgI@_$$l@27McKXq{#N0z*;YbWABy?MXq=sm z+GsC>+byddKz+vuP@Ndv6p=DDlPmoy4+so^TxGC1@r_%o`!;19ZMZs(BJ6aI@8_tegE(v5-JE?3D2Z*QrV zsM*zxPtcPpt(RRfkJ$aB#&N|&gYz4jX4X{l#Os zQ0dac01Q?jE6bT6HKh_PeYj!BGnEx(*F_d88K?(^E;KCXm*Usu>|mG$YETm!Ll{U6 zqXc9d^klPj#dD8Car+%twjO1i?)mxUEPIBzogbS0J%s{m6%^R(vi9}+bA;jO6>q<( z`njO)cW}qBs7-VZk{vB;4hSd@N8}p}-|Jh4YhgE+4SJxXalyWkw4D5j@BCiN;J)43 zoDLl@p`x9&&a>KP=M@}VM*jv8C9t#6d|7mS1gH3=758MMquflVyp3n~D*c2j8_fKA zzo6QvLK?DK?R77PL|rgpN#7HLn!VxPL|EGqM+ee$fkYja@phL~yV zQ|^%5;Fe9_|>8ka0#SH6kq@}9MWCNM-1oz2-3zyKsSbsDHqalC4P|k zt+xrZ*9D!IxtqSILc=!tkU}MXd6oGOL}1u508;Bn2gNM+*Aq8{oqVFWD{8PQJt)D= z;{~l_UB@u6ZfMgOu#=Mq6>Tuofa`!0^|bTw`skbE%A2muvjF5;*W+rOWcLeovQn&q}|umn+HTwY*-NMJ}{*>KrKhCDl>e)->jM&|zk`&oA4 z_&1fAaUa>Sgi9I>9B3(>b1XLnRcKjds(@4A51Bq1)=YG%)#6W|@qpw7pdj*}8NLFW zy1QPU*3f&LCO#7(g8XU_L(H&q5B%vz@%i)3qFiq~;rVoD;RFnnb=2Q|;|qMcWO@$W z+Pvw0xHkYAuY~>Pq4_sWj4}=yT&RnTg+e?25U8cQV)rs6NXT5rI_l`I1S8 z?|)SPC?Tk3vWmUVNz5}!1U)urr_ib)V21gbN$(slfp!fYi|}?JR0_0g;wNxZBjc)6 zPSibVcPdqBi76;dXmOb35zzcdigJ4qbh^C0DY$u=mzju0S#oGnoygBR$nJp!3lq0Ka+X_A_+HhR60{o&?XuJ;BKrXW9gc_c??iu}K= zvNIiYtdL(FZ2G?LTy4L^KIm`0KVBctm0NUYyI4HuAD}Z3wtf1(*65tY)#vyFmrd&# za13GDnYoU#RqT17WSnb+p^1~3`=DrKuSE_mGp0K4ICZA_|5nV&cOXd(Ob(za?K2Nz zt^ukAQ1+5g1@Ua&rvwQA9ZKCB_IIeluq+kKlJMc|b&_OBwv3{b3FDTc)H>0({isEz zN`rKjnOt^ef297Eq|j$@4y7$brQbPGA$0mNHCA zvW`e5!=cs&!zg{<&V$gFi5FJaA~X$F6ZFKq*AUI3XIvIR=4e_rW>9NVHs`f}y|1QpY(|QP)dV&e zYpOp1i-k`K>1G%d!STFp!c^gA6o#MrXcSHp%Ds!*$uMUeJu!}>8ncJvmcQy87@*3^ zOnSH;LWWwDs;w`V5-xyB^8;FaD=U9efcLn*P#aQQQ!^(}{LunBoU=_hGD+XhUQ}&?@H&QK`@7yo;DRP<*<4bzTiDWME%t_${%%mU7Sn45T1gY^+g7&OVxU^% z($A2XdMo|EF-|wl*KydZ)a7ZvGDcblaHI@b|q>6VRR8VT#@I zc#YyBdI?W%W|+irMg(5oLMaCHcx5Gpxc5AgDh8gL7(&3M{ehfR2zo3xfWm+34%-&@ z@7dl05@VoXf$HCF^8cyY=hHy^x!Wthhso067rcB z%0hySNenW4Asi73aK#WA3Q`Q^=O5@zD3L1B#+a4VV*NMvVOMKph@GXP%#ZQm0u(0x z%&(YmCRi)3ov7f+?=U6lgdEDGU+Bc-6Q z1}AuaY7r?fWnt(qStpQ*=!-o;K7^>qHn}={c6c+9$}YnA2Q<50qchl_s->bIC0tQ> z^Ks6~g)(ARDl(_@foARuJw0pXCoi4*!$ss%vn%_JH=Sp!yP8^^VzpqWr~|tN@NY&7W0~+9O}(Rt zMRzH*4Q06t#u~j?4EhRRe(1yAv3DM1IfgQam4K5uX9=5va#kLj8jF3~%ZC`w+>ixsNvZ5bban@( z_BBPYCtx_*K~yOoLK<#efLP!04PtWbg>o$Ray`BIAKluE^=|hC90*oAI@(JKn-4|4 z7i%aso|X|Gs6XUlEKI3*zco<0)c^XhwUpppY@Xz(vYD{t*ICQ$K6I~n^{hI`~OT%Y9-bGN!h4&(6`=zGmu@6AnX@nY2p z4~kXNDZ8O89^~(G$lT)FC*uMclb3fw2xP~i3Xn4~`YvLyz9@A5`)Era_o)R0*^1AV zeP;Gf6%Ia!9N4Cdt&@!K9kHS5Amk|Np(W}hFzD{7m3}s>kJA{g=-(jzcoVEg5?(w zPdm4jsXBY&uwKdln%94Tugmz=9`nQckI5yz-AoF*t;B?Pzx>-b_JCC{&G7hI1CI&E zat2;qK*EK{4zIf`WVf1fzlSLxu>OMdOj*)86ODMzG-fZuiH5>y&2)Ht)-* z#OLjkKK(_(#wjRL=i|cP|LTbNX`fgS_<`&*wbu#e(mn|YX>Ui7v#Fql4b?D&QU?o( zfrX$65ZbYU`{5|0?g6P|)%|cLlv2=jg3c!nCX7Ze{LU+kG2iX*n-8;s59r-{dnSnc z-o0MW2krtnDHHNlmPjrtNijX}mtiPLPjHj+>l;&-F^k6-`RJ^suk1w_(QNs#vw_le~^y%GaQSK zehm_kB^NS?M(TZ*N3dnyTUuf!}myMVVotKd;Hrc1^b+mu(v|C@YPyhOJ@FchqV<82WZJ$Tpx~+T z{{4>V!ge>+!3t9e?(xx)2I-Q4@pAgV2s~0x1u{#2WMq<`ukA}$zfS<}M}bu?kTo5m(-^rkvhuFpa?7TZhc1&x z(efuCW3pm$6GLKUUN&xjBmwg8`o7#Xg2FYV{0@aYNW45am&(yq*fyMsq@HjMmVe1q zcx{**nD2faS9tRo-9Qjr9iRMjKB>|nSAn4baUge#Anzipc=s+#XFH}4HGQ8sy%ac= z$0GMJu86pyh;%Vs(lI#?sf5a}_~n}tI>*edtRkjsh_s>RkdlF0~G;G)ooiP%_3zDj(J)_RrO9aTCsU?kP3OQpy&I8DQ5nW zUd4DrRc>PrcV5*Db8drfPQiDvJh@jD^RHEM%gDt-L*r*+-%WAO~s!xPa`R1DG75C zfkjTTXUQy7R3>0fhNH*tVBV=>B?NKd=Z03;fmTkDrf#QN-MxNYSj-E~^hh~%S zTBDjyuAW+)uXdx_Dz)8evD~VN>uTx8nscLeO4iTb4drTAMKoHi!GDZN-C?JU&%M;pFF&kq1 zx~rXfD_I-E8+w}y8=DJbz}d!innB%B{HL&8HZh=NN<6EQ1-jh1VE^ zGeqsV4SnE;K3G=>7?vS8qaj3gh@6lil>Jt%ssT)x>RpWCdgvHTl_7MKVdba+;-(?e zr6KaCAxhQqdFR^x!e(L70y>c)roIuBfFZWLA;_4-r8GoHHN>wnBDmbBgyJB|jv$&e zBIz<5K{O&`G$t1?ev{ip72gHQ85NruQQPleXB*R08Pj#`;tuV8MKJEiG-mqT#XmG= zp)`=34x#2SX%sU7QtF$0vp3=N+xvF8g{HoP8f#2nyvsXj!ar#&aJh$rw8sK%B1~i| zf@CUsxT>ROA|_zMZEq^!XUY?6iWX}^WpB*aWy-s0BG+Urcxg)WxGyNMFG6IdjAf<* zZK}#y&Z=*wZf~ZcZz>sUrd1pwRct0zY%1NfuM-9->u1D%c_0UEZbWIQ$Y^dtX|7Pb zt)g#kZf|a}sjX?gZ<&3lE^cC7bzqZi_8NL%*<|K0d7w9Gs*iLCuD@X@T{>>UM3!wkQZTFSFJMzcck(?7+QQJ=@bhX;+H7Qfw23#)93 znrzwx44cf)+QV!*tBkuY&nk#)`?^f41#AbP&*WfjhV*TR?a$={&WE$l<fnEq&W@zoQAH%N-(!AnTfrpv8O`^`)H z%TN1_Fxwj>hg*HCT}J!+CiI8Jod@}=M{|dVF#FSNhu12HHzM1!N&Ank%galL>qiH$ zC;MBXs|(8OFAlbl3fDDFwy6RRPj1&Bjnad1JG(37A7gUr`fIlX(v>6MkUh%O={wQQ z_2v}>@--0J0qV&fLgNP0|3=yH9LM4urrHTM&JjP{3VF+k2-%7D@rDNaA7c`o=~kY| z5kumZLgRMB+?mS28OQyWI>(td?FP5`mTt4zXCdI7kYK0+iHm5Q6ASVklfnHD zjeBu-mnty;Uk*UJ+C?TDAlrQ}yL2ygbtMnH=Y6_k#dcN3c2OaAQB`=L7re(6bb`%gz4k!SLwH{^`MS3gFD-YNFw0F7f2Tz z@oetk5f1c>K=#TbezjP7j^=tTQ1BwCdPyU8D0Y91b2u-Fdrh_QN^yAoGxb`wh|uK^6uPv?Yw&H@_)(* ze;Ubty4LsZ7xWqM_Z~EOZ^jN)ar7DS_xT&=GfL&s*6q_e>@$&O(S7w^`}97A>^pPh zJ&XJynB(b+?9;39G2q}kZJ zZL=A*-bg$eXN;dWWFzrp60z@=AY(Ear#ar}M0sp1o!MfvLh7z~BJ;b`?fS`o7?avV zr4yWmsjUCim^4zYfX*{^9c8AQ3q>D{Ww3dq*G{oss^edoQ5%eNQs}j_d7{uy@Khia zJ8gEDN(};{LG!gR?+%1x0`ZY-?`Zc&5?kd{-#Hi#$I+#V*_T(?j@#YDuD*40GM&zs zY19w#7S--8M_Y`A$*pl-uD3bd4e4oZU;RnzM`J?bW1yQr`%8OtzHWRtH6`a=Xy4YT zf4T-3lX@`6st0)phI%O|!TfcZJidW~+~{A%B)%jiZn83E-w1A`yuh!mfY(m$qG-*@ zmTzf#yUzzfg7VxTW6}&{OlDYR{Miq)Yx@sllHSVGB3XI!MK@c^>xC+JDUj!wo~Mek zI3oi34|PGz_t))2SLyFGMJfLnlWyS0N7;c$#~@>Jh>SX~NTAI!ucWMvwj2#)Ofs|# zNW=gBwdzGz)f%=GR+{;`N>>w@_?ZoCoqx`Xd6_z|#YY*sUO3&Zy53*cn0kO;qc4bt z@c3qX;pjT9YY>ub>|2pbctOUbP6vHEZnF+k2O;2{WrQ^9+`jTP!-sXWf~Ui|gTKFtzY+4Lm?!MPYXujE{J8sl%6cNO$)-tahLu;@Jqs&rh|gAsTx zXu_zf*omOi=L8v(v7Gw}Q~dujCR=AZ47=QM6}i8JAm!{0@SGI=_WN#FTHf`&IHVn9 zOqwtWyzMotZMN*Uc6ag~cE0I19QHy0d2jmR9o}!m0H5G@jO@q*^A$3J{0|E{#QgKM zHgPOZKbyV0FSeru1zwuZ{QPcC%CEd{FWP|u?>A$_e2;k`XVPftEDreb`Tn-$e=6C` zze339a{%h3p>y+Yvcx+h>Jmeeb9cij*92j8ki6fz2~ImPyMTd=Nl|K%1=Q()uY7rM zN|wC$QZ=EB6(n!W{}_{s9^J5;h=8B{gold3_yY!D63^YFUu%Dgsgj~4l@5FpsELsG zA;l=r?5DYnk5uc(N2&)Ilg_A7dW8n}lGma~JiR~7`N;8}h6gz655? z@6L5`+4uQGf-l2LiLA**eBVfvaHZ46zgUN;n$nqgGHJ~^15;}{%uwEz!o)di5>xKJ zQL@pD%c0dL4e=FIC;b{V%Roz+1R0YBo}yM|tZ7Z`=xh2SLNO0*|V=3sKxL8%)~f16udN;i;8AUhbA@@l3<=ls+7&9)Vbs^a-4|x zhs#GOHxzSLQp+=)PDbC(6bKMP(*)Aa=Vd3BiZjqE$Kk0K999-F`_ifwL@NIwOD^;F zAeVC(m9IQZF2VjdAxinWXc-AICK2hhQzD}q>l!QVfxdLQd$byjlMAJGuGT6gks4)} zYSlg;XEK2^sR{dQh#9Mi)R{uJkBX5@^ zCTFe1)qq&iGm3t(7&y8$k>RK<5||r2Gl0$opTcNu8vK1XufqE zy*w5t2X<}e;ddOnfWXS1_Wv>_HLqGmw4&^*&^IUb73h~$svaAdx^7~ZTG!S-ubSi3 z|4M6k1wZ(?1M>izSJ}XhEr{;bUhM3%a0%O8rO#&&Yx&@k4m#x)oCfN5tu}V^U$OwV zCf0oKa)BRP!c1NZiCy>K1V4;ah_C)JCQah_?|JAp?2fu#7rXreJh$E^A-dmsi2bai z9DH2KyQ@Yuc=ocYKkH1?yY(GkR%t-SWH9q(LXp7ZT{ZASXREsd*!={xeH2J+9kKQN zp#3tj@Y1>V%8`4fh0`6804Y!M?g@q~)@x%5Dwv63+(<+Qb-7mXjBkkHQgh)LGnplI zYdAIrFND!Mw&5@Pd^R>7opQjSiIMzr7724tvev=L0wJJxc0EZ{J&~Za4I#Bj&=_~1 zS%7(v-${{w7}-U~qmB}Z5-!4-@4!KeG9%!_i)6v~k)TKC;UwmvW#-`yZ6hq^URkXp z9&RI|ZCl}zAZKKne2}1g%_9=Ye*2b(MwCYko=@^giV-VB!m5DbC9fbG2Ym~MT852f zokxKu$`tT>PEVKhJaGP39%gPHRjLu59~pIQe#2jEu(}=mV&m(-c~&z7UqoIMfBL?a@#{o&qK%{qg~C#FU$X4XKdBFOXsFdKeRx_e04Eo`H5vOLeRqw=FwJEJP3AbsxmSpF?2MRe42Pr$IqeI6IPd*XFXRr|<2El8 zLlUMLTB3Q){$90*)Me5(NUl3U&VQO0dO$`BwTJUUE^uiqJ4zwcS13ri%gSg1+q7`O zu}>%2$01%Q=4VW$U#NuiO*za&nYKtg)`-VzpC{i$GO}H#{Iwme<|rrV^pkqB#Hug+I972|!S#cwL0e!$^@^6WQ#>B7EWdqC7o z#6D7x8fjFuE2(`@WmKeNb)e2kVpwY``)DEnPA+%22dhcRlzpI~p8HXFAe;zX)s_M` zATzVNG&5K&($A;V6Zq!iTc|2;MnG9?T!&}Ulmap;UoXrxl+`d)%{4O)%$yHRp)KT` zDYaJ>EX6l{V-BtA4gumv*3w5V#gx=;`!?44s>ORoqs0rg!m$G8N+Y*0e3*66dszIi#dg zvORR0lsX58_SsacMHZ?b#op$nVfL0j%Ei8AMS%xY0kOw^iKVWORNQTc-ZLamh{Zznv-g2Q?*0mOyf=jdNrG;%P*$yYW?!+fiUcO7A`BS zI|Otiwag9exU7k`(Qmz6TD@ZP7ZXK4 zGxuph>e0&yZIM7u5qL=r-fpXLapt43_Gw`)=bm;bZT)0<9VM`wOMuQ3kv32L?C4;- zQ9L!j3?CYy0&)4YGN}AE!sgC*x%joL-}tmG-$uZX^5(r+E z)+YLs&eY5%+YW4$h(0c(q%XGo?)p?k_)AR&-NfSgxbvwa>q%A^b)EBhojv{ZZ2533 zb`*GSUZib#;<*XbxyP!J$wAqefVnw;#lWuZz}NCjWm|*}8@oZ9AwRq6uu2!CN)OzN zE;5Ej+Da1^ySYBHzGD5cCZh3O<2K{d2~OlJW4l_vvX0M+sn5zGH}aJ*>=Ajo)x%t) zGCPx6yS2W(HA?;UwhDfciit&rO#O?E)ALE~ilxZPBXHp5k>Boikj74|@CXs(E-j-8 zi~XK8Ue%-JzVhjMMsmD1OK?QxL(cI4@?pTWo))(YO`Ch3(sEz@0D#$6cQ zJ?G{*D^>SA{iS;4MHdB$x&z!f!;@R;Q&2S+3{!6Yshe}oE0M$2pG#u~hqv98H%i-g zq#fX?+V}<&v;xz?;nk%&GuYEPSh(YJ*xs|W#)+3cc(p^mfa4Os{j!|n>jab30wat{ z<$^WS)$Yk48Z+`!O-ibxOIA%9t)mfZjqyZKY#q=MvY!E=KIcC1+op(guA@inPE zlL)jbSX>SA8v}OIHNsaG)HoJgDhIW?nv&L_+f0YMcxi_lx$aUy^^ ziuJYF5w{#*C8di?!Ir%u#P}@2mbAzx3MhIs;<&2jw`h1kBOiRMSNo_Jiei(30Bt;_ zF&ETJQ&lyIX)saLB3_H|)vJq%I+*U(a~f2KU6Nz%{gH&Zmvq08Le}WTbm1Xykfv*} zX`GdPQkTJ2aUCfg4&=I7ZFqa>K3*<_%VRjz|`@qWo^AqD?m8ccu_& z)3^^Cp{C|KoaX*b(V4%vLa5ob9d(drL^&oX*XU$wg7kC1%S+HN91Fk%N zo^iYcIlEA`1Ql>6n7F&a1Di6soI{v+#tz)o=PcycoIR4BT1a zLg3Oz|NQJ=6hu@?lxL9p^MNaQ>(03O1+(4LWUet*#;Y)xqYKTh?39PbrY!+t^S)Mu zGWvTRAP|MZo3utmg=>kfBdERc^_|eGLWj+NtVRCmsuG5q`|P`-%BxK$I01-8q3(!PeAo%p3FO-VCtUTY9OY z5>736)i-%{2_|Us&ZKH-2TX`igY|VfbacA&4TB&}K3=C8w4^XWWz~j*td42PH*|X zf7Epe@S&vkji0ffZ~C#tw%gNfK@i-$Ic2+mjT4^cxA?p3da)}K^>koLz!QqU^Qq^u zgn!??`>CMw+k2mllmY@g@LFcIQKGd{p*1Y7D`=4K9@HU?B3D8412p;>B-K*=?DYOJ zP{t$%i$!3GVk8m@gZ*mRf)Zb8G(xT3;DKr)9)o!>e)2qnD49Scl}Z2y84gci`Wo$m zi*_jUi_#*fV*AQ=)RS8_54n518AkXfv=dsAo7ZFM@K{NwFjwNBbjX@CEQ?P%DGZxo{hc$V75 zQo!Oex215R)a-%QXwrSbrU*kKc024?0UR^cGNv{CY_zeiEbT0F+h{XS&XdidEwXz% zw%d?*UrS|qXjWS+H|nO$=AhSa_Do^2`0Vg>X`d^a>omjjew?*Ka}R&d8bQ}uYD^m@ zf^RsUI$fbd5LP}}UZnLBjw76fMRBDTC=@}e~Emj&AkLlYKW_Cmiz z#`S$oxEZXu(zYbWHlTlJW|o_^iTi=pPaTB%EVK?Q2%+bL+WT?}kJ7yHSuit%2Sr~7 z6xuNkxsia%ii#g0i?NMw?R?cvkQ(E=srgIIGHN#PAl*?{&t;y#N{;LQjy3|Co+}Nr zI-Mg=uuma4(z0|y&QXvi@HxwWKO3OKW_(yrQix%#MFTl8nwHa3nkPvGT$rJAa^gz} z*E13e$;nh~GGL5l;v8a%^1N5?7^<+?nJ6>La*d9uqL6xxib9w{rhf%=OkHN=`a|YR z2^=zGX4fg@?wV!oiW*zw`4KU-l;Y%~=2fzMA6Zd#%u=*PcAgLBwIep%)YDDZ9+n7w z2~ntI1_xD_jTSCOmr0ZK9`(#5VlY>|E;@gXPFt6%=UIJxxR2SkUZff_doQQ~CG;0$ zx!0Xo9-Ov=)?zgDJs7I0R=hcy+*1YNwS~9*;i0tlkpvjhaBxZi|l5Ut7`KE_F67KG0v?Z~cJU=l>&9qu!H5zQp`Q!dK(7?dAo|=ltPX%CPIxz7I<|9hpgJxqhsY1fXi${_0 zQCp+uS8j;+?i}6=>=HlpA)|M@OwJWG4$scult?%8;96JwPd=k~Y$6r?<8zDnqZ)ja3PpYlyIGPBZx6~fj8M2-*a^1!OigAuP;HE!@uzf#J?0h zTg3-|J4Yaq&LcxO9S#ML-oYxl?Zy>%bo!zShun_E%bGtHZVYY=wSrR(kB7?E-J|=l zpBka2iR#x{11Wkr%p)ET9(N;y39q9$LXUSF|5G*stDC!t-Ag9=EAYoMxVr}%^Pz2w z@ccf?)`K`VI3@NkMPtN7VXop|i6j}%xv0LR3}~-6v4Ips7%=%_Vwo^YY0`)rsHPO$YX#jqq*ew5<(>&+1e zfUq+CC4m}in{dE>^aE9Egyz~gd&o!SlmM2S4SXcJ&D+%Wv~}D&+eLrU=Meftaza2v zuBanGjI!fJE;V*K6(i+X9yvnkF2+T@2CzdRD9xRaU$65`>;$NM^MWM>DO!YyJ4h{Y ztgJdJXYU9`@wGs^)p0ku#Av~aF#&{EwAK_1P%M!mFD;(^dPpQxvR3(JU5FxET)tgs ztyUSippj^shj>A|w(f?~JquRL@3EsfxT?tno)UI$YM~vaJzhuIXhB(Iqn8+nEsJ4N z)8%n2_{B?eF8i^%@FMUopHp+}TToo7E4_);TOZ3Sdx4Xhkt7+9mb8F$cKd`~!C{%! z*IQw?ff({lY8Os;Zcxj(CJ=ku|crf~LBaiE~nj{Dou2 z1z)odQ}6JF#qGr>8%3Bs?040*bK0<&VP6P-3XM&ih)~Y84M%tM^lln7+rHN10a1v{ zOUq z&VWrww{eO^!#*~X>6+EOaWSh0Sj{QgN1g}j?0IfIFTF6j;U#W-AK-@GU;{rxuU(&a z3UA+)a&tccPrsJvf7xxUavy7VJobZWKWsL;M_C7hY0q_7n30RrWD~e4)!-lKX1*Eu z9f?W;@R@J*e(CVex@$$|trq0B>`TkI{b}%Vt@YtmphZwyZxDEEl&x8{<`>|b)^*9n zp&@`H$lN6KcpW_Dvyepe=IzY3NA>X@y_fykp5r%0d2Gf^!uOtgPW5!M<-5Y9h~*fMi-fUg2gG z`IQ~%1IIRsmFdd@vS2jSNzc@CMimTD*!aIJlXA;cwx)z1` zLqEu3`VtmGG)_An&cqS1S&G}z{)AO{sBHQxg9LWIR6F$*M9vg^E9__p#CDjY(UA$+a#@aUlgZqY=2^EcsOedBiNWo)hsMDn6=k5ttEnILo(A zmY&1o%g1O+BUV^|0|BNo0^2Ckjp8!}>!wf$iB26+LLy#N9l1gX)l&k64JtDAt-iAn z?bR&WiY*4(4vB^=p#>`)5c!sloD%nJmTZP~f~1#1_(yP;G{ed*OPn*gaAJ=+*dcxW zi}*NJY66zTEuK^&V~!Y75gL<)e=-kf`QBM7OCI)Lxt7CX0 zHp*cX+3Z2=;?a{KXZz3Nj0{s;L_1c}J77=}HyvoD#$g~g9Et~xvGxX!^hzt2m9~hD zWXExyq?q^1Px$5}-Z47fF(+mdNTq#PGKQKF$sHcyA92bo3{mK8M@gapBnRtLfnN%s z2P;prkkBAH{+D|+pcx6QCOa(i9moRutKSDd?IeuK9u(jx>{}zOWul;2$2Y+?g4UZ+ zddKI3&azX_pP~xIsVbU=L1YG(acsf8H!E#%qjhbFB&8zeI>XxEgEm?>AP>XKVh;u} zlQuffYcod4E5|>m43p&CCPGRi9FjAt!kyM2_0S+1bqD`7FXH)#{-$2aj)Yi@m2qWz zq3xdW$>sO)J$pp>*4KGDxOipv6mk}HRZ#%$ zTbyDgJ0p~W0&^aIbFz}byix(X^0x;w+xg6Q#5MK>NMBdEYD9_QF+M+1YJtVPQ zaoLGmc{nl!pu&REo2tN@i-_m~6LcdrB8Q*}hqPv|x&sF`*FCq15!Z~I5*W)=aGv@sKwoh+H9&K5vukDkP*6=PS{V{04|dVb_>rrTT(2$ z`We>GT3v?}v8dEMx5h4KRsH^QVJQvQ0xpEHuk4eQ4gAYA=7rT04R+k zU?hU_i>dS%?!fLvbE;$$nIaz@G!rg%V<|MtKqIV3F2EKx38AZZoMW%)oWH{?osedT zXva>PH29ZbR~WZ$$O5zo|0X9L~XM6b>jjA*nKf%i;J7IX{!5Xh17M z9Lz5ou5lg|^4yLP&sr9m+AD0Jbo)??B}=5|(B2lTh^KI=dfzEmQ89!#jhdK0Q?h9| zvB=DQ=jpM;^^wEPQn`O@3^W5{?#wt^IQ^dvAaVC;aT4I7BW_J&&YBZi(Gm?jU1grd zP|{ONp55R$ZM-$4D>R%`(gWZoj7XQEds<|CpM!uSPE$20yhvW;xQR+lsdic!)xB~6Mi`+<4saSVYN?>N8T)#F^#(jji6`MFGl-BV8Nf9bt^15K&UI5Ph5WFKgWei3F# zdYK_YbHv5YlBo!V!1Xm+Ktslj!SzUhbINj%v)WksWul^&?U8Y$mH($TZmyNx;}a-0munVvFzYv}OU7zzmanApTGUxx!a{f0= z&hW^He+M~18s~pfoIU~3Y5%LnnV9ll9L|!_{|VvjyUy<0&ux3ot6nM?JpV5O=iUE7 z;9UM+1kV4--fXEK8XXxPsvX|G1NFE5u{UQY=db_8Z~lk9x%<5SZ~W%J+nW#T5C7sf z|39@iLHySLlMiHgs=yLR*5vjE!=lsbj@0D!hog{7XO;%#_i4hgs5jKs7D&Vrn1mz? zI~M*;qChWxA8{@kOQjGV`oR-yF87NIaJp_)NTrY|DAh(iLzXgAAQ_j4BW7x+H+$l?ikH(J5asD3w@jwp0RZlq<2eh6k6WwnXvs1=Xji4V~ zW>K~t9g*2}#u;>_hT4M=Mkt|!m{m9-h5NB)p@S8PRNIFjhA85Q9yO$qN(KSvVT!#8 z=i*B+CMV-^GuCLMay$hF-E-2>@E2tbriFrA-qm1V6XUhe-&wH?sUH)7G2upoOAIoI zSW9I2!jXTW7bRF{>7gE4Pf@}_gM&l`W)VcZ_0^IW#))Bu8rEs&opj`XU^23fOqbB;1@wO zw&A3YuK4MRr|#3`m}~C(>#SQYJM1g-{dwOV-md#YH-}wwxI2-Hy6Q3zZ~XDd=hQmw zu`}=d?9fLKA?VcGj(hdHW3PSn#Oao8;id;a{P@Y2pE$IFq_6(^>O=WF<;%z4y!7-l zUvBpJ=l{FjU!yC2_rfFJ;si*(W+mkm2TaAq-dDf*F|dITj8n_*cRlM>(03Qa;P&(< zy3&2me*`RE2+c=8XsOL83ydHHSE#}kHj9EAjG+g^N5dIv5PUYg+W$bv!x8#$d?q|$ z3jg6pMESXpg-BH41pBwd8_KYTP>iA!VVFZ31@MPhB%u~@6hs78DurSJRn+)}CAuxk zfk`yt5sUblCT7rrPkf^j=SasY+Hs0K%%UE*cm(rxF_MS2hHizV5HEOpnxP6$Y4+*S|Swuw4oIl zYSm)E)NLMhQA+KmD6fY@i-yyx-*l!I0lCVv7>kusVW&HRzy*@tXP$JpPgPKghathB z0|XP3umt3o6YOiC_<^QQ_gXNQDAWN30000OFa?qTz_8USzypx#zZeC80Wf?30!Y%+ z#Qrn@j72H{qUzYn64j@D`_>Mtih{#Vbc?0DD&jDzS{$(!m2%o>AY)01i~nuGmMDdU z8(eD43KXF$c}3V*Fm|w+)*vdpHBYb1^Pk@8m9IE07*pCLx#8dd0R%Yi6c8`~#MPUee~`j*xw_0<7Z2fWAE z`s4`*7AHBOGejax(llowON7<>TfyeR;UFOpykC{ z83BuB0CwrDoIAT$%1zEm10Im$1YqR9GSG696%bw-@R^jYjr3{_OzBEnI&}zk!s=ox z#0MAj!WFi#3uh7q0|c7X<25V=sytcnI(o7l(Qr_SYy%HmISPng$#@gsUOg+cy)sZT zpCoGoB3B>=4;Zfnra)v5$N;`EAi!cZY}mq@*$EcdY_K;w1z)Qm0IMeQQw@7;VLv;* z0$A*gMFIdc+qwWDC~c4rz|UC{Nfl-aHcoTaRlSZIjT4X$Wt+Lj&2~-DE}9=%BPEJ2Y8mUsb;ZE zaBu(z*xMs`?$Ev~ZU8f&y2K|stjtS%?3f@~1`U99siUlPf)8K|rQKV$e{EQoSLCos z2MMr!;(+=RfC4iRdc_q$VgQ8q05C8th)qoOsdEI{=e2>aE32G+7huLI&^Abher~tR zU-D)?3ncDrZ&z6AlOttdjPKAe4qyq`WaZ6_q zVUrzvcmts5rvLTY1&jO{_#N)fF126-+!M@(o%TcJNdE(d4|UVBKClW!@eB|U3&gws zCyS5&<2B8$`O6={SjaTx_iy?B?{p>%P;mlw0p2Bil%-HQMtHhLd-vvj=XQWNFkY%B zba-c7GBGbOjh*VV8rkpaAp-UsK0-8-`f|_h%S6I>aY#_#YH~-OLH~@pE7kB;@hjn*i8<+wK_lIpK zbm7%(6!!q9wuGeUgpl`yrg&-jw~A2c0$WunR9Jbk7>h$Nd8DQS*=7KG7660@0=q_J zi^X>7rW~mUSdit5B^X}^C;$x51O+gGE|>tK$cZ9!fo~Xr2>@8yW?BIVSd*n;7{GpJ zS89w_Y778aBo=tt7+A#@1=#ffy0>puHjM%n0PSZ41<(Y=GXU)uc;|R)xh4Sd^??jP zWDWpWKG=N<;BtcnSXtPIW|nN}D0ZTlY!9Gmpty9UxRIzxgQ;j~tQe9aNq-#Y85?ye zpB9BuNQ=}p6tjp>w}@*GFnSfyQ$0liKL6NMHKB|LSOMH;lP_lhhxT&Ca{&*~jyow} zg{4qDX&+rE13U==N7++GsZcclc2Q7Y6)=_b7YjoP5uTiD=mqH)sTW z5(|rUmO7x5YdHh=6$5T*gdnnujNcrCC)Fs4kH9nyE=V zr#W+|xti`Wo4ENiiy4Husc{ET0R;Au!U>tf`FJCVe@+mRk=cr`xFaZ8Cz8Q5Y4u>k zC7PIdoti_83D%q38JpfILf!eDu>UEZI`JwSipCO8zBHD43sWvF-Qf0v<|5O+*1y2P^F(=?1)!7v?#VLFtQ&6#6 zebFB)^%jtD9x95R2U?_1)1Yg#ojxI<7pk2aT8dBFp?t)o9@;bV38Gj!q9l5yCEBIN z`2_fh8T#oLvl1$^vIIT~A1*)_jWJAGv8FC5pl?c3`(h?yp(ZGB7&OHxjiD<0qM#5; zq=6baRBEBB*`$bCn^C%`jQ{GSBvh!V^&3BvgH`I7TFRx4=cV=urke_x$Em4Tz?_xo zl5|=hJbFtd;7UV5EN;3T39_nrQc`NF6;042HtI@c)myGKQwBPy4(h9+`K!)?q&byf z6L*D*s;Ecj69^!f$0`61d2qbfc{^BS(JElc+Nj#P$dj$tbeqc3UdrbaRarBW=26sNUh zS9e0J!3wN``mho!8bG;%8fltvnR#_Ld?|JXUMYY#mz9F&VM6(OkYb4&%B_&9vWZHT zESsC&s$!*PaM_AH*c8sYL6g`8levI#5fH7)>xA ziZLsDT1a{UsEe^%X@x6p@Ersj866{1vjR&~zy)iu1%UcG4jZu%WUM(0gPJyH2#|$v zdy%VI0QcAcfK`HM`E~GClLk<93I%;CX0B1N0E0z<7hq;6SQ8J>xa`MtdRb=`k#9aB zgoB4&?I}V@_qaMRXbaF}wijr6Ib=>Sdy*x(W)_4GX$1LZxD0@Tkfmpx2V^-%e~K%q z5qYzcTN5nCUKe$)z#F{k>a#z~iacwy$eX-j3It<1H%~zX4fiE2@TxC>QdRLU)`_om zVZ9~uyvNlfyZ`jOuR68>L%nJ{u@9QQn<=c72L&59h;6Hp1ebN|W&_togS6%Z1aN(1 z=mg8E0|_9mZfk`E(4G&cgR@4B0_FgZ%Z%*ha)ftnY-ej<;BC^jn!K5Jr^jNm_XNE7 z1sbM^nh0={m17uTWo$VBDJEHTJA{RJg|IeQbV+>1H(90DeuNhQDaK+DEO@c709O!o zGmNc0Tg1c*pF_K)MXSU~+{8=F#81qMNsFTF3u=6kCpcxW5WB_a>#LC&ahWE+QGj4$ z{F|EQ28Z>&zhQc%O#sZ+1%V)y~z>s5% zZ3FPWOaBSLE;o1o`-~TRZG5YE zg@xs|W7tO(7oSFa#ImfVPOQ8ldCR!`1oGOPma;Nj{L59`#iGV>gh$3{tYNil06KW`zbF&n_pBHd)F<{m`*I*TXxXM{C!2 zZP9w2*BH&$PyN?d(9t0+*n=&xXI*M;K*lVFU?2d>o5uiIFvg8dg9zx;ng(7aEradZ zZ#}nhsn$~gXqwz;x%iltMt#rs+W?R?$H!b`^eg~0$uut0Bn5E zOZTiT?8D0!?Bq9azY>%00aR!FY%SK-ztD)Tv!wW`|@%owFKlk!O8nES85>{e_d| z#{yjeR4s(aU24z`e7zgoN08Z@++M~V!wX;m*ad?|=EtqaVg>mGd3TfqfZ-o2<1il4 z-i_qsz2xRy-hjP|VNl-AWD1nh308jPSKeUm4c{Q0wnrMwUB2aGxrK05zTRkzU!C%>zBIS+&%1>UhJD*>f-(BP_FDE*|114av>LT zCim*BUhP~S=C1DRvyAH~#(9x-Rb8j_I0i?8lz&%#Q4%&g`eIHd=1&*uLuX zuIkk8>Ty!$$xiI$-tYeY@8b^e=Fac?j_w72@ahig?Y{5|-|+0-n<6hm_q3~&?{9|7;d2pn%$bYLHhKmjm70aAYgQxEkF%LSF-U`?R( zCO_u*uJYIZ@i!0i$4mA#Kl5iF>uAqfY5($LkMlo|%RPVBaqshUzw>v`@b8WZBj*62 zVDz4;2oWF!6p;0TZx=%_2VTht_E8D3zz2Du2wr(4Fn|e^|Mm3VLYN=+V2|zcZT6tw z_M$)fYft)aZ}4xg^QvF>tDpDmzVxbo6rsQX&QS$|zzTqm8GOJ9p5O`g!3R)J@(6MQ zN`Lr8pz$P60bCCQo&ft@AE;>?{Tj3RA8+QV|MsD8^VgsK-2dPGYXAMeZ=Pv0^dG)$7+RLc@+FJGAUsuwl}o zRm;}x+qH1p${h={WGcLPO)~7A)S*wRW(~!xR@kv+Z)IBBHvjFUw}tBF-P<>A;K6671x`0^ zQsc?RDxZ72IrHapHLfPv*LvT-82RvFB#;ONMul565y-uRqVO-gET%A-;y_03L8qpE zdVc-;_*v5zo!@`|iG~w!KmvCw@IV9;T+TV@7<{ck2cwe^!U-#^a5~Pe(=a>IIN%S% zi}V9gL=x@$??V$)M6tyET3qQt7!{OpMjC6hQK<-X{3*JiD%?>=3W2mRNa;vBMMLX2 z9FavP0X$K~6`hpwNh+tblBXME%yLUEyTnmQFvHYxNFvKLbFMNZT#~v$+H~_xH@&#B zN*9}?6UsaDoKsIa$Mn-nKm!#Nt}oAAP|QEcH2*X?McYa=jCGu3p{ zOF5+>QBXq_bx=|ZHI-0APhB+CRU38n)k$NOHPSRKwbRp1Ikgl|UU&7?L?K2Mc35JI zHTGC!RW(!DR-26xR%fB5byjMrt@PG9*Sz*uZgKTC*Ka>d77S*|HCNejOD*@@bPt6# z+IQoX_pE8Ft=Har@qKjLla55vFL1N%HQ;awHn`yY+ErI!h8td%Rbl6S7DkET%~xNH zFV>jW4*k7Ol~X`ga^P+cHW}fQQ_jgXhuK9JN0(!kd0m=oo*7=8E7p1EjCW~V27+Fh!Dtp7S^ta;Y@XRf;jnhmw4t>He9H8jN(yg1xq zi&*3Y2?`Pf*6EBbBvLx*l1bJ(?~YiWx~r)F4qWiTv-as#tG8DCYp)x3{Bf`&5Bk2L z`!WNQv;m7{jzKCD0wlu}p@5}I$1Z}1N@Afy5&7=kTW;9-j(v7)TO<7T!gI%ccis&* zcX8ku7anrrB{%-~G?72v^bAueJFh_m0eGUon22LwJC<^+wY9tJhI#Dc(p5ngbQ=hP>n5@u0$ zThw9~N#eJ;%utLl3?mt1I7T$4QH?cZV;g;l!yNulj&G#n0quB4Jo0dX*ePO?05iH5 zBvCvOQA`a|SG^{DkTTN|L_<>Ix!OgNc9WE3CB2v@8m@4So8)9C@ApYJh7y3ItRo!b zSjs%65|us#V(cmx3Rd`$dgb#(VFrQ-!_Ywz18E2&=HLkmNX8+KTu5Ogk-AG#GMUSa z5;K(<6ELp9lhUMSHK%z^GyjS*liSoLDGPYYRn9S-tQ03XRe4Ty?(tulLy3n(vILP- z;GNoH-U*#)NiN>=KiuSJKV{`lfLarq10`rc4cbj_g0r0CTqr{uicW||^qlpyOXW6X zPkrL^nYzj-(!db8f*w?)0u3oP5t>kxnlhy;b*MQd`cjz2G>`n+PsomhHk{h@6h-4G z3NhN#j-Du*atH%aM|xC}CRM2)MJiK^iZ6ct%%m)(sx@1B)rVqLrd#DIS1CHXpw=#* zVFhYg`_xpYE>*2)P3u$JYE-wz^{o2uUX}*OS}5lu8visf+cHV4eP79 z$~CcYUF=#N%T}l=RR6Mhy(?b#dRf5sHM5(&;~V1OSu|! zz6n>#Hny=+)fi(VJKM?TR=1etZErdI+dPK$v~d_NaqD2*;d)lIrTywk)_KIAvNovt zq^>@Xhg-$Q_PVw;9(F;BK<>&FyxFbnZhd=R^!jyUy zwEXV3za#c9fDK#61f$ry1Wd8xRt#Yn$5_S_rZI&rd}AEvxWYH4FNX6F+Fn`oIwCHy ziH+RaEJESHD*tZrjGg>sC`Y-*fZefY%ZsjZqdDy8 z4d-FGk>;`;rX*xp4q*`}upT99aE7sQfeV7r-kFKO1vh{i23(+ns#8+PCFnuUbS`qO z{~H?P{aM#+`13h;&FiinTG+!*bg_-iXk^3J%acBBvz<+8N&8sZZKg?n_3M&N*T4fdtz>aXeiG6Pg+xyu2*0G0ioMGek zc-f_mHvfm0{pe>CJlfF?a)_}l>utke+(Z}z4Zh6;PiMOblqHSJje;*g%3SW57J=}AkCp_T@XRZiUWbH9uVAX&S zHwa)*@j_;t(@WsEK_;GVG=GlWA}9H~`_n6PiKVFqv9&?z#6zywQUdmBkbGX}F z?iVJy&!MewFMC+IcISD}{Vw!{U)tdd(YVx2Fz$sNhaU8zhv?_yo@`|AJjXcad6xmt_rJ%!@3N=8-Kkxj!MmghqJBXI zK>uEZR8N7;df@%(h@fWOTcP;2ru^lh6m}^w0h(k-w&{&W`q7^r`(-b^_EG=+fBQJ^ zuOIrt^HPIrc+81N5;wNWcl4z}Cxy+mi{TgTJn8KKi>7=?g)<5kc0tznP;x>+?VG zqcRm_!4>?!7d*h9W5Bx8G8-hoNQ=N5WI!E+zz6)nXsf^klr#_gKxZ<(BP2olP(mhb zLKSgBC>$6iGeIh>LMyyNEX+bJY{4yzK`&gvom;>h1Uee@J029n41+x$^g%WZI{zVj z!y$x243s}3Y_~d$!Xm`OC_F(v>_R{M!an@NKomqm97IC|LL5WH2dqH@6hk*`Lr9E7 z2(&;7+ygii!avA^KA6BfyhBe+LOpy!_c=sTEX6`RMN~{hKs3egW4}aHMDsI41!TiD zltf$Xxl63XT+~Ef+ymL`gI@H-4E#i5tP@Z?#$^gcJcI%`IId=7#T|P_RfNV>q(*DJ zMr?#dZH&EIl*DelMIDqwh08^93`Sr)M_)`wb>ziN)WizhM0lJ)ON7TvEXMkq31vh^ zdkl?ytV2nA#%2u2IuJ;L97ux{NIsOtY+Oi&Y)FT6#chnh8H~k9{6=uRNdNT{LUUY4 zj?6@lWJi#EM|T8CbmYj5oWp(W$9q)Cl+;JCVo4~JMwvWFgQUHJL`Y|>Nr24BhwMq8 z{JWow$Q{E-1SHB^EJvgy$&wt&j||CqEJ>(*N?-g)k3>g$yh^M@$(Gzou7t_`@JdlM zMkvSwg_Op1yh&d)%Q{HMXdFtnq)D_?OQC$rHmoqCyvw=lLA>0{U#!HFG|8wGNvizI zz?4eCWJj#5%EVmEk{rgaTuHFByvPj8$*j!QNJq0Q$esg)TZ~K2bT769I=SRa&@4^T zJWaYpP1Qs{z--NQY)5!>N~gp`cPz|v98B9}OvThq-b6>oe9V-wO#k5=&L#Xx;#9`5 zl*!f%NX*;=g#1j_bj{T?O-W46>AX(tj85%zP27x1>4eIrw94BYPsG$srtD4hBv0VH zl;fn#_FPXSj8FO8!+&f}f;>ytd`9WaPX46M(=^Hc`{x z@$7>@=mYn3NyvOp3oXtGz0mp8P~$_;zuZXuv`Ob2(GYFTwcJhu1yKG}(a=266b;Z1 zebEF}P{XXz+%!-e4NM2!Q65dt2>nqAh0qNJ7Y;2_3^ffSP0}GW(;x*>Gd8rmBz03cbyAfa z%PhT956x3N-BT3hQ$3Bn7xhj-t^-_3kSciRBRlV1DmDq`;SpR&r*o!UGi^bP^0$6|jSda}_ zkB!p{MOcD0S(Hs#b46K$ZP|sjQiN66lVw;_jo5arSd7hCo!wcU?b(g}S)kR|D%jL- z-Pe&7*`rO`q76YmK-fmugQtDkla<<xKTgL64W?Zm=3*f>Vlf`$3?}0XHs423;{Op|;wElmCjQZ=4TLzJV>zy4I*wy3rs6!- zV?OR)E&k#^?qV|rV=zABK{jMWMq@=*WH)Z)%6wu-c4SG8WJ<1NC+yy*-D6G8;s`wi z9rk2U4rNi!*G~>)LOx|w9%WTtWkEjVM0Vv@j^#&KJ~n1jUgcz7W@c_?WH#kgj%H&XW>}VGYrbY&rsZtbW<`#KMDS*C{^r|V z<6ZV;bADvInPzofXLfF9cYbGQ?qqp}XC9{KcTV3{u4aA4=56NYeir9#4rhQKXj~TP zzCCA4MregzXv?%`hkoc_W@d<4G+C za878IW@wgfX>wLVi;iiT_TrhY=~P}{LB?o(*6AVcX^;MCpbl!GCTWm9>7qtyq`u{( zR%(=XX{SbFiHPccl|4ri@?>8IAiy1weX-fO+)YrpPm<%?3u>tj7ICV-fYfp>$(2yxCU*}o@=}Q>#jC!)CO$TPVLoh?Z7^5*#7G- zm~7gvZJf4j+|F&=)@{p{Z2#W=ZQkB(;T~?{wr%4sZVbj{pXO$=*6hxHZs;Cu>7H)t z2JO3MZR~dK?AGq>=5FtXg5XAO@g8sTE^qTbZ}h(9;`Zp|X6)#GZ}^Vy(5`O!u5Y4 zaWMaKF%R=G_iG;4asM<=b0SyoSzdECH*z>nayg%KF5mJMhjKipay_^6J+E><=W{?; z@j(CcGRJELFLXptbVXnE?zZtWe{@KXbX!*QH?MRzH*RotgiPObZ!U5=|8!8Vb5ZYe zQZMyESMe(!^(jyFQx|ks|8rQ6by+`gMz3{Szx6}UbzFaKUMFy0mvmqcc40?zPA~RQ z=WtM$a#aUsJzsWHfA(gF_EwknX`gj#zjkcTc398HUEe)#*L863c5(l9a_@C>FL!i5 z_jF%(btiX6A9i@ha8390d2e%jm-l)%_DPuc5@&XOKlZm)_GlmYelK``cXlpEcxos3 zh1Yh6e|U(Gc>jr?cy=H6cE9+F$9Rp;_>J#)j`w(w|9FuP`Jn~veE;y1-*%fdzt6=u`l~bK>L?>d6s{9pI7*ncYC;R z`<E?|HpDj+e2ZuNtbcsR*Lum1e9E8v za-VIv&--OJ`^>ldxbOU&_k7I{{n5w!y$5>KPyK2SeAaLM!+(9)kA2yn{n)R3$iIEu z&wbtBegDW8{nEdA(D!}Qk9*Glebqnx<4=C&cl}ondfI<}=--6spML5eeB0-J?9YDf z-+tW(`r%)G@DG3SAAe1l_3}S|qDOz`pY`f*fA@cX_~!&rkbnB0e@?J`?$3Yy-+%rG z2rB{y5-e!Y;G~2K7cy+<@FB#A5+_ouXz?P(ik3EVq}cHz$dDpOlH63%B+8DQR&r#S z(k0B6FJscIY4aw|oH}EITG{ibPoP149xQ6~DAJ@#mojbY^eNP+Ql~o2X!R=AtXf5C zD%sF0*sx;9&Ma&8tjwKi*RpLZbST`oZ-LIG3)gNFs(SbG?d$ii7r=r82kvV4@Iu6j z8~-j&-1y<+tz;)tt{f8W<+PYLyY1|mZQamv?UKG*`ZVg)stL0m?D{qA*s@_;j$He; z;?22V9!}Yt^Y7qdffN61{P^hP%9E>Z?)*9Q=s$n9o^8GQb?n)<3&uTJc=7P!$CEFQ z{5<;Q($}+ZPg>M;Q1Io)pKt#@{`~s$Yv87Fj`YW)g3Og*Zr$lKimB-%s=c=p%@#?J6N;|EgyIOngt=aY(EVtcuSS+~7 zhAS?)$SP~@x#+69Zn@|(+bovU$~!N;^*+T#UfAlpFQuLOxb3Ij3XJEt1slw6x(F-0 zFvI3LoQkm!KWwhV6;m8B#uj6oml!c>*(|gn+dFc#{O-#s%Aee)^1mz({Qt7A2g^Kj zyEP}=FwPTeobk>)``q)-Jadc&jIDm0CCMu)o%GU8JN-1%Q5Qw#n=Y?xb;?c#3^UhD z(){(QIg1@M&}5r!w#8|yy*ArzqwV%7Q5{_c)OB}!w{~{xebC-`Gu5}>fCnz}yh>sX z;^F!wzIfL#gZ=o;W7`}#<&wXBIp%O{zB%WA6J!Qbf_pBy)TNVddSHqh-gx7XyZ*Z6 zv1iUX?X}x}JMNp0J~-;UyXO1py@R!yWSQgAP<741p-b9}Y2yd|Oc(dbmF&GO>wH zd?FO1s6-=Dv545IA`!88Iw^9oi(dR97{kcKE0WQQX3QcA&!|Q;0;UUMd?Os=D91U1 zagCvSpdHz$MHtetkAD0kAOnfPGVbw+h0G%&^%xsB3bK)od?X~jc*sPykdgtiBq1ls znn-f8lb-yf2s5ckOpcP2cuZgtL8;1Bva*$?ETtjS2+LW%6918{yd^Gk8AwIavX`ec zlrDoQ%wcxXm&U9mFJVc{WiqpwH%#U+qlwHyIzz@Wt zoaL;9Cq^M6{nZd->EwesVCom{PBP!7eD1x2^ zn+Z~r(zK>Fg(ym&c~O_vlc%(dDNtV_%$eS_s74)VPBYkvOOT?etaxeweJa(KPW6se z4C*Qck%>^aLa1IH;8(*c*0GXRfMxZcDMFD6Ok4sHnE%)zQI9Iun5@w{s}Z&1!Q zK%uWgpj&{9_A#pVG@nt!sw%sng~cwG4sPu#WX~$u$$HfkrsxDi5g`acq+zi^_$+91 z5L(d&fevt;D{AS=LAZOW3MH4Y8nP zEOI-mSj8eD6Or}mbD`@B%Vr`In-v5dVlmq7a<{vr{cdSbo7(Y`w5}IyEo)_~-t_`k zy}fNOd)X`8;S$$x#{Fb+8N1y4HkJ;`^)7$|EMV}4*0ef|D|r(PQ1e<4y?Bi;d?O6u z2~U{578V{jqf6OG{+GYV{qTT8EaCwhIEM&UF#mZOOhE_VmBJEs@rz^Zs`~zNzJc3k zAfv0{9qYKqKHjh#J-lBJkGRN2F0gn}jA9iVkj3$YF_fb$;|o){bYUdxkF%`hE%W%1 zLLM@Rk1Xa9ml%g9Rx)atTtFwAQ_60Zag6bWNhqlIuQjf6EH?>4>GHYHedaQt11;zs z2U5s}9y5Uv&D}EJ@XTnItC|VO=5oHd(r#wq5H_Ic3TXOhoaXdvKYgMisEE{rk~6AP zO++CG5655~G^}GS>nx+fvP-S*X4CM4UGJI{g5)ol!>s6GcbCyNbo8T*8tDN}Iu@3G zHjK%T=hM+y)SwQv1~v`qZFid6-rh6}!vB5h(vf=9qGYL63Bt%%&$`|2hO8=7(NtUu zA{M&lwGZ-*Z+-Ki-~8_NuY*lw&k{S)iZ*r)k)3SSZm`+Vet4Ws+3ksU8ru}N_{G1S z@lJ=E)#DzTszV;5a*JE!qcq^VQy$q`tMw9_wYPTpjRb$wT;?|4_s#ds)k1gp&;&2I z!NrX587h3?HC?s<9S-rOw-?h`vi8O?e(|SsTk27#y0$B>>A#lTETZL)uUbnod~$k zg&p+1lR3$PhxBSEjd;XMd(MxieB^^4b>L?m>cTex=EE-bi~7&(m$*bZsUUj0qkiV8 z?*a9*-+JwDfAx3=WbA*=ciJQR?<5q(?bDolHt!zJ?vL#&7k_;DYkmI2AAaPM?@-PA zlz;VJ`}A?&^|7An{aXPJAOR+z0Gi&;fnU$**T9kAu$kWo1z!4v6yX7o;k_RRcA$JI z9{$PS{n;N0j^M`WU*=&LECiqewxA0lAog|N3of7mzFyvi-}p)3>;V`BijW0fAX2TL zleHhyIbGG6pa_;=2reP;asM0gJz>{P+r01(9n7E=UZD(PAr^k$A066$?OhJ)V3GA; z2>l=s22=+A&ju2q2Le~`A&L;tpT<#~3C^J%l3)^wn*OyK|F9qp!e9*kp%!LgAQqwm z+MokQpzQ6SnC;-~<$xgAo>8TO0~lQz`p+7&VWqvHCFP+K3ZEQiNgakF6e1u0otvUi zp&qda;bCsGnAI{)Jmdg3Q?911QUDk3BQKmj&xBSFTZL2BbH_7M(-p}{pIfjMM= zJ>)rhkSCy4|6oEpD%m@(U_5H#vl$^ij^Yv0;R!OM)#)LMm?E?U>cGBsW$i zOj;$|B_tiyHYXMonv~h{Y#>%_n1Cs7(!}ZL%d1x~2K}rjH6JZ<1t6?w<-yrHZoX zilV2BUjJEPMxcbw=#z#Rg=Ub2+UQATXnJiZ2VSO#W~PVgBU28kaAFaH9%+)Ms7o$s z7-@laab=7S+mlWy234t*5)_WIpO!`&k4mBM1nDwjHDkJeFtSTzAzM`yp5v|&4 zr9LOFQqU&sDz;i;r?!}m9^-aurd$eXsg@+Mj%bOJr%RP7qb}>KTII8LQM690v@Yg> z)&D7m)+V0*YQz~TA?fCaj;oiF;CLddx}s^jHY<|8D;LGK7jY(zdR2Xz7_*z8<&!CNhn zUF|H!er@7uY`_vNz|P^^q$IkYXwt$U$}+91IxQ4It<*xP%yto3&Spg6t=>wkB2;V* zVJFYRUw?uuxEi0Zf-9Z1VA|iSlXPtgYkDZsYb_TN8P z0z384=<@8ydP(7yEi^JOfvPIOwkqw`F7?*j?KaV3QLZ9FXv2o(AFW97KGE@#E`N4t z^CE8Q3N2=`uHr_ovQ97jKCb+h-t{t3?(Xi~X6`VJ@2@8B87=R3b}7Ju8*sYrTN)PQ zR`2}A?*iAa5-sF7c5i%&Kn_r_{t6TSk}s6`FSW%b0GBJr-eXf5uz5=F0yD4z52OS4 z(EU0m1;20w$1n`f@OE8rFlBI_1}k_PZaz*Okb11Sjxg*VaNo!-3ZL*1%m3X9^U&l< z>h@A9c){=l%didW5)NxA2V2q5dS?g&>GHC#$foT|@ed0mu^BJz67Nv40zm|LL^}XwXJuDUz_P7;y@p@k^$$4l!&T2f-pQ^5xPn9pjQ6 zYw*6F&<6`J&~EI<25}%GYqA2l02Ame4>917vB`$AU)}&I{fs{j>&A!XOm2T04Oato0mFLim2s^HG{p`<6@R@efn=RqM4>Ct>0S=Uu-LOv^M^ ztFThj(ItrE6YsQ6FLO`7u@Gbe=yp*lKms19H4b353}`lHfByj?XhIzE70*6P6-D(X zpXyZOG7v*_FAa8KzqY?wG)*qH8#gv%ixwhGb{B2JBDeu(|Mq4FH*n8EBgC~7sTvlm zK}MPOEjPDncc~ELGi*=y4k$4snL=ODwr!7flnR1w?=~O+w{T~+c$2qzk2fGBwQ-LT z8Id##khV*qwhue^Jo9y`;&Dc~HepjY>V35iaTZ2PZ4__!XRS9Bg#s9q_joV(c`LXM zX!ar;b`J>-`Qp~=rjRYux7nul;R14W2R0E8#3%Fjeh;93t1(V*>ySxVE%(lmB=&%3yUTtb_|vC}gxbN2v(V zK_tGBCir%ZXStR$coYnRfzJ?r2TrSC0H`W=Rr&ajr+Iy&WL94|i1)GympGCy`3ju) zgdektud*{&xg3ReX2-ymbGeKUI*kLuDNMLMeqfk`rr`MNH9t2=uJ+dH@|&NKe$Tm* zCwZp(n=m)IBRzRJ(`}+5LMrrb6iq^)3p$~%I;)fSCwRIHIh|c2t3d4apZ@C}IG{Ipv;VoOKYObW`XsP7p271q+qbQ2I~ce5 zEM0n6%lW2{JFwR|E-4nlftPlzm8pZ#l{@>i$NxLD%R84xIIPFIjdgHyH(^zGctaC8 zC*QL#fxEB&y20;2r{fZKYXNDAKo@*2ClLa(!#llKe1lH`9vr&0hqy{vbzj@Jwht>y zKX0X%yoeKgxEFj&%JwSd_Lm1zC`^2`Tl~xi_p^V2dT;!-yLor!`p1*&N`nlqqYlc8 zyV0ATu!FP!r8UiScGKHD#m_sA=Xk!KPBqK(qpSI@6KSur=)spei6^|$JJBY@!qZDT z&7*zP2lpP_yAAC;>7aSY2DvC=y>qiPR(t!m$GOTIa?+1I|46*r&$|i~KH=B=+9$r+ zgMr375!?^a&t|>I1H9eSJ;`e`Di!_Llm9#CgZ<`{``;^l%qza(lYZI{KD_6=<3BzS z$$c*W``k-@<>@`gyR_!_edl+6=!5hoFn#Hx{_jIQ;iG;C3_tM?|I|Mb>kAP8JG95w zeLPP(YyTAAd;aHJf9_+y_Gf>81HKbM!Wceb7k}`lK;kcg>O;};1J2~jzSi3_ zrAKu2U%&ms_U?PXP-}Mi14IZM0%NEcco1Pif(jYBS#)X@EQu2-RSCG{;t)(U+e(6}l9u zX$?(LA9bC&wbIu+IY^BP8h7a2qPxna``h>1;KPLjH?Gz$W#!A6H+TNmk((%usV}yE zUB;J2sU$yleigG+65)Yt-ir0S?$PT>JBUO}sb&0~}Dm z0tq~htmM2~kiiBW#48j$ro)ax#}0xdvhE(FtR*1G!!NTB_ZzW45;>!RzS&Y#QMMK9 zbMHR-Y*Vkq8ddraK?8Nn@&CXb+fs1DAelP_5-_H#BNT{)Y_60+CaliFC>PsK!z!2D zOC=9w3lYRFt1vM=8*Ri)wfM|@u|=cGeDNoqrg{@9F~Ov<3mkjo(MLS*%#$r3uly4) zQz((nF)$i2#Y#Z?BGO1GrGye8Hy+_GQAPP`uY@hR+_Z)9#1oOuIpy?hBr?%F)kQW{ zWf8woUBxO5JN4vq)>>)x(^5rG5$s9E7#m~~N^=D)6hL~tZXrAz5q4O>HmO5Poid$P zQ);cfmON2k4Yjjq*ZdZzR8vz^+}BzS6Wwh&suLEkXx$UucWpfm*Jd{i#mR$WK`bGD z2_hs(d;cD_JaAsk+C;D`3vt!$~&5mu`PCB-2vt!$~zSy>t4m;nZ z_MTl+r_P?5n>jb9YTd1>RkiNkdfw;%`=3Ok!kC<~jarkBt}NMhsBvyTM$NmbVQcX> z9mXGaV;`ok;S=wq9P4@Qv|Q+ANXz{7Tr@DS(}zw{G}L!h3Ra=Aj0^D4Z#KNp%)qva zO08YtvtvDpKcX9WZr>`Yh||<|aq!`}_-UrrVOFp8_x`xB&;=D-(#9Xqz)kgQ@v1v2 zH;yP|KThYyw@N4Lw&Y)JyVdt$o4e^x9pal~`K()~%~mg>k8J}vWi47akfu~Be_cP@ zPK2$2uTGf>N6d2mep2@u38>$5yHRWA>sULpW;=x<$J*Wd$0CK_eO4h3?{y+nkrp#l zey##V1fTruuHFwhx^zIT&PVfkvRZFLqJD{iAn203wBWq&GzfSE8O~`vGt* zG&;0eT>;H4X8@pD6ZrPnxa<@J;j$tkYiZE z@opVGhgh;;ovip|%*nXgcZpHruzaJ@!3(1ht(i&0oHNkN+cRj>?#zGni=N+Eb{u&H z#Dk%mVB>Jt{6s`aQUX4zz9~JIab!8^iKm$01(QZJdflOgE9s+SJV>f!B}G-(?qK~* z7!=V)jPg_6BC(p_d=f`Z=gHZ4^~4dA(^pQG*ecNiN9ofzX|S*&J!bi_E~i%3NaR_t z$n1d`#o*nLw!XDPI+Zasz+C7akvvB};hATMn5@o;EKEluITMLooieL>%$GaSAz;3c z3#v2BUIX1A@#PZM_GHf8W`^b*TJ3X5LdD&&$lwa82%ArL)RZBu7_E<9{M$8{_R*?N z1)H|m0B|BzGcq5F=<43Zw(HscCd-rcFgZ;naow?$D-nq7(PdRD zBAk)n4_hFurw5e%<*l6lN7adf{ScS1lhg!pnWVvYU(s)4Ikz(~L33G+w8G_AA`M0j z8d`jkorwpzVVp{EC+N|W?xIqDrFk?)_@#ukxk1ENhlw)~}WI*nMH zKx+-fGiEdq?Q$l7z05T8T*EkVb;wu@%_V@sP+I4E$HVA%{=cOHUmn@fUUk+)J8Lqt zWcD%b*2WA70(_LxjhG0Qs6h5>N5#xm;a7LdaG?le=?&ddX17+CR67gXRq!ouMs>uN zOIUEH$R3h560rjdr$}1eMG@nyy-*yGcvzj6IOfjO+#9#-$y!2N=dzK{T5npBg}$WK z?jH=d>JUIsP~V5PEY~I>pWIEu*F~(s`&5R}3fOLU5=~M+^1FZ^Tl>g#?d?V*cY}Y| z)u8&)wdYgoeYN-uU@liUQCh65QLdnio!5rADIAO>;d%JbJ%>h~DWh<^S70R9MrbKW zW0sAha9&;+xG|XG+^P=?L~vZI@#(zUs>jiaHAm>xA2JesF(`hQB53YRQ8vpQ(|~zR z{>Tfu2iUfv_Thkwtu!Sj`|1crcg&gEQ%weuLd>mjJJ_qU<*22=@@g4 zh;0GohTBgh*l3KJgQ#*Zk-WcgXB+aKY-;RmBDJPBI%lI=DOKo<;&FFC2;Kic<#Akc z?6*S`i21L~+#E)Vn8SY6C*=Aacyl^$yoGV}dAT1xVDjyO=Cfc;@}m-bq@j{l4oqsz z3VITdEkERWaIn^%ryze*fJaTE7E=syhoMrFU>)O;1P{#!xkvI;FMp6^q0$8XSlL0y zFQoWgybXLycvm_7wmWEL@IHhyaBJFQ^`DB-y00R1-v?@@E=015_LahU(C*3aJvD$i zCE9IXGGuzPJ-4~10;@%aVm4IuoE1h>^1SQe`r@jL1P_7q9gEa+p*zY;=gzC$04TwX z-`UzH>Wq84RW(y+gt1RLST64TXJT_27AR?sKGP!DZ)1vhFCD9XhYLGCj|x9tZ3SNg z&uedH9KJH#fZb z81QbUkBf1N;h&DBckz0ag2EAD+!iCTc|O#s=OO*NyMuJmj!0=`loE;T8IAw+j0a33 z{hMWgogeL_xZMkg|CpvgKT-tKxGDSjL;IbvpdJyJQKwRdlyM-Tv@yMjX^aGns1uGT z@gKbX>+Aq&cK2z|H0xTBDzJ}6WduhP4~ldHietFn(7TS zyCbwl1Zg!KZ1H?zS-r=wEhm#*M;LFDq^3XFY$td3#l=lZByb+V9NuPW z#DY`ELYxz>ug9NKqL{1y+*^RBS7!8{C-^=OJT_d{iXk7=lIuNSl|Iz3f#G_LyET^4 z*}+hq+R*tWoir!HcEw*z|3dA6r{gSvdLAX^eZZe{KuKg_lyW8l&fk&MDZh#>@=_Jj z>OGuOF@v%XzzM?1!T(8b9;1f|r?;qOQM_}$6NeZ4Ue$IXC9NaE8)U8v!9;Up%w}OP zh7pDR9>z4H!mttwJ8?%TF|#`iOwS>J1ageX$cZrKSP#)lNrA+QN= zH&Fk00>LG2P+dZUY5Mm?g8u#s>=BG2nvJOZmzJ(d4;hufhogXGidZqa>Q{9v8yPyP zB3vZ>R#5@s+M^3X8(yq%`>N}|hlSM~=7^(NDbDBf zBiEnOX!6^SNIDCOqRk`7jfyJlBPCHnP^n5yk4h%0k~%Grgbt8hGa&r1q&lgHq|KbP z01>S?)N&!^4YWz3iJi$IaK#eoOIFy*6sKl@TCuVy@ER3$qxu&L8#Y!0C%w3GxhSJq z6O8dd=k(I=J=HI+XYvU(3KO->v*=hk^rgQ5tzy@0wi+eTWWkqI@ehn0Aq*w-)L$*j zdMM9um2r~mPkTx981s*WT8I?V_hjV_h(zoFNNcSHupHG?ljFzn5;ulEdEU-cVS+?; z8}wyZOxM9=NJV+0)EoK2L|r38bK<|``Eh#G_o&jC3oIOpDhHyM7~Ho_q-D=)FQ{ZN z1IGB^E|37yLwNjHHIQXh3WHV{nSf*KG+i5aFctt$@c9FAk^;7C|*vT6#LFIKpmI&c6v zdQL-=1YWFP(wP+mmasgI0?HZuwZ=Q0kd+ zEUKA@_A@rZ`)OGfjrjQW9;+BX?KmjRSTHdIJ%7)-Dr(p$r<-Und#|quo^tF}XlPJ4 z6aP{9CZ**cQ9KLdY(m?#!8l1{G$yc<=+-qXCo14TK|zS$z#$+(@|sjJvTs7GrV1R5CG2blgYx6n1Twhy;-HN_Ny#^)!_8HrDd?i}Usm@eT^}P8;^ln)LN`^-XT~ z3oG{b5AqKR@z0&|&ja`uEe3|g1%U!@E*T3X7mt&Zb~b}fW-u!9t#mGvOXbu#G4(>VkPjjc?nReL zF8+odlWFuOn=6;fm5OC@Wm+zVu!vMl)qbg#&(sMFd1Fke(XQ8;4aDi`sE01MIUY{t z%C^;RcS+9_fqOAQz_tm!fd0##XEYojYr~|#(=0LWP9T-dlj~?ao?>O?WZ3e!HwyOV z48Do#Xg*)6P^r?#zZZv2t^F7GWs}jWweIV-Q9JYT*J7;GhVyf#v;F>X{5DRmHih%9 zHOxqqaHGpZ6M4DPWR<~}&hC6WTpzeQ+ui;4c&2mOqq&HPgDjcOx|P?{`yE^MIGsZh z==4}ThoIUEs674=?2An-l^6t(cuzpY#Fhvp0^g`%@cYS(Ydh?x^Xk4ok^dR7D|nja zL8O8f>Ou%~LwiDWhZbPT5@O(0HR65$%pi{E=8QNjAQ21Cy}!`%C{c<>&By|LUDH(5 zi|g%(l6krM8uBAOsV3A$w}!%@_-;1KX@vUZFw4BZ>h05W*Du3?(|%zVfu(Hw>00 zGAzyd!pmAabW;r4S&AlhW*^A$r>f}Tj69(o(d(kN`!DROhhQXAt}5<^YE{h`#Ybh` zG)MGCt_(#5oyH@|>PB^+wOz7 zPC(Zy4V-1$aVuMf;ZD%1hUF8cEt7c_%NwIu^WO@sG=z9dy6!g#KAk)$i|Phz@JsP} zivxK)eRp*AVbZP}<+i$flwd07K_myd$LTVNb@QphKhdo9JpMLU{roCxdd6&6c27-k zP%_Q=R4y-%iz@ojw{4^!68Cax*q(?7FN`J$6fN_@Ks`Uzw{d1&5*YLF8BG- zWv#ld_9O-o7RZ~fF!ca=T9-7WKTU^p2JlIC$u?_V53tqV&qQ+<&;O3l$i~|33kTaW zTI#Ugyq%JApOdwm3_>Y`yMNj7%r8P9QWyu3*uTy)xcq&)cAGkF*JkcK4=i#g32NJl zv06tt*Xfn_Ij9HY=k;%wyk&3ZC_`j#W(DONQM9PquDebl1b)79VFLPv;OgfG;lW^p zMBtR@iT-^`>4QKw!t>t#84Ew00oNAF-%=Lm7Ixrgr-&6sEQS5&viK?#qBOy zFeI}dIwJcKrzDV0X&gLh4OzlyGzKw{RBa7f{71vEm&s4V70ouBlWV3x_7LrJccMWN z)Q1F3xP$&8im^aG6hBB|5alzf1c{&Y&~Co!`RXs^;jWg<1@J`JeP`eO)JX}x=vm9& zLKA>LldFkwr&OiORE-f8eTPVqeQ@M{kvwF~)8@P)Hi3o>3xTO* znnjjaq01d4nTW5)nmdP#!PSO3A1>))OH0iT$3CW<<=}C_X(4kk+@+yt34y^fO+hO+ z5vP3)gF+?%=R(Gpi2m_S3gVy+K!O8ez<*k@RCuLn2&zAuS?uhieGw%f&gF-(aReUvD2nH!fkH8x3RW62@N<%#?2L_{BICx`HD^i1Owu27C4ObXy0ya-8qkiIs0)A% z0>8WdrL)I_yRZ7N3u2J2{(fAjDt@;S32-KEg0F~N^x1n#^5{YAuD8b`37K-wARUId zkI*r#d=CO-FvK-do5VEzAY~~FmM<}dQ`UM!DEN*hpn#si3_a2Bfxt*X^Fgt!2cCHX zd&2phRT&&BV;7gh0;j&^QH_mLnU3-@HM=y3>*53+a1dPrT9Fl74DQam8E~t5F|unp zkm;lfFd`{|R7Yg;g5{-wRHpLd>XNtjRVrG67R;rNSz(}8jBazI`?W2KxChT-3g$R0 zdD0vvMIi`WVDnp&(3q}6=8Q#%ln~aQiBfUf_w-L$4ncYXcKX#)bO>o6`h@<6&=`CVQK~(W8%5*&$SE2?7L2BwFzn zdn@m;u?`aNUc^o3NS~%0&Vj(@iy$z0{01L96TBYnhc=h_flHi8(4px<@4P)Z-;k2Z z*=y(Hn*4WUD*>H4H6S*D)L4&b0nu}&>fzMhq<+7U+Ey21*3mv*WdyEmO^nSjU|YTW zGGf%pgWlgYj4f9N)XOY8`Cw3UG;N$M{JS++Q?>ZF-$q&n2?dex+oXoSFe^XTauUb! z#R>A1-7WT}9}m~^MP@S@j&TQlUcy-PPXK$E%)ue3OJkVcRTZI|xT~Ohpe`s{Ka#+( zA^$s*0N#F)K@FDCl|jz2D%szECN*!fAO1Sq@8}-?ifjaZV%NU9RU=t}e@z%%{`}S^ zX(9ZBT2$|>Yd-jr*&mWTbpsYK(o@XO`PI7AtCq{V>h;3uI`8!RY|O*3+;1fuWwuOb zxy=ZY%YW;|6M%(L4Cw-t@b9$n!G`u(2@hb@@FBtuy5bBX%g~xGQNVpx-bo8;UQq%s zk;DvD;WYa_s2nWBh9+3gBt$OvOFdv#-AV8@Kv>G}{4{{1!VOC*1oD?3!5R8BRuHyl z09=KUGF6axhL2dgzxKHQ4b;!yccCyIL~MWMA79*!Fzihm=|0l&e@Oiv;q(^B2vtAx z^w0=JwG8#l2=~sgbSMn>ukbSpw}t%`4wVs5gB3ys9kNQvpM>R`0qmDRs<%+WUsT)L{v*fxR3kbQH9o7y4663L})}i zOGU`9p(Aibd#-uod;0WX$Ea{2D;Gq7Cq`&nhA%cjtA)V4HG}=W0|7OPbTRp{@(M$4 zjvPI2T`*`+)Ev}^>Rm2{RSsc9m|@v&876$3{yI)1lsSdJ+ay|{_Z5| zPkY4mc%o~26v252$a?&jWxOx6d(dmr=y)7+M`*8RD5I7W7;u6;tscZ{UXg|=7C-?_ z?r65TqBNZz*#N2TV;n``s%I9Fh=r3{UFQFT8-rFWz9S<>DqHO-D~JVkjT zg^nX2$|@reLyB_EE6EH(trFd9BJpNC)ygXEE+TE`G)dnolO{6NjVc*lI4S=wj)^I?ds{pOJpW~xb|l~&-DGoG2#8IdJt znT6++nR%Wmo#BSD+P9-jU{k1F>k8v#k}h3B<``jf8NWp!GFVlVi#GDo;Vo zwDu46?c&atdBeMqX5$c5J5I?k6-zay&IHNI?OF8K^-6_+Nv_W_tQ58g|Z|q2v|EQp9=$ol~~PD+TR|N zpqaPx#YXNT;TO-AG;r9VmaBoM3>Yr>i z?;=tfGwASK!S^E379R%K7#5y1)5>Dyf>aFc=rOK{Bkm+v>$3XF;$xU{%%3GVQ4ow+ z*#Iq?kcrce#~!Ip#(gJ5OHN13&d&wfT`CWNsn*h+vJVB2DYkR-USM>#9FvWzidz z!1b!$3%{g`;(qPw9&dDO*mRE0!rhLt3fMxc&T3xmKd>@2CE7J>8@a69m2?|cPBK)@ zKk43<4ODn)(awzJ=PXxNjPeu?)6^tOS6joDJ!aM9Sl8%H zmStrXyS|qd($w#8moHM6fELyx>y+x22=H_ zgMuw^*DlGkZk*t$-g(c;d#i)GY(ze(_5s4yuWmHLPSuUV7V>4)Q~6XP!4-JER~KtH zW5YH~c*gMBP*8jO{uxdGm~g?MWdyYNbidc}Of_jwHR}0P&+*h_!#2rQHF5FQSi&_} z`P7K=Hd}wRa?3V5%hpKR)VOapyKN$4PD1!ZQ(V0zuxoM%k2TzEG<4rLM07PoWw$Fv z$L*e%@qaYZUbYy>b|m5^JL+`6{He3qtQ6nukkM(&q-`+c?ewteEYI$AoNBA?YAdlJ zNh5-R8u+1p{8OkrKRUZB2Dh;*yZr)|@X3x$Pge-8gbFVA+z=wo#{(EK)Ud6)WiP@f?5F7H|)#sDX zlA5tHqWm-^_p;vA3D<3vj$(e;!E)4wv&J@lvlA*NBF{bW{x;~?l3u@ciQjt? zIy^(kXLaDVLj_SaV7jA1d_5!4oqE=V=3BX=n?oLv!x(g@2S~{>*!`SuI|pD_UGnNHbl zfC9oC$g2Su@o#w6Fc_?0&8@!Ass-JDe8_Ff7ElW)D3A}n!{Bg#>aUiJb5;bW$DDm9 zk?$9$E*BmDjhg+NsfSNv&t3HDSrWNkt&LgAN1o%uAAv3eaOf2p7py7d0>tH~Vtdx2 z_@|n*=n(cJ@a1_3@YP<=l|rU!6Be>pgS`sZjQOM*B^p*d{;gQ^FXnb5yZSBB|LY-- zg|M6-2&J#{`L`s6Kjo3LbSbw|I=#leT@!%-kdQ}~|F<^5zb09;C5*5wOus&hu%0+G z*U(6K-?ps^*uDpb!>HhS$p7@i!Y>Vl+n6+B;69tz>fSm2i7{BSg6gz+5VM#PyHcaK zbzVJdE59okyQJ{B_IGQu7h&rie>*%D5ahS&rMo6y4Oo=lg3eo8^xMYt-^b3|U)xSN z%I(#eaVKrvsbSwB6EJv-oZ0xqB;46IlR_E9uYB^`{e}(1ws#$K_gH5)5eW8KzBWJf z_Lk{4ANlvY>Gxm?_a5Y?rV-Zt@sCE^0kZzv9>kEl<~!OmU6H(;H+mC)NH+W{=YJg@ z=TJr>q8xGv9Lgj13n;AdUGLf}>=)r3hsbY(>z}&!ZhH1^hVmby+i%Ov9y&7|d&6zI zEiL#hJ53jP05)B2a5(+JQ^9)PSJmm%1jdD!X1ZS29H&i*^$j@xS0+s(h3%=;S4 z`&tzim_;Pmt3(7;DJ;PYtUCnmN$;G35uf>g9m(+nB5L+~zb=FPFCzr5Y!d)>3CQ94 zSGYbfHk_%!faT>CNt_Dkx38N6g54W| zH3^{q!(r`1_v|fK{v&{X-+$-vBfEbTuD5^1Bv34bKQ#@@UK_hOEvJJ2KZjTyCsbDfuVmHNB{bf_aO$n zjLLtCA-s#e{b+MI3yQy+yncfFeWgf!GUmcuZ!Jom_^kYX+%(Aq)a-f4DhZw%f;Oxa~r^L*l)XLVA7K{Rl-u&Ik85 zb}2*14g^DBkfW-f9tegZ7Ko8TMjQ!ea<5){9XcFCCq&b?)=V;)2$8ru5`HTtm&sr@ zn~hmVA(INkw<^PHH$I(HWN_i=wpyZ+ERjs5px*$5!{!L>(xIy?U#L}Uwb&nTEMKY@ z7>&eX$UfVshgv8Fm3Ay&ZL;bf%%;kw(TTNtZA#HeVK^A{`9Ua$zSR@wFM-KHw#CLy%|YxwCTOUjke;^F_tcuB|qnZPps3Wpg)D>wwFf#)}vB zo*Z=!djp|JlC)?xw*$dAG{Bw@kH_VORRO4OK0Dme9!ldnsk?oTn{}%}ZfO1cg9oOG zI*YmnbJZkP6}Dl%K`8UgR}W}ilcdV43NcVv8c-8adbaZ*5hijFTy#gaaUwqYh8pW) z2F@L5@7j_>u1^`_>j=`>j{U_4rdni9GUmE%)EI?^izgAOp-ppey5Ye)RK<=yZ!$*7 zzX8T`V*qVqYnDk8T9!fzw(LsSPt_`0YA9gSBK3J~b)!sCMK_EvquwJU9bAVo!_Wb= z_Cht@&J9hl7QsGVma}nv6FfN_jvrGfR1jUI(IOsiMdyLHI|H?aXqK;lGC& z?o+yC`4b^k#38|bc)%=LC_F<4@7!dKrjXuuY;u6MY%x3Tkmnoub~d_PRyOG9nqn<*n96r}k1Gpd3Smzq4{{RlrOAwHZM>Q0qbYiN z(WuM2FPgaY7KINO+Ixi~DM{)@v1xbEG=b*Y6*?9=?-BTKtx+6!EUhTtY<6hO{p~2EO-ORcgoFbiEf7lCmUJT!}ie!d& z1J%F`cI%RS^_;27m(SgHqLE_b4h0i@%>10ZDq?4et9b88Rgj407R3= zG6N2nXcrInoO+Mey;k{xi6}3jpQh0QN8-)em?Gid5B?jsTL+DuS^M_wShE1yNKaeH zZbA$s_uxiZygel%9S8-1N-u=PZY=(*fhyrym#x~YHXu>4s)Hlxu<}v62ipm|oi}WX z-m9)z(_#Yy%vVt&$Oik~CM}dDvy8aq7zbezS^V+fZrCCv zX%gKYHY}uoZf4KSs9TcSSJ=| zBZG%4OgW{PY?pZERCJ?s(ZQ3f#C!aiN{j+L@F=Uab9P+pnaPF%(bkl4e^1sBaw*cq zQB*WcdRm|0G0@O=YoA1N#9V|mnG9SB$Hjb54_NA$1von4Xc?Ec4O)sRGK!}(vygEu zQ^{4M1t5l6vd4N|nlkugCa|?k37$OWMGTwqW0j5@K&GU-L`0&I7s;7EB&81HN#VD0 zF%b#f7Al*TJ#d^hjjFj)BZZ!YyoO3!+dF455?csQTPbsRDwk5T?@IfbhPjQZYPWyF z(Cp$=5^SjE)qy7o_;o5;5wjsqx{8VfQ!53+x)k)GTQkR6shVavCJE|nND{*=q6H;b zk;tj_Xt(g!hhbRi`pt3FQDQ=MvXyd}Re`OV%r4h7=Z;1nj_Y%Dy|1gLljA4{!AFjf zw?5{hKQ1UD_-N)24j0yMAVYHi;+C?1JrPJsN=?}7FSeKnSL^X@)wK9J8`dpYscL9PO=1g`SLo9W%k#C8_^N4Um z(PWTHatDbC{sqo=WeD%lgp&tT{^CrkiQ|Kn3@pP1jB_vOUAu{|F4rLIbHIN|4Y*=o`b4}OZc1h zQqhk^l4y+&W9H4(ksUUd=qYRd#JslN)6%9Wavl!Cru{Mg)`r-_Ra3Ifq(KM;`#gwT zMRKI9GFZerk!($^Y1q_3$!q7*?_yUy3f63^oq}$OV=IL@IE@!_w@M2=Sek0xK4LHmAv!m)wsKv}`Ft$@`#o>fd(qv13s5R=)eGxiFks4c zn9uV(cDQrbneXj_1Efx#)Y#65YvbEk)z`Nh;)o`r^n>CDE}uvmJS~^xQ9lQGUwu5^ z%&$1_hxdBaCTl#@ly{mk<~?soZa3hz{d;Gf@p;7}q{7>key>#c+*>kmvHR^ZC0^r& z5XJo?rFTJx8I(^*xft|vikUy69bALIkq$(0kI-*=HveC%JWICkQ z9jwkKu39b1AvU1d-FeC~1g$#oU2LwK5+|?*CI~WWfG#0GH~0ZN=#e};>(hbJMIjo( zE&afSe>Ff#Cc<^t+(yeRV=5Ae9D*{;!PG29@7k_HHbNCbH)tcWMJkQ~E~-H%iR3E^ zKRgokF{(u;x_vp4eoC z=V&VUh^iQ#bAW7^I7G_Ub@JGx*Ct0Qq+4bzWZ2?QUR=uP1US3f0Y8SR>L;utis(jY`#Nw4~r`QaDZ}_#5m6U4oEV$?&ZvWtdOvP|!3|ZB`??{CS z0dNpcVXS1Pym@-YmM=|J_9Uhc!*_Neg)2*QKh@_C(rq5fZ$4K@@eY0FFC7f*%=}8T(qFuYXVW>tX&LHB?nD{-SXYUl ziMcA`Kt2)==0r2 z3r1Ji%K)W5IYszTWtx9Vf4diHb74g9g6T(;zoADFDQ1k&Y4qHMp(A0ut2r}O6=43t zIPT1X1MVzHZpU=M5Ha~8=(h~{G+%DB$or(iRiZEfrdlziB9h7n_fLu zzeZWQWfAbC%+#W~^fb@Vql%QPeE6hzSUhUgEJgOJiXN(hY9fQ7#)Jn94|?-0|d#HFGG|hm(>in)r|Q8_p0*r+e`VwstEYwJy)uETdL;Es`BjM zh{wSU$I>a|i+0b-OEkl{si`G$)8cY97CDNfMk+AgD&=wt2V`=Z2y@1<3X-8p3pvYP zSpwFzSj$_G0K6*D`sZuvTidn$AJ5o6-4?qdABwC8g&PJDVt?=ApNznRqUEn zkP2StukVTQf$JR8(D-YKOq}1U&cNJH`ehUhF&7LCO3ejNGbQcq)!#i@ISA_3`16pt z0N7lmU^UH%7Ud%Gm1sZB$QjL2J#D&NEtx?IOnxmwu@=fV&GfFBu@EhMyGf7K4Lmg= zE1VDkD)2z^O(U|+OeUR{eok78vJxRVrNZCmkUDFXz)On!Y_lmXx>whN>~1^f*V?CQdl2@9 zkm^#v*vZ7sY>Y{SATJe6B_MIC0b$sfLhRpp@HtEA%rY=5y#LvW&-uzr~Hvc2>Im z4hm|%p-1DP*aO0ygIul}aX)E4^ABFgOUSm`d-=%S`Q->7`K7ze+U z{}KD_mg(ow+3|OW6TIQcT1@p3*Q2SKzWGn{6Uy;@821hSlTB3piGuf>k3QrftSyP|8_`ZU#v%U{#uChc>_V|0ZgZ2e>Pl~a)ui{A=I zzY)&{*>?oLsYr!c;j{y%8}sL@13mvUQD``40%)KU!*^G#1$eD?%$Mn`j$u)RMFQe^ zY~HD+UTnb0X$Xf^fc|mnsDZ7!Zpz6imO6{Lxv87XIackteXV8QmYIVDOa!8}__$Re zgLUzVRrD8|_PV9v*IDw6Fk#y1w25_Mt@R%QbF50u8i8~And5xV^QaZ8hF0^yJ+q8@ zt7!Vm+|hGK^UM3A^9F*;Wn>$B$U~t5%a%CHBLAb}o#Q(Hvl7TQIrocGgs3WkD^?B| z`Pp8JGVQABps_gH@jTm!THDE9+o@UG=^fh{imNL-tJXN15=eobG??5n%Qgj@1^w%m z6Pr$VyEP7*tgy>Mg6Ja1i{7}Sp_*0+#}Huum)#zs{rES_p?}7waGpPVxguc`_Rp$B z;bzG1dad^Iyw(Q9EF?1SdTYmi?c^r>#_smZUfdDzM)6Q2MNc& zwT^J{8pP`7pF4NQCyq!!$9IC$&@j6eOsDRz%R7bp$ghwc`v}PNyQ{przyPP89(Qnk z_cLO)_`6O7w@z_4FpMBhZzsmR6nBdZmyH58@bau4V>*~H_lm%}`myE+*> z=?L;OVO6p?z!;TZNm;mi7`%AId$4epf^$0Z@47-lMFG<+f6YDGtUi!=JY{%-<2pP` zyx2Wac!pAX25P=a_CE(pz5<<*uA~EA_93xB6quvuj=rJC_*2j5d`~yYM>e2Gvd1%W z@!v2;hj0h4bdA@*-(H#dUK!z@j)WdLb6&ZtURe3}(h(u~NZtj6-iega`IK*Z>5)ix z0g0!c#*lB(fuDuU>uc13s6Bdk^kfZd;r4@-s)C;w|~FI?fZ&h#m;`;dI|c^Yc$GW!*qCjb%aOCBz&AZ z_%EG)46gbhzXmwu`rQKkha5aM4LoA3|LJr5?i&9LJ@tFW`kI1*)uH^zN&h{k;r|i; z6(-noA^7zVDnjNzpvOC+!H|4ReeJV5;^7EXN)cPBZ|E@w8$vy^v7S^a0Yxx@?!53Q znT`Oz4E_z=BsGG;VzHXKiDEX5j#pv&{IOgum(t z;`73E&=n8}q>z|=Fg_fQ!jd)DU1vF&W<7?DO<8ypsa7f%*m{>{vx?Q6(*8H;MY3L~ zPu=N1Q%`@hW$$t6Z<9?@wrlNSu+lMqG(-^j!v;`2(s6%~NUY*--_u}tw!sOP-l0No zS=J&N4++Q2{V;eKpU~rFt%odDuX4C>h^E2!n-H1B{ih5g7@pTX z!*yY3BR4dA5A-mEsHb^%SbfO70OA_<9czUiN)#LFKkdd^Js2Uz+7E%_xN2P(Erj;$ z2koSKAAzsZ@xrj&WQpQGy-X8Qq)l`5Q1w>}!}-)+O;ci+*G%;_VAu8}@kFG_GZ_AH z0rxV@MxRrotq7iU>@BX>*0aocjtG<7HoPeFye_24Jc5|9%?*j&xvA2$;I&IbBY94b zQVdAmsREs~#|WaK-PjGH9P_C1vMlXs%5~bd%P8WUL9GsBT^G5_C;PNRiie<4TUb4WXVJuM7A%>Bz09c%M^XrCy-^D zd5Vv9hJDkQb@oK2n{}k)eVVnK(~j%5x|L_8V(vMvaPPefGW7c2gTZ#W8R82vUQ$_)Gv3D|NEC0h!p-j4SHSnaPImA^LUIo`{djj z2EY+;%}LOY*X_pgesLWoa!M91qzqM!bV|u{v>x+YthTPbny+!6N%Y0OZr@vXc-K{% zyz%TLO$qQ`x5)l{Ux*nL&~mNOnKqrjRn8+n3kTZz);yWVIE~W8)^eZBNZxio%~3k= zenXFaegWfz4xW3dlv1zre{|$f%tr*d-5UUh7=9mFFBbw&*)HGE!&WBoVuNDOb{Ie-L;9KzOY1TCDw?RtObBG8@w6+|^m{P#LcV%P|QGN?Zl;AM~lj7tqLi&ib3;HZW7_mM?^j8W2TIF~PSy03$7#Z0=>5>#9Y zwr6&y#Jta=c)G+yD51R{aKVHW=jH-vWe*;v@cNw_71AO_EWlsxV#i26>661&k?Em> z3Id_Z_-i;dJ+}+zjGoe8CMkLW`|oqq-}@M4e6Q8N zEa%sYUR#=t_z?{iao3jPo+DvFi_Fpo)pVU(itXj-DC@?mM%W!&i)X0xgk@8@zT9hS z{Qg*JWp5pdxWW3P(;5h%=%I4h+tJEj-Sv-hB&@+-Q*kgZ^bUWy2-{RJ|VPi7&DTrbyOJRW|N~)xA~r=NSAF zqG2QBkJ0;u=a5+By_hdv`XK5E)NE)eePIVL^kP*`T(RXZ`v5R}c=1V|@gHe*)yH+U z?cW((=x77Hqvp7h=DI+d(WoUMVhuyar^XgN4dAQiO87r)}Y$E=p? zDZAKQmgGcgqD{Hb3Rk~^KEsK47SETe8(ty9erqX z|AV=I?5-@}8g0>3xMI7KitVbH6qA6+j@V- z2HgRNACF^@-lLvIUzfYR^F}qFF4wjjH5W&d>SnjPSGO)6qIQjA>M;p|f;Kfy5|Dpo z^i%(MANmzE9Qw6U+Z@KKPh zRe_DXg>p!r4Q;ct#{1pTm}os04*;Dzou&zE0!r2=R(}yznKer3bKTySAi%2I!UWfO z%+>j3qyPL(^@V&3oI!7&NAFTtPuDdQZ!DS7JUL@A`(rW_Wo{crFym%4bMtaH(;Tz% zG-X>j6Ams9TSFZljS#_p6^Fqf^o`vS2SW0$T2j>9Y(axjmhlq{^@Ejc?97^bH*DO z?izQgh+Lv-Z-XjZWc#PzcChS;d7JiRRzZ5*oTP|Zy7(&JW9^{HkC0rXk=dR0*xdK< zhBn#yaDhpNLkjxjZg>=hiB2L@%tNHaXgQ)qBwd@Nq)R(=qK0IBAvCS<%1(xi(79-L zdni>0y5h?eY}t;ZDR91o%qrRU@>tZ0%NITSJPd{;YwM?og*bfqd~?dbC_?BzNm&UM zI2a0a2grhZ$&RQG)-j1oZgW335A(DDM*#ru2Hq z@x|G4dc3rCI}3lP1J@R}+4#sQjzGJs`s7E4+f1MO7`R93RY&S*dBYXt~;thc;7bI%NlU>c&zu-#L*?w#WgeNraa18u@bD7Or6F|tY7o> zoI+%6=D0+}Y)uH=1dV+^jaB0JdvlN6k%$c2iUYbR9s7>F){5z9^t_{Sb)6`ygfphp z4f>plIQEQhF-wm0H_SCg@U)}f4#wYm3Lk2Z1K23#ZQz*|N}^PX!?jC(#is?o%CYek zG9YcDdXt7R7=@bT32_)9Q-F&19S?R;4QR)x60_z5rzpJ7N*wJ>V|4PD>9B@9cVh8M zC9%v~amfZ})!jc85^R2SC6Tj8mbTN6Gi{b6#S?#79)0Of5r1#|Mk`T5+YWU$Q%XOQ zAwh}e&BmZV=B_jM?9y`_q6(Zd{W>Y)>w+WO*>Tsi=u2IlJAjj7IsA)c?&o{#8*ZTs zXL@U1cx+ebpGOoaXi-3sr#^R*p?Fr1p4-f`hpA5yzIz zwqm_3%VH|pm1Url3s$6~&Q+Y@ub8xUmP8Y&Kps>zH$|^#sMVLC?^{xXq#HJs8APBP zn~5*yALrASBGpOytqHVa;J?w(c2uEQ+_XfU><<6ng=3ycTboQ1x3w!yNBc8s#b+t* z`^$F1R7nFLO@)qSrHN&?#c}sq6q%jLOqfXxk{Q}(VQe0aE+I_0?BW))S%B=hM;{Hg zq}h<-*$~<|#Djzgv_=UYU2hTD$5-2q!b~&QAfTyec$0QQ~wHcl>+NWHgs7nUM7GG8~;!-hdiy0fu?bYY7VOsZVZe(Rys_7Wy{MG05-3k`1netaAF3>1xpcBP7u>nr+LHAd zn(go`^$_EX$c>JD4kU>U8fv8niQ&57iHK}5r@Bpa z@^usg)9YjQonyk=68SFp{&BkHah|1Kvci_R?Ygu6W!_eiqujy@MFWvG}|;H zrF7mUI5|+w4m1tI6J5*@ldXmE7z4rlVNIkn6E<26WtgqJY*iGRT|)^KhG6z@1zV}C zb9in>9cQyx8N0SzlF?OK5Ep}CAN`fhZBsN8L^LA`GBXYc(5S7l(UbamSm?&~7id@2 zYGG&wO%MGu4tkgxYrcw1)3R%-RCML+$9e@>5N5AUJa_zfy@Anp z(DgzqCD~UA;^p?+PrV=WvV?Rx$W8NyiE92@JGdz}Xyvz**p??0)Qs4PfrT~7i-?^X zc8%aQwCe&`+jb=8R$E73-))xGMcdYG#9V~T!>(4$Z#eM`w;7w{vEJ6^SvG(cW}5t* z%PtTd`S3AW3OO<@8a;>!JOKL#KP3BhDSP>n`RptX;@v&8C20!vUo36TkPFAcvlR=i z&K#;&;cN_%I!A9t!`JGX!8(LiX#t3lrnVLFzbvnqb#TYk9Tg6zXcxrz+3)dmDsA;A zjWQSaX>Y%=QuY2~D%w{_(uw`4Z$JELds-{x2rjuUs;+#1ZC;h)ZVn$peY;35oK5{s zb6dMcW+53VicEqeR<8yuM3_*vRp^yqY!r2xnmk+jb*kuxbM=?zm$v0j+*;!acoBEE z!!{a4T&eY0Wme5BP;7o3telkrU157m5gm4FF~05=@n@>agHb?5nCLZ2Z3z{00fY-^ zqa2NuK$qD7$Ru0W5F_i1H_m#>SHt{={72tEar!_x(#T)?J$f#+h#O73OXuf*X zy8VmD$@pdzKcu#t@Dj}9*BsB>=lib^5J66uSdVgOZ270o*d7@KA@`GJW%37pE+96_ zHz$ALLKV5j_usa6L)9Dx8*x$S{hzTouod;eY-ZcdUihqpxw)<}E}G=Q()h)H!|g4A zr6i1uc0Vi~@@H4!tT1Gk*hK1BhAx~;n_228QK1|)o?LJe*u}vd&?8QzLO6u7FD%#P zcC97`IUFKPlrb%d9k-foj-AgHnh|>{F|9d5{#^P%>98HS|+LJA^6 ze*$@%Mg^U-@Y%Tyt)=sAR8=bvlq|sn-6Hu<^Ael`u;&7$u{i;$5}Tf0mColt-isd4Syq3((KCAudK2 z^S?YUaoF@fmq0Y%7hYaVzt(!})PY*uV2Wj=+L08vy9l{*e{en7ydC0!7Lq7msNE%y zb6lWIS%rezA=`f{HJ7!Gw^UTUMFO>|``;G0+!;5maH5Wdbanjd%V#gYW=&k)h;2Q8 zDyrDs(n;Sl`sZc;C}e5B7mhRTdRwPKz3hszyIIDNIouC<@YuG?+-_mDR?VNBneGPD z``7;~H!bYW=dQAn8#25dYUU0By$;Pm4o{rt@>TeqdzK+;Poo#3>$5dUUWP2cBXD zoJWtNzgCiVT3)>p6gEbWdqSb9_k<_(K@Vmws+MWiP*IYhBbzn=*+6!3vo6&x)SYYa zF!MsM_iS_qWNwlJon_}9l4w2ek zA4c=)O<7!W=GhOcUm7hTt6;ou%Jz@Kky56c54`Z!etSnw@?NJLi4~enwqhT1J3V&r zl*|L0kQI)~KkkmBaQ+Y*u!cVn4#Eer_-TS3)*Gc_%D8A<3yzIy0y;bRMy%T36>B~z zzY|>u4Uqim*3t&^Y({pvP^YSENci3>OhPIvI(tKFD#nMHY( zbp)olR-Ulc+Dxms&HofVV&9BmYwG53>>cFG#^KMhAgZGp?l*<8%f7_M)(B1-bEYV( z>DQ~zBH$J|dA!nVE+#-Ue;T>yO|~&$*j6sBwDH( zU1{mlnH(Dri`uR@wGPH96WYkh#@iWR$C5s6dGzN_tRV5G{Rm(8@_hMsnt(`{QG+}m zOP#0D z(-Up1YbOG&5FYQRy-0Cv;B47#U_qQ9J$bugKAi2uZ4Lo1`qUUPz2~1HCXh#bKZQbH z#2C-RM#6L!-%4*7XRndnII$mD!yt#UF#PxlA>=t1D>j}Z8GANf{UAMO9$M4GcmD#p z3_*gV1s(+|X+aL@-S3c(T|SK)m+rUF>_12EJ;&Os65oW1Lg`HX^xkgJZ1+RHo`I?B-sGO)Z? zQV9JKSSwnT!gKzKQ(8>hDyl*MBzRUoj6h=nm^v-h{9a7vvqaUI&+AhAP%(4Dv?k*U zHDJlAJF$PD6cB@D_;3$9ovCEEjB}x0Xby;?)jLT2Hd05T-<(z({6w1A4s(JC+tfmu z#g%mnl0H{W;k$qRBg#t2dNp|> zziM%6zh)}CB-Ff!s}`XbwbLGmKLxmvKQRUz@_o0$Vg5b!y(;sBT@CY3%%0 z3cC~dFBYnfi%}l^N9KJMH$TC3!Jld1!@QIa!Q+bN9k?koe(}3bb5~M_l`?+Rv%L_0 zXXoEVuS-R$3S-@@mjHMO+o1@UiWHD>18uYGvk-&}=QB3D_q(bGYc@9N3{cnn{NJML z^6-ZCr5DW&`CkI3*K^&Ej|T-wUC?I);kK(``_u;@l>cp1oILN}HaIR$S+A><0Y=)a z21{@$Dkik@PwuRdjt0gF^=gypSMB;8%HQ3rGsO5KV6ZBog4k!&P*C?;F|rRlU}H?a z96UR-I<9D#pEV)w%vvZPkW^UY)Y4OE*=R77IciYHkjTQA!6TGJO_lUvs}LK2QXEV~ zl{jS$;axao4iqBMFrN!aQdG^mo;6G+68@W%Fs$K3YO7j1076W78wZ1hh@1g2M%Dw< z(2$%}4;e0#(M;knAAyRQZv-empG@u-$-qIhL3D)5a}EsS)5ENYZ^1Gl{OHgR8b#7# zo`S@$%1tYG}}3lePn`bdL%mIp9CqHLeWNOz$ni{kF%`C^|< zLjon_Vy^15i3#9XyT9I+b7+N>m4`WNtBNjo#U7vMX1L9zlS0mB`6M!{Z#*RphchFh zRa#m}B^0~>Z&Zc-17(m9y=&v|10{*)g<>&liy>@5ddj3*6J>2w;xjjK|6~l)fW#QC`HtJ+AihRRfH*G4ea6%UV< zFo7ej$&giukcViirJPB>0@-JNQK<__@G2^z+9rBo4}Q7z2d;u^OE-@hg)mn;G9GLB zm@Sc}({d-L?%1o(zW&NSt8d*tHfwH1Sh@*nbxkNW-YZ>Lq~WhuX$x?9QlDG+uMwl8 zel4*V$wYkG+2zKrvPW4B?MKH~a(kMT?8!`k2Q1o4R)t(NGN+!0nz|YmnC9ts6?6*s z^1nNetzR~Z+|)sR8>L)Nt#W}^{-vavXeyGiK?GS|)Y7`}sx9#?o%He$ZcV+rPp-`5 znLK|Y;_paQdn`nl#jA@b_lqJsFP$Zqcr>ZZI#;w2HAgKv|!zFkg z{K|HPkk%6lzT1K2-o~AFTl$w3@+_Fsh&sUotNI!4sO0be!csU^8?1h&Gwa=l7RvNb zm%_^gyx1+P#LAxO;S}Yt@i;Z&Ku>Z7e}8o~x~?p2W?tN=;zg%;7IJJmg!n=bBF1IZ zrpc5h$x0MNK_-n3I7;YIGq6ZrSghCbx+ko4(l<4HUY#AP(Oz8|9TqVfDHLMNxE(#U zId>;_#&S;VaYi%z;lXT_r6rsKXM`w)zcrKW(!dB`qHT_1#BNBGK6`P=TCPT9R0Bck z7@$*tlM&@Ukc9QO70u{poR;5aRhv1---u!S{rM?m$o4Ti)bqcslQIP(r+-cpQr|t{ z*e~QD&#yY1TQow{e~oE)5q;cWm?fhhZq*^S2WqEpx7wToxdUyJb2ftXHCu8fRSdfk ze{uS@Jum#!aWX?ch&K?`5lUF=mN{?hfG{8Ed(BY(_R6*tU1U9Wx-4X~{fE5QB*rr~ zTCWhMDsruUas8aF;$iW=!wqKYm(hMz7!``dA=)>cEW$ z^uu{%R*S`}_U+5&^X>^CumK~zVd8OnntSrAS0+3i%C2&<96gHMh44oTU+$!RvIQA zM)2U^HDvyiVZ8Dh%4b_&Y(%z_9~I?)D7;|6w87|b!F0e(!5_hb|D)vkUrk*9yM60_ zmu@+HJzi0cYG%$lD$WK<&IVe}CQ8mGTF%a1&hC!R?w-!>fzIB6uK$}>>r1HRWoP#v zo7R6xwEoMT^(D> z^?xtI`i}+c_4DoX_3i&j`4tSvSKB`zFeo@AG%P$KGAcSIHZDFPF)2AEH7y+&PwLN= zk(-xaP*_x4Qd(ACQCU@8qfJoT(Ad=6(%RPE(b?s%9zcqW*F7{mGCDRsF*#0&Qa?4n zu(-6mvf9}{xVE*uv%9yyiidh|a(Z@tahZBVaC3Wg|M2+qJde70`|$mSq zUnEzI4xw<=ZezO~bua*ZIjn#HhJ<=s)`isAMg{OD-(?%jqlBv6e!Ec(>vR$*VjNFk zQKd$LozOt)PvoG85`4u`Z40dj&(ZDPs`NkQND{BJ2I@8JypX)Frt`gxcGX*x+k#N)YCRY>|xH)h~*`v5gP~e2BPy_k=+^O7inY zlZ*?^iJhPKLu^DOuo8^A2GU?O1V@e2 z*;J@afPX1o$TE-xj{zwg(ke$;Or@MS!9+ULc|kUP5C$0>b7@qWk@l))`J9IX#|0BL zC&iI5;OV;=u~pPm1+qG-im91sTomz=ie+WYX&Q|)iE~7+RHe1)!=>J$PH?8ax<_T_ zRSKI-BZwRrQWdq(xaAjhgGVzLb!cO7Yt<@M90>7QV-n@XD=M7Fl_|lrS1l=f{t(1d zg0$jo14!#O)Dwi7bZsMTn$^7joZ|wBFOb@+JEuRTP>~_At-i9wjWm|w=_H|+rkjf6 zC5;sfP7A83!R0)Y zGkAmidaTtLs)t10-(D}o#yA#7#k$1*4UJ1PempOCGn`n+F|eG5isK7whzY1rh05%) zY(FENltZn_dR;~+rkaQ)0M-CMd3UnU*Z`0VcJdxS5OOy=W_$n9S-FNLq-IqZ_hOMC z`dvljUI>b`zOUW{b4=tS4HEaYzubffAmpL&iwlA`*@&{C zUZb-!*lAON(55Ozo2Z821c2kPn({E8-9(Q3%*R`A8cHs;i_CP$xNo3@ZC0-K;N&Lh zj#Lx0)lzV2uaDHIIpLKp91F8h+rYfl0K zgo7DUvX(Ob1fNYL#)rg#GHX-fg78gfStocI;pK6UO%}c1VSP>=U(q6u@I^3T@=D6> zCuR<(f;>V;74JnS`Ik16n42vqF=|mHlc?8FL|$DgY2}U%C_y-;`N=Fh>*bJiOh&*Z zwIb%8TkdX}P}pV5IWQO1pR7&gk8-abxW;=!Bg!3dy*40DW5XQ&M`Rimy zeDoN=fbm#tI_oSB_kE)nHK0t6s!cLg+{?`MT|yp*LQw!#q(l)nmAqKCQgsv*SfYf# zI|pn_jH2$;RK3JfiCI#pFuu%}>@1rCBF$!4e-N|6J)@FfU}pKZoF_r23HK8>mLfNv zUFV(s%71LMh5t~gev||sVtxENww=Bp)Kr$v!z{ohI0f~rDmG_fhMs7cbB7o#XCEyV zmt0aS1dVCTgDY3N(F^m_Q;mpOu$DI~r(@u*sTr8mN`VE@85eU+n9wjN`9>9JE}!)a z`7RZWM^!l%OKqNQ-6uQem(zyEYU?CFwx^g~S`15V-R}99oFH1T1gv-YK`*qZMrj+w z3~BBXrpSjHU)Xp6)!y!&x@EMAdg2W>z-hpKH4{ZiYhzUs)JHAd&4Zx6U_jE={DaJbS=c{;5 zgm7b)DKAecv0+cd5N#s;<*^QW+A>1)DJ`7WsS}jP^1xPLp(zOVL=xg{`b4{-q;T_8 zxZr7RrK>6IH=>DhpgT(L=VOWK`QG51#*hQwQ`&HcG9$TCja?J{o65H>H@@_-mkO5v zuS`n|e(uq!&!^fC?Tc{&&K>aOr!dT{Q(+hPHG}#k{&0jh}Yg^>z z`Qt?-jv0Mg&32vlUHKTUFKxwbnW@2A0bkv4J(7)GO#7MmiF*s_x4UQ$?WH@}H%xsS z6Q_2sBWAf&rp-D6j2xyZELPFJr>Uo|x6Tf^6!(60R7X&iCD%mgF&j0TETBHdYa!aS zW9VnsuSWE_@Gx3VSR9G|iWa=O;Lf)R_8&&B?H^puK5y&TnSs4AEf3!O;HY{(-qwWP z`s;>2TpWA?#csC7{fE8gIWw)Te(2nWv3U-VBf-{WYoo^TbN{2fem~I!y{=q8pB!qB zID(SobL8|-%qxW#|8BpZ@Pnp8s^2!7yLVfcOWp#m-c~`MpU=(RpZ~gjK0)4dn{0N2 z&7LSV3zYQFJ$u47`(t72~3Ii_XM48?v9yhnz6DT1fVerLyiM9+Tbi+Z2S zJ`|xw>q8#kYF|q;x0_}kKX&{5CTkcqUuP%_6daK6Qj;%FsORLdD=<#Wv&f;E)YOW? z1xd({mCb*P(*MN8@)+BIjw48E#Xm_j2oWpb{lEvq)CVloCrs5@uf(64&8zOgH5kQB zKTc`qIM4>*a*gW$mm|bpJj7AWJsryjRW-%R)oWf-# zuv9f9QQVtP(ef_IuP!yB&DEyXH}rws%fvO**VVQdU@wMZQ=%3rfbF*g<7KcCu3ZB; zi32yM7A2|oWpTm=hDH#b*o!LoN7#?`AxFLr9hbvZQFoWl<0G)C!L-1UhY zMr#63t4Z%{f&gwJ2X&&bM1;L+G?s)r2*;~vC2r*;jdl}M5J$Yvdk|_;`Sv7HeBw}JWfs0z}1dx*6lPu(x!aEA+ObLDY6;G-j zBb}2(ahmvTHHGlhNzxWOSUuJs1(fRlk{Ym@L=Bsk2%C^d?Uxpt6f2SJ@0M&b3WyH_ z7;~lJNqeT4y)KW?kV%oxEhuo2a%NH7g)+lt{Y%S% zYs*1c%Xxpvh8W8#49h`*%gt-eloLn?Z_7nX&n0Zj1((c$3eQP7&7pA5qjJy8QqSFd z$zd4FW3tGdP0QYS$;IOW0pw$|@!;~f$8t&B5qe(I1-S|;($c8}GWYb-xyG_-@$&OI zGf~^JKVS=YVY4D;^5x_KJQ~TGZH4?A$O6;|&Z+>~9AtyB1eTjTi?clJu_C3h0!6Oe z82Lg1i+p=YSWAmycgbYywqozsVr{q*KdzEMjgsK6vvVe>u<(4{F&g35l32W=m{=D# zxcn2`%%rv=jRWI6OU{q!w89yF3`B z0K=`Q1rOMEmTqbRTUwl8gjYJyRvr(RUWiu~h*CzlR$TmAF@slGb_S?RFROB|TuHBt zXam%)Rc@7)v@?UEL-Z=R(*OsrCHv_qNw!skYgJw06~1F7Qm+LV7R9PumEY2H$HPnB z&+@~2Dim(YIPhxT+p0g(OV()s0C*&2BFv69!3(@vH166STnrp_zbu-{=`mP;JlHj^ z8b}~u@wFOKvyQ@}j_R$FroE1Cy^aCCDsZO8Umog@Ks}pgJqK-lF)o$1FBr^DJsQzB z!?rK=CJ=B}BRW4*ffydmjhq}UX;oKi&90UW8n2B>Gi5-FCK$^) z6YgT8c2G+seiPAK9eV`emlV9}4k5aFQHU^t6tKBItU;o@K?J`xyS=&DqP*~}xn#Vx z@LP*RdCiaXN?oZ&ZKkH2wU#E2cGC!0E?^Tgem(nJd(SwWxd#-RR7aO)M-Q-LWW1eN zp*94p;Ww}?RjR0wtFxA>Q_!ugV!hRSz0>Est;M4~fVQi1ym1V^^%&Uo#}<$%W zYLn`?Stn4oZRLUOMDp$K9cwD1tyuGDevjw`=jqvougEEfV|r`Zjp*WB?-`?Qy~ghy z0m6>cc4Jv}d{rv2D|+!ZI`-Gvf^O>lXTVpvffN(5aY{# zAiyy`6q{u~M`V8%O)rvX7X*ImArKy)XP~I2SA3!uTe@G+u9IE>@C@J3lKpHuCJl4lFF_=iyChFP2$y3j_F=X>TWL?pZMb~-}(L3)86`V8R z-ZAXCG3;G2OuCEnqoOb1ritGJoYWIYmoxY_K4OqQlF>dQJ24V3J*t8*nv^kO)G=5w zKAQACn*68{K<1$KV{^UhW4(u9qmTFN*l}aXYhxsHW2|#S9R=b8xWt3MruR{v z{(Y(9W7QpTC9raHonS1_cF=0QA>kw6S*&kPrZdB9OV@g3Byuo)a&wblB{Xx>S9>#~ zW-*d!ZohL|A94Hca{J%M_AT!Y7~jsL*UB#MG)vD0!qyJb=MDq+6upi`gK(e->gEVGDw>N)zp!5BJQg&05aKBh)$6=}&FFNio-;8?aK5eXv5knr+ z)#10wgP_hWO{6|s8;<9X#hEC+$g9@=u_NWK-Ndegn0MZ*k7Hf9Lpz=Q65a+@hEs{? z?aYXfQkfHC?;RYS)nL98=dB}`tq}*pb-Sun*sX)~DjE~-!)t<_?5*ig@A6K*HJ<3L z+^fB6q^*F+GjFd=v*>f?&C`jh!&ccGex1|Wtjp!A^L1I!^bFrg4&PC6)tr|0W%*p+ zG4Fn-_eDO#RpsOXiFfS<;*sUmB5&6Ti0+6#>*$=}>?PyW$?|Fm>7brrGI?YUFx~tK ze?{DNV0zWsQRP5XbD*by%-` zW*K#uoO!qMd9fjNlZDhb<9XV*b4)l*Nxyx1dU^Ky`Wk!ta>M&xB>O&R^B*7bU8VOO zo6n)5uKa=bHR_KY;qLqC$OruHW68hwHkJkJvoIa;9 zTW1Km5uyx_i3TGuV1q$CBk?E=h&4|(eE0sODAqki;F z)Ar3pKd0(G6J0$lOkHdL=!vMNiP0U2;(v|(@#3%dVpIN<1ZoP(e)*ywYPXkjv!9A% zUJI_D|F*vtR=*X2?lg3dfB$%L(=p6^zj~xUKwvyh}7AnbLVPlzR!Ad0Ux& zTj~BN+r|;k{%6g15Sw%H&F9Da#nU#@^{3_myX*~l_Su2l2bcd_OZMyf^pi~lI^xbp zJu-k^TN?%d6Mz;FKu_f#{yzt{iL_q>+msl(%!tTbs!Y1P^yrA3qO!=c?nN9Q2jztqN6i)G&xC)6SpBxP5z@0=Fh5uKJuXYTd}d*~wCbed zcxmU~|CrdmyuLMTg$_=>Gm|Ed%LibbNm55Pf$J1m4%OkVCr4(}2k+sj_hEh8Zwn&g z4gUTzn>U(3^`}g0R8g@fg$e!=@41#@G;)PZF_H>(SvGtf<7GbRr%0poE{T>@syrzd zu(Gd^^suUMv0Sa*ViB+Yyf!T;GTI2QYID}ctQo2@Nrh5F-I6$|9rJgef7?9WAh(!| z&ZM03gT7u(W6f@V=s(2!HD%SoV)>tvSgf}{NE)^vZ+IT->E#3LXj_dtUcPOO7s-$Y zdj70CABDplU17%&0`0B0IGn3s{h`|TAJ%Fh{A`voown8{{Gn~u`VTCxwUpqd#8G>k zMAwqi`%cgr8mr3`>{|Q%>fg!yIq9T#37x6IHz79m=!ej`?A902scm`hh5T`? zycw`gaOLKeg)@B%55;{ION@{AV+QDdjaX5kvW3QJn{ns_Nzts5CE)N$h=eMstSW|G z8gr5a)3IWUert2l;{W5xE49v~dewU5pMKYgJnP#BH;m+D;Qak~4T(`)Q zgcLYO%1CK$40m(G7-*7$5gxO#N5qZfehz*m|i%P%&jenSn zXuwImCnjr*Fc z%uwK3Ygo)I1B=ljw6gt0uisKqDIU*$(%QCG#xNuRLoiwpcz+aO#0-3ppUwJG8jY^$ zG%XN;m_ZTMqr8NvR&&)PGCw*CsjTp)*!S1!CmUol3KA3nm(DY~r4@&amG1PpbDG;O zTJ=h%5H+K|J~S?A_9h?pWk0bio|T>=5pSoAg&3IQGkS8anW>X@A-Q;co6v zGLmif$H0^;?H8GbJD!i%QCD59leTGI)=by=U=PhruejSO*ns4W9@d*qUfX#ICQ)=k zlRRcIklyqQK60B1y^rp&so7o>)o5#R0n_DcaUh$|Y9PK0#syRepZiDwzo_2)4Zp`F zD?~BZu8}eUrrL5tnBt|YSUDvo3J+5G<_p#d?UYlMVxNAt*addY^C=k@Decg|J#1LO z256A#ZY5dw9S!(Wb0no|rwDH6l8f~?6=Z0bgTQ+);EKv9O?5#SD9H9}(QoMM_HmYp zu7&ZP;KZF6QYkB=FXdC@&;~i4K*~|2bv@JCln0oLW&YgLQYq(8@N=q*PMlIcD$-Uy zpXjWOsb;^E!EW$$YF{T*Br9p$YG*x<5PiRAhq*F>@!P)9##fh1VcdvZQymrL%4Jg^ zYAI_DSAL_?7ZYS_uHu#vCm35kN-b%Rx0X-kFhBgbAs>s2yNJ9PDo&y@<7SzNM@586 zCP`u?sMLFifome>z)9_5zTZa`5|(t&c@s=DKAyd#kHtEOrj*&YyscI`qN4JXALQh= z3bPF;utB1v?aIJp?05S{$0rCsAWbO+4bCW#j3!bdP0lJKHf<4Bn^kqO1A*el!Qqce zi)ctZ)+?V0&>l_3DecmFMkk%m*n;|V-0UH`K-5o_k5Y-%=n*~<>SDJkqz@w> zyc?I(LQ7eNHuk08_~Ug;LP(!rCQ&E-FX{OJyF=?GHLn(-Amk?@tQ5=mWs*qP1=#WT zVTman1}l_4t5T%^)?Y4NKVu2dV1F8;4o6@+k15Ps`LS&Z%wFSF(g-D#Dx&QAOZZT?K2!WhE6^@a(&Qn&)!5ZHR>hID(2bY0_OVtqO;%M<>}LIGbB5wf zqvVAx=Mue|%rDU{kW2<6bZt51d9xbqV_Y9)&@c_*cQ{M`!OlW*sW%1EdDOt# z@0agZMPkNBAfv)vZn$6lZWlGtE~H48ZWq)Qfa}qj@*QZ(xsi|{q&N^kn#?PirCh~i zA?$4t-056V^vWWmQ+4}3!#RcjR=@FWOWEu}yviW8^SDf9p~=zQU6{>AE-dY7S$cS7 zDQi`2%2S2izT{ueZH@AVxs<_%s%2Oc%3)3#asg)4 zR?R)O?$W$atW4Q_a@b)$F1rVjoaEE+{Z$L%vi2!9ex?UAVxNW(QzUk~Wm=Byrj$mF z%lWb;>)p{Rc~#&5YjC5?H9FLO|CHCyv`%^pxMa6p>aI1sqzRCTp($y>RN;*aM3AE9 z@#+vp4LH}i%&qE4QySOH(>93x4wp9}Z*>NkF>a1+ z_z{#o&FLJvHgymU4%Sgm+a<{neIZkmN$u-x$lGZH##4?{Xn|PN*ma}SV|qSu8XGzt zCF4ty_lfXHLv+LT$>f=Hh3p>}t(_zFLNF1(mgi^C$(w}_?P;JmR~P?mMQ|$xA<@DQ z9Wt;3S7)Oii|qr-FiV0pHI!=%^+U{mhNYKG<+WG zbm}_Cc>`JdeS5J-Of!VPntqr>dO#qfxQ*zuIGn2Yu{n7V(ZTr)hN#g;_;Z; zuBe0Zm%uj=?Dk1kv32F}v`@%VC8H1&ZDK72^s*i_zy;#iS)bg)U_m(E6iJNSpovm{ z?#acmQFk}Ml7HUkdy5SVg%7##PpBtz#=0+#+8>^Yl`z3(;MnlBiJ*?{ud^^8ra%A! ziXHm0-$N5l$di9~g4Bcw>t%|LX_6lA@~@zJBgj5ASTsvF2PwxU7qAo5XLhlAOg^^M zZvn*t7$JYFZ=CLwO~(ri=Km>Br5c$vIMB3^W-Nh%8!@Ot>jVv&J$C2Vv`P%YoLv-L zVZp^6ui1?VM06e_o1SUz%=u# z#EGoph;#--JUsf?Qs~dK>s8GC&2bKvJn}3=3q|D6>uTW;i4WRZ4qadI3h)gWDzS_^ z2>uj~c*+l)NsT@p7PT;T5pUFN9pFbcivk-AjWHA1R0}vnkM>mgK4K_kSY$CM=09(y zwo@cJRpKoz9*ux&P*WK5b}VQlB=)K-^4?9tbp35EJ(&Omhf%Rtq&{ z@)je0G>b#WjeC6p?6}5pCG+S*`?|23(TeM3eTCMB6R4=LwOrx_)x&|5arU7x5C>6~ zqzUbh!Ruen$Oj#&SoCSvU|98}5zKHnz4*Kbyj9mkJvT#?(@;JKYw55!+0%dlsH;MVyyn+wqJ5O zsgk5l*C=<1IE>M74{BzH!~j3eget>S$D`Qfz@)$IF1pH2Gl{X2y@3gwiJq!yO+zUL zrzu~>;=Pkt5q9`Fd8+_dt7&oDE?f{z>=RG<3yZsJ6x%H?gfS-rCs1NEswpg)Ed|Jr zm6XGT-5X}|S%Wq6?=SIc0y9f|Tyb*MDLpkc&Nwx2FCk`jHK=;kf6>ij;y59g!+$5t zXvi(YwUmH0Axl3jErmMlay6!sI(G5NNytd9<1~!+(Y*v$Dy26G@kQ&yP4TQXeq2HT zf-9jiIZjF3!|8~kz9t89FQ*t{ zf}d$=Q=HavXU5V-2}oh={$o*s5YU>?7uZ&io^@EcQkarPZ-_OQCCqI=dRYSFiJ zZiclC<8;^vAiJe+TjtrvBl$>0p5Q{M&~Wglv6NlVvc8ff?SD!j+wAz`OTfjm zI?36$M zVbz%`znh@Au;d;{DoF)cDW|2b+$W}3(7~kVCpL%ZX;2X{{jIHmx@a?mjZKHGDMnW- zl*h5WkudoKrvt#Z06>G%^bT2WU*(V1Xbn_rSdOb;fB^RqoAD9z1L|DS+OkaLY=LkY zgpxSibG(o^W9q|NX6!l+DTk3&4ec@i4!2n3wR&z^|KM+N+3Wyry?U7tFzT|rH{4(h z6MxFkYG(XKWpROt(uTd1dZO`4OIYhh(?3kyLHddL<;Ce-gY10IX<9#1`TQ$XDe^UF z6JWWUXbQM(UUbxyde%CZ{hh@;VcW||Vi#E=!CzC041X=2s zbNd-vI*dz}e$035!6T4xn^vR8JU!J^6xk<>xmCAwthlMp6ddna3FyK2?g{VNyb{`RjoZuGDqNOa zS;Aq^r_f7Q0mSj_<8H56#c!8|rRX|qtJUmd@$9D3>PL%=tTC|htNk^v*>TU^FR;;| z#MKQ|)ZsZ?O)$|f=O~pB;zC$a?9nn%<=p1X-S^vb@Vy{!7%!Uy!M}Vdgl)0^dVGLG zG9j(b?uizps1`YhL==of)az3*g4xm1W7(?j>QSW$ z2iya5vP3BOK0JV}%Z_JgOB)35KN6^!iVAH>M>R%X(Sp0mTmD#9$>mY%7CK(nRMEzd z>0ET@TKQ=)qVN*nbvz!i(LGx{KDMG+L|Z&FFoq`JPQ*2Z^ggj_mC!_2ChR`6iCqi<|!wN=MFNAHBUKx)GCxuWw?=Q@UeqqdM+he7j?Y*rWKnXD<}p zOnwJwSYmOgi>U6yqaWj=5KX3cKeaert02V`&gK=K2p=m-x@jAHSWD4!IG$IBr^S11 zHWYt$$9BTytdW9qjt;R;DWiyKe3F>T^cQ`X(*`}B@wu#qnKo2Qo{?Sin#VtRRkf@_xnykV(=e{T3`U&)m{j@3EDak#)Ne zZ{b||!1d@7P3_F6)*$`|*H5qIAh=28acye9b{r8vInA&~=3m-(!}Ex#VC(vhj7X!5 zog^^Oe^i(UMrJUG&V1|3QX2RMoaxqf3It|FU|?H{*l=tEFYKO^>Ye93~br*j%t5e7|XrfVyD}d zY+n^V-AJD)IvfuhoZQUeUDx0pL7?9Gm#I`|H8A3j;at0Uak&$2IqRR9f;P2rYHiAY ziRAr3{ElezU8f88b9WPMZ(hHe3stw%c*v#X!1T|})iquCk$ zC=0Gu7r(ZpBSD?;ScBo%5lKe(-*iRg5x%5XH*LF)xC2Y#-c9DQyA7}}^Ju)m3Bl$F zX1r4Od=eWfCkO<2EB!j(n z?lcqjbgDzhJtfbje~;b!tS#%TV`^r8)4U7uoNJ{glVBVLr>U|+jG$^!s2JQ2?0*8Y zQebpEU%;&J{~4J5>ekv=THDw=+Sq&AID3A18Em|A?JcbA?LF{lDMe*U6<@wsW}q-Fj2KULWOj=?^? zZ@j%9e7^sG>DT|)cVEANS*icOz-$CEFe^Lfe+6dKF;K87|9|JNJ-vPX1A}#VL;nMq zotiEsnE4Md+gY=^vHAZ2W`nA+QLFutkN3WS*{kb9l#`nK)1$|So7cDZkIMrvL*hDt z>FnMB06Jd33!@%yFyy#|qj+uZU^ot?MPy5DzCh3yFkA3{QFa$xZ3SMV=5Z1nT8dMw zI21~8X=y2Lr4)w(rMMM}yGzjE65QPh?hxE1xVyV&_`mO+d+(ZAcdeNZk#)}5`R!+K zb7%L1n3W9w@mA#yCbUMe%Y+cA_)C#sY)O~|8_T3`>0?pJs!m5I5nK%axI4}Nk)b@y zQL0%}G+mrvgfi_CV>0TZlO7uPnwVy$+H`VVRmi6E^Orw}KFN7teW66H^MzWRkhS)& zwqGuPYl`bD)}kTQg#hxfef{1bdbwk%1OmTEp_b=A(Me!e8M#l?(y-nY{yuR4|YL;q5y(bFa=$WKcbkwe%i?XugG8vOqRsPv1{y|4yfNDhpj`&2BO>MZe`JG;8k{zDby#-OW5250 zk$hldHKn1SGXNUI7$wKA$roJlM>}ZN?QO^MPoS^HcYiP30{_`IV|1}(1@6Sz;K4OB zyok)1LkX#icC(`P_6k@&O0w=H9{;6F$rKQqV{-7#a_NT<8w37W_=uVpF~1L--^~m7 zAZuEn9SDyvwtiOE2G@v5MlrM1RQS?xKnX0dOQBrB6)+;VeYvtCGSjTunf`@e(7f&M zWsP>Odtot-2S@cW=HSDM_ff*f4ZC>{fW`ovCU(P8m3(suPOmdZoqE|jCMcNv$1!$$ z-NXAT)D&&oMhsMWSVt$P0U7yH-LD41cHrd2bF(s~XpU3$Vi!$;BTwex%!!qbM^`~9uhKZ+pddWHQZqN| zhOM|8NW)&qZ|J?BQ99@S;Z}cv(?QfAHSIq1YfAlGX$-C}2amL_$YLK;(Z|Y)Q{JTQrI#Vh+h3i#O+YzuV$L{!BgM+qoNbf+pV|wUH6x5pAa~s z4_~^T9}XT9RR=uej{2T_O@Ct5XuC2y z^`$w?xE)Jq)0_KDzz0~}3S$&_7CHTmyEz+DLDEIyT5O4$oQmD`?W+W=-17z30)k9G zZ8eM%NY-RLh6;S5V?Fb{`27p`wWEzfb=)hPNBdH7Q?&ALr=tc6VR*Yy*9R>erKtmI zRNQ>AM>DQq(r*2;Wu`W8ZHbY6*l)lUtWQjl@RgbfEmoEMZ0_GM zk3GYYnF7(Tbatp1-I;Xrq<#VY+=x&qd4E6>ELimVEVdwa{q1`Lzt44GFV<%DQ&O|W zug2vn5f3x_uSqH8?^P0f{086C%E-yjfLzDnMwD`S13&e?VSYl9qoap>x#5^h^2TAHr4sC?2pngd zno@~}HFWY{sRVv!Ro)-S(KyewF#13>M=b2-u=o4N+3t z=Sg^OCSGY)g-HcggW(M13)cO$hU7I8ua@R;t{jxLzh`AryM28_)4fiT-B!CPkib#$OZABn{O>U{t?$Ij|+E)>kcSbURlJu-px$^c3#@@U2Haa zc(L+M^3+cn-ZFY(bG-}M*+#KxLRAPWKAIaUsor@;h`bpiG0RMuFLAWdM~gyAp&9gP z+mb{pwpPc`;7s3tK##Zs-ERk~(7^Z{VoDA(b+*~IFIh#tq$QTvZlc4M?E>}0#-HEM zj|OjltZ#bcF#aB+`TJRo1U+|-L9KXd@_e*mRH5`&_`KGnB1uijm4$r z<;6alYiwgLLK@cd&K1}Ynsz;_D>D3;d~+Ra++pgFOU;o2uG^Moe9C6_$LJ!E2Nz0{Mai zD=i;9+7_$1)YY;YUSXs^HJf~qBdz$RRs@Epn$kEWj9b-RfVoSIapdkN;^RN2&HAzh z;<>g5F=k|b65Utv(rO6OsELY{-;`AnnppmMnfm+4T#E@llOp*uGlh3+UGaD{hwI8E zlL=Sk%$e}}PhPMl0%G~6>24@7kf-`2^`IBvCT-Bl9X~BAD0*@~zsmPHU1go13| zU-X>5fNFsf7C#|HZCPv6p-sK8(0j9dMi+4e#J^Ojzw525;79@49NexV@6^*JFZ?uZnIKchpCP zW@?`=lq{bPs;*psAW_YnSC^ZnB>a7ot(X2cAG^ge1ZH@VugiZx_H}m}mv1;7e)zW> zYddj-2R-W{;;UPZf|Z&lzjF@}+)kWDc{Oj+E8X>Lx1J~Rqiqr*-$Id=c#%$qGjC4&;5F@P1_c;F6<|?uyaP4){d>W+mxK4q%?R}3% z;HY;`Q=@k?#^iD0adMmN2ca_b^1O68x!P9x#gVAqeA}n=>>b&KHlQI!Yu@&>z~g%@ zZtL}KHT_0>S zgXwV3+J}dit(C{IJ z0v}8eK9r_jbOOGwpgw`Cex4+MQu1F#GfCbV`?K%*hUELlB>?4aeN82>S)BoiPAGTk zeqyA)d--0X&;Ul#Ktq9-BcFlB&VdF{_UAfZ=GnLMyS|E~0jR-1yW2p=+dy#v-|M~r zkwh$d0W>3MkZGcqw??qfoDb+T8k<@G@Q;ndZEzHGkSeLSH8k)MGthMo>&t0?zkcx9 zPDlpn%UR3d^2neIlN*Qqy%7;gVD^92F&jU-^YV&r4csl zb0H>kK?ML`VQ1eQ@4&%Z;J2stnGK1+-~3kH&Ds;mZki>`%ENk?_oL|s>fbNhn- z-hz-q0L9YYPQg*E!00ah=xFa~@{kz8!kA%GAm5&Rlyl@4mRJnUC^czNYa*DtKkx%Q zR^g5X2#h8cj3#!$&XbM_u87fUh||$TlWdQsmI1KN1wJPFH#kS}z(MH2@z=ev*6Q(` zno-<)vH$MCL8mbx715e5afM@XqB20q)i|mKG-qHU2#hoKJG%3CT+`y8Wq?wAC0ZHDag^{N2C#78qrpF1AZ0(UW1sy+BTE13=?G?*~@Colw5!e)4PvnjtXz(>|mdo)TV|Z&8%80#DN|N;L}2 zgC>E!LsNqrvz2di9g|7i22!vavn%2Gmvh-Bngv1gg~3>bfA$Km`khx@0M6uvTxW$@ zMMWj%1u^qQJok`_m(g83;EQ=ef$ZxJ(p0Yf?3YD2>EP_S&0@^Ge5=NSG!{^TdC5^y z$##EX`Fw_dsJ2Udu^Tta2lG7LfwbMi+?vKjcq5`|a#zM^C!sESc&ce)y`;^4SyhE%~y3_Kxfmk8d3UuLO?xMn{H|Y?Ta`m-} z1b7KhyHabuoTITMqOtTjvCKU=@6BN8?p@-VMnx)FDOO4qYf}Y5aq)iR3!bg|kWxi2 zT+Jt($01zK-Bc~-TrGxO{Rz9~i(84HHt~dO<<)#8A8S?fe5Hh3`l3(~JUNf8Fn@Kw zl=|i1D@9GGR?U~n+OODkI>L2^6#wCudJnb6O?5^Kb(X@FCo+{-u2o+90LGNMp%0}_ z7HOzWg&4*4K(;cE{Svu@nvh2C-u;r^enfeUVC}oXx;m^9S?pAbg;M81cI%V|o8pF4 z?YaZk22P^-V7ByKET{*la*Z`xL^g9vwz2e}IJXGer&XDv-Sh{mk%P9NwJ?wTp(Jjw zUY89DaI1GXsOQxxFwJRFd8kiYXyyksxv({wXf=Dv)k7?r=3Zu*#U;=rsg=-vL0)KI95a6?5(%Q1GIp=)d@MX{TCd5w0_W-$R}McXD)1xkOTdWtCJYG^h^ zYc_TPokg3UP|JB!;~I87gImkULE{|-5iSiFSO1kra;vXx2lZnI>0u~_JQNeBG|9X< zdN6mvv!y^q8w?cgO;G2_>c&53_wN+4*uNk@7+O_nq89L`u?!Z z->og&yDf&IDfXb|NVvngsp}18r$%az7EY(mVo%>xQx|qszD3JPV>zKt{faQN*YTy|^hCPdn|u6LJEClnzNEBgX29x%fL4!@<~nJEQj`)7lIqF{V`>?4mmB77Z=u42E^Zw=vlh>WGW18FH?pBFlAo5yB{sNq9nD`#qXsTsBh166CijijT0 z7iu_hdXSIst8@mvQb+oAfJg2%oeu;1B6w5mNT}^2zU^Zi3ZqwtfQzsJqa38|isI_Q z7ElU|6x4hCIDTI-v||Z;E7D^qOYqTZ_;7LRGHf`!Vl0$q@+%p58+l4xbSNsU#ILwZ z0(XK&2XJQ@DSgy$;GSv3F-cGg;CY(i8JnC|)ANG(dmzW>mk?(8K z8ZtP-L$jJPr9uF8N}4@IVN=3E^0>2Lj_F~XX)l~{d#c&*5V+kDE$>3z8{N5+iXr3D zIS_75jSGCveH3mPN!S9fD1`&s=W!KgoQB~LD;VWNad=BnmhMzg_*|#Q1eL6!YQ08u zUF3M<&V55AZGnZe#Qh$2GFi!wAWnH!`5V3tFd8^QWnmRE3u>0F{`@oXY=MnCQU10OPVb{8+LOqS;aiEC1 zL=o{iHm#)yZ*N{<=8~iMuXB~~!1jjjI*$iD+4>+cVhd^d9WZoUkBVMjv7=)I7j+2{ zO80bBhF6`+x&A!7XQi;3V11m>x^?nUy5NahQr6QgcBrX6zK-KEuD7$RaNO9s8#uOy zehkOe>v4QMo?hMAYX-8mjuR~`DB~U7wQg*dE#5BnhbnIU0?*W0oWi5#td}-32(3mvSyJ0)0|upc>B^EhibUJ}B)2;u%d zt=sz@AD8PHNUXOn2RXLYJ(F0u`t<4ejm@>pXwtd1Kf^(M*2ApDD2|EPN&hfnW&Y{f z_OMCo#M!qDK5BhKh?x1YeBf_Q^=0`2pQ4u2y!&b-R^ZdE|J#jRt8E~DfQHi{X@02%M}E$7{G z=_FSBfMR;K$M9U0aJ^sYgTKxF6{H_G1*R|3%YHmEAa*^3cim+DNdA1{sC!e>I)8n7 z&|da(2yO@Wq4CVUhVJxs76*WgDklfGD$x3Ltb4|NKhoD%#STm(&4G!%N|y?Y{@M|99a4F)})cJ62v_JUuf<3y+U3 zUtCFiNgOOKZ?5`fqF_c4Vii@-&t9BeUc;f2|C!i6Bal$BC;_mu9!QnJO;?CzDgIjo#FC{Qj(MEM7tk0Vqx|3*+y>+ z{jaj-yT8i)ZJwNBf&F=BJc!GebR+C(>(7Qc>2|?J1b3x9jJqegLM5!Na5feLke1tT zv}7mz}&{S7e!dv+*u@GVP8B92Haq#vEVk0^5;8V-h!FBF!hR0ia5b zlyHXAGGM1fUTP2!I6ftbl-OAu-UXfaiXuW3aksN z%e(}Y&iXQwv~YSK;Q`An5xrW4%1WWx*4@6!_tx5}pY@rFy5~{PM?_5i?81yV_kXpj za${6?$Co7=*0A(8eKh8EV!fIYTtUoVOlxe+M#5m9b0@>lQc@xu>igMj2F-bgjk*yK zHHS(Y6ONlj#G|`uKV$mqteMd|;R{JfR5(}jE2i}~$b_d&PNn4URgY)?y%6M&_i+>- z`vk6VE#NZ3FXzK!T#t*KgX_2WMpU!Ywl+)ZIm4EEcS~*#S(rT5Llqya=(@n33CFS3 zYDvtC6ei7Vn=fI&dJn%VS(PDK`lGu+DW%!&px8}eSG+-d3|@AVv#*IsG(OqA z_U0o)e(a8KWETYo3QQci6A|ulARJ≺&72cOlyBLqzRd2A?;t0AM{wCUf#$ffwdNmXC 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ℑ+6LZrMPdEgSTGLO{jAIe0$M5M|nzRp3y!YZXI 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

    eY_3b1NhfpM`OEdNCF+&b&Cvy_$(I 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 N6E=77jA=;!{|BS#4-WtU literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/MinValueMaxValue_Inspector.gif.meta b/Assets/Plugins/NaughtyAttributes/Documentation/MinValueMaxValue_Inspector.gif.meta new file mode 100644 index 0000000..46bb517 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/MinValueMaxValue_Inspector.gif.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 549658017be426742a56b94a5958b6f6 +timeCreated: 1508669477 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/OnValueChanged_Code.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/OnValueChanged_Code.PNG new file mode 100644 index 0000000000000000000000000000000000000000..969f29f5b9a73fca15b020c0acce76a21bf0214e GIT binary patch literal 6789 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ProgressBar_Code.png.meta b/Assets/Plugins/NaughtyAttributes/Documentation/ProgressBar_Code.png.meta new file mode 100644 index 0000000..3281499 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/ProgressBar_Code.png.meta @@ -0,0 +1,77 @@ +fileFormatVersion: 2 +guid: 5817ff65803edc24ca258286e6d2fd33 +timeCreated: 1518636277 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ProgressBar_Inspector.gif b/Assets/Plugins/NaughtyAttributes/Documentation/ProgressBar_Inspector.gif new file mode 100644 index 0000000000000000000000000000000000000000..7aada2459a19822b553d649a3908dd9b9d623470 GIT binary patch literal 14327 zcma)jcTkht-t|sTAS4exR0ATSfF~d-2xvl+ZtRGtp`(C;1p`<@=uLxyR3Q}UVyM#8 z1gTO4MFne6Y}gWe_j~ksyyrc4&Np{43^NS>uzqW=z4qEWE1Vq6ExZBJ1H10@9RV%ra5-O;UlOF;7)hl>$T0isBWmuCA`3p`i)GJ61C!LrY6bd;aoSvu5eQ zFtX7JKd$@7irFw&2le#y=Fpty_{Yr&Nz>QYpSwHT0LCJ>c?N&XTe5Qg{P~84hDI=U zXBopVS-!x~=noiH8~?CgO{39FOiWBoO&8j1F@s^hY0>hviyXWb!*C2(vUrL4VheL~ zbBiBvuvoFh!Zm2=%I%hxme$tR%V4bcSq@`$C>@4pAOpspG#eWmI~eQ3?d|PX{D9+% zErCujyds>ugPomSoISiH#CEcw<=l#`s)MPtQ#-wuf)pe$Z>nR`lpu!1Ox;g%nyPQ9f?@0o4+#kgg~2V{2_t-0_^w^y2}QeM@c4UR zM6mbnjo6!5yf?XI-@bk9_?$=>Y30$;(FYD3I0Pf3l9N%+<#OZV;^O1u6Jcc6B*7>X zB*VzBO-)TrPftI5`0$a6dLEB=^ytxJFp8=(s~e9WKc0Q^Om=x~PGv)GZf;&>U4DN4 ziL$D~y0b+^Mf|EdzM!?ZxVWUGq!dO~U3qzVC5-yks#Ah$7^jl z_G{PJGMM(J3uq_=ydrcyqA@b?Pb2sn{8%Oc{~g5OH5~W1{y0a713jt z)iUk6Q`IaYo*8t-5wem^RP#nFj@(^#@XOEHA&Gop*SePa`+dCGhvtO2$>}U9V6UIiEP)+-;_rPG$+_ z8JOMvr{?i=$1+VJ<4bC*u;J>(Y?%TRmF)%&XsT~K?e*iMsn$zJ7)OqvSJw({c{@c;k^T3dP}>n!D39`_)y`)y6buA2k`HI`SH~D3#e64(MG;Q3!E}CTbKq zx)?VI%oNj9km;LVv^{Az9F;Gk+;{!MYuYljIrzn{=kyUxS4cs3nJqE@5c)N-A*9#x z50PBC{P2Rrh-Xq;xeu%37nE0WhpaLR6$|MOtv)xjS7_EJZmXk6=Rpo)k+$~Y3y(^bz}GuJiLz8O~;@cK**}gES7CKU~fJCVeWhV5Mkv`Y7el zduMCM;1^ll-)C#i9lW?uZbN2_Rdtn;*7tXGTt^O7E7?58@)`q$AEhIbg)1)a7h;Vv zi?!CEju{F#n8iFYo{4ve8##lUGyaFo7sDyFD`s(9=gg+y5E~dX0q9RA%ydlI#N^=& z;Zm&N-~f}wxW?wS#~-F{OiEaYR_O1@3JW3MnEj9s(UmP`>e}7um*H*qQ|pD zvou1y>3(^)=o+Kft--cSlIrij6TuaoB zQ?ZyHmA(Z7t0>`OnfXkVT0cKwLC&~LlfeUsCq^3xkt)nEqymqcuq|l{A7OFDcyQHW z`B9GAO=0g+K}PmGu881>v9-JrgDG2zAYMYt8$H7@mMy9zU9Pr^YmmqWO15Pndr)T_ zKj603WAke82@8)Rw4i1mwLxJveeBx0jr_q=VOhan5055q{fbn0rIh4B_JFLOI8jq4 z;ujvyNa@hkQSM_qn9x>i2%K0a@Ktu4CXS7bIIloEK{3j;VeyxbAIH})pFq2k))v&Q zCkU8b+ckWUVc#=j)xDEq5DtL+aojh>K4ntAiG`gai3puH`k@KI(!?ec^+N`SuX}Xq zkVCuOG2zHm%_oyD7CYdVvKg`g0+cQ^MOZ(9&^WqYb@q5T)q&0(9*G*+v-IiAuM{gEw^vI;eO9I~_bD zNF=+Ag;b04Yk6bb?;6tOqbN?GT5%Av0j~GeWCJdkkJKOb&c2uWLEJ|ty*ixeI<4zc z-skY*vCQ$IX?@F&1I)t>nH8=N=5P9V(PO0H_?e*x3!*;`vg&r(^9rV2UQrXf+#2() z4?SGm@$vg`*x|;4N3M^S-uyVi9%(FmKlEq`*_)=MvpaWPKT6MFYBXut8&}2Q#}1aC z#(0OD%I3N~ao+Ula?VIo`I6x$?$Jxf9D&(d`s!qcW%;P%Fj8Y$kiR5TL~w=#wSjI= zJuR;)wv05_?Hhi&<@2ZOLQ;z$(e0U!s^z%v4!pv&Aj!T{hov&Fx#|#i``oe^<&F>b zf9#M?wd($Kjn~>-A8s7H>!zpdp-MY_q7K%#qvP7cgJ(J)xxI{1)R@E%*tCD=#mD0F z$Uc>`RcK1jx2>@h28Q(*GwTU!pXsWEL4vvO!mwq%nY`%fL z?$oUKB5@JXNAYGvTz4b1Bi&M2;RL_C=G2bxGWRL+(-(0)lk{ZgG{*fx#|}lMDa>3p zL*7xj`9TBHr$4I;=(UX@7 zBbsZzyvn(>zfKy;TfQHkH+Is(wws@{ByH+p2<3uv@fre6lR>3l=gRle!^-AveuBsK zs4`bRtg%%Ev8S& z?H8DTf73Hccq=57%?IsP0G=9GJw#HmoO@U@%#n{oQ@s#Yt<;CRQ)WiM8^G^ufh-Uq9r)j(h#? z5PB*SHH9wTpei4ZhVW=vb4ZR7RA+N<+I>v=1tz9jNjrtH9&gPmX#fB!uCFLZE%HvQ|yJ+9% z?nX^O&C^?&=0ZCG*6=Ns9u}W(uxT4Vna;u|cE=krVm1k7N;ueqR2jb@t_Phky`JD1 z<~r>_@CBGa`VKA++Z2?vEr{*74x661)=M0|8rl`!b#SNn;JHe!2f*y&;2e8!gZP8P zt+<_34C;Cs52U4hNEZhMr%fb%Uc9^H4CF7s@%Z>%d_4yVHkE~E36hEU=tF?8R}w|% zVTK)2jO+LC1(+a+kjIf};<@Wnc2Dc4Wl?dm8wr^b>~!yuEDjEDk>tzTbMQl~I|j>T z5>D{(Az|!@#C^l~!~`DU5Qt3*JZfi-iKepyM$^;=GN#zaroNjW9$BZ*^5}>nh2_s8 zWb<*Mqqr)bOe%AyFE6bl0Q*Pa&QFQQR$FBCmLHR2aFoZ6Et`x-^tx_QTl3n1praPq zxt^`3nzc6f`1XO|^#hPcTh`@OL3yUxdp2fAL}s&dv!mLw_fKXY{Fu#A%i&t&#BIz; zh|GzcJT5Ce9+s?W1^MyRa*tZ%W^T+q9+{g1pA*`03np_5Kj!k)@=Drrjc|(Tk$IK5 zd0L{J>dCyi+`QV4c?}l%3Y7e&$o$rgel5BAos;>uoAb}96?6^wUf5XBTjec`EV$TK za5$r2=wrdCn$n2ciSdmmjK_SDyc0LtPTZP2ap&U+v0CB1?-qsA8w+nZAs^=!&a@Ri zn=E|su~4E`^va^>&Bmg4kwqVJi$1j#eVHu!_OS@4^It_S#CsQFqxkqdzD!gh@&=#u zi4Un4D=aNm@+?-7;iID<+4f@18^!pjVyb!xQU<9FA$6ll4Dw3m=M|}KhqOPH(9}yO z+e*xq7U|GSv;p$z6NI*;aLL8enSoN9i-k8JvIDP>UR`KjUHYW0Y|*DOruxaZlO-6P z()Cd%XU#w9`H3(rB;6mCUCb+_(MeKqp$-#!Sx9=uFO-g!hgO$)K;#}VP=k=Zp5;&4 zkR3GAj6l|qQy6uz;$Zd3IL}I^^GS5f$&~g=@%L?&i`0=S5V?qk@TXQ-wv>d|(L?N(NM^czXDHTHo$ebJHdCo{Gk01q9DU(1At7*%_c3dnw zytKC4xj1Pll$KX}(X)2m41xq92~0qS$TL)g8m~IEy1F0_QI~?M++I?)y_zTiZrf2( zz8s!|(BPbs@~e3l<)j>h8brQELnwmNubfY-uu6t*oc=ab)HffxxKxnx>9npol0-vL zs933hSn3HT+p8WEkn$2aDT_G6l5?jcr_{;MS#qm6@IQj6fyjG>VCf73x>;xO2|ORI zJ6TO4iNPPKr)IuGHQ4;drItkqSv2}{qiK7iYCA%kgL=p!nL-G?b|9}&wm^fdLd8fS zISoM_h6A#;%k7OSo#B%d1*bI!n~a{;&Ol@`?bIV)wSRPrG>p_dzbQ=PjJ0gjo~Om( zF2y<=)LoXGArojoNUfSvnuDbzR=qs4`Vmw^6#@e7)I+F7gM*XuWC#MpW3|?}U^ywT z^i5uM-eB7`Ny|RV_U}v2?2T@hac+mykxVM7Py#SCgm`|7te`4%20>=Zw9TNUfS9*k z?i3SwG+34-K&UXw45^4OGl-^}4Lpb(5@uK=24qR+m|>N9P5TX(+Va%)JHdrFzZ>#r ze{R^3QlZT}XXRP_TpdB?$xO3I9Xv!}G`2@by33SNpdmDP7%82IXI5mVp5uK2b;1gP z1iW(=V$+0Q)X$NOPTu}}Rzb6n{H18*B0z;zS6&3yQ$#3U_4TM~%^|QM6=0Yh6zJ4g zO11WAwG?0`U8=PUsx4-~94|l`ty!D~^b0O1f4Q(yU8HE$eT&fjZC>?wbjy>Epvt-K zac;GuB_hxgk)MKCohCfHz3y=eLe3TGYE|bJ)uSjZqf&djws!{^mDsp;hZOXFo>yiY z)fR5m`h?JG;n`=dj-34zjHNVKF74A}^=&rl-{I9yZSM`S>Q4A>bdpLxyScNU=T&JP ze8TP_YB2|undW;Xcc9?bz{Ljxe9ep3=UpuGx~Nw_P+oAcD(zzRt&7D&7wa?!bBTiu zUV~#!gDnMv7n29uZw+=$`hJIox~zt}y@q=C5A_!eb!!d`-5MGhI*UXMU9=h=_Zsg1 zGBi;zd?T&II(Ycbm*Fd&!w8u^olm6-vV14!k@rp|M~p^BZVihyFTK(ndhw;`fnmeh zi>1#s%O347+I)pHGs@rTjC|i&_>hQv?p3xTYV-@S|LrrO#Ojhl=rH+f?@WhCI}H8k z3Taw`l~|0vS3_zDh|(~0$&E{&ChKJdK<`%5lVsd^KI!2oapQMTvCFx_Yvv>?ukb-? zg|gh(SS_SzJwE>B%E!t2yX}Z9R)d-l$=_b$KL3JQ?WIp?m#m_CsS@xEA`=9FdElyJ zd({)Kl6BVg*VXHdhZ}TL5idsxDlD{=N&-XGbuu-I)T+$wRgURn4rkBGyNz=;4;?sA zG=Fo2ikK*6q3{AgVIimh)k-H#vt*4pg{a%*xe~eiEbQYa=;6`k8&H|G89b0-NhQr1G(^jGSt$?W1(BP+vu+vQE;kgTq!PJTpX6QwlzCdCsZkw~ zfBV+++hVs4AIm!r;06jJv#ALA)V7(AAjA2z4!>#kriQtxql6BDoJ+;b=XxF4+hv2d zM&u@-WkoqpYsa+^hi=v=(#u0!Nb>Z%tklG{ZCV0sP^c&CT})xfI1B{`Gr(xEc?AmH-@?=3fdw>+e|+$J$^K6!ds zaj-L}rYXa+Ez7VWYVgd#=+de^V9kQDv~Pu%wGdoE%{(Eho73^}1jZ90 z3#bo6o$s5C07_Ujjd^F;Q2orHh%9(=;@cBhR=v3ZS-jwWl{4|C+f(0;nMbv9A|Y}w zMDAdA_Gyp@f=ghvQ;ct&$Sv`NA+{Vj82zcewJgg#wP@&2m zHI`L@?ll*_FshN;K0~w?-puZpQIj-JyOSPjBS>P*eJUxH|DyC8Fofi00P*YaQ$-C# zs(|?Jsf-F0@%iTY?=^jD^m99$>)!;Q|6tiWu|sfm$8&L~)Ux`VEDxUfg$*tbDfH?k zR$UeCmyOQ@U8_d*k6vJ9-7BNcR>QmSZ@cCaUt9mtHE(}2h9|0azPUiIYHWMg+*@6B zG8g7O1(aG*Rmx3_pz9#<)wdf`?U%zIN6Ka_NBxJ+xoG#S87gDCA_EV-QwVGEJzp5O zvnC*|uvi^I;k_eDy7#R_YJ|0@guQ!U*!p-bDtN$D8hU54g1letsvJ>?aE@H61#0?Aaj68`ZxPrFHDf#Y@ofw1M883Z0r? z$Cu~ZLeSsZ(C>&100DmiJQ^U-=>OED5pYw=1Mr{1H7N!U=>M!q?F_yL{u+irnHP}6~=R=iRNBG$gsvaWN%PJqNf2Lls<9f>~ZlVZ|9Kqv^9Yv9BAV=;>e`&o@faWS~OIylRZO0_ALoElnKFSw4DyUb?x2(EK80(J~feSEC1*T zBZe@PA01YywNvy6$GcbWjS{bUDW1GPmzcrWBVyxrrYajwbfGr5iZ0)DyFL&owjlx< z9YI72gh-qTO$ZJm02c+Q8~`W^Y;mHjwU~oCD+ed}-6j%_o3R#pRuVSKo|lG=oHLs+ zrS?WQ%_=|%`p*#lbvkT#I*0#1(=q!!9glFh#HQNXJTv%FV&kl#H+%&!m}Tr#QsA`P zx04NaD0B`e&IP%PVr4=f#~?&V48_Pp2&z=U2!#!nHdSBcn#%$r!RwGKtu~Psvqn``rurzbmnRmUl8SPDo}J4&O7o7*6&5(=c)s0!4RSB7 zwtgZ+GN>TMS^};hmsF|U+jwkrF$2-M%eri{3#BX(r*iL!oIFE63HKb(SkTJbv3Pry{Jkn%CZa2)fU*hj}K~H&$V%d+>71xFu7vhdz z^FuxUYRP_--(I>xuh^K9x>Oo5ujnIKZM8TA>=LXF(+p~?T$N}ZS&5PeQFxZL ztPC+qKqu#}Xbk9Si^jD}>iEYT9o`dtXpIvD#mdg`M(oTY&Uj?@eAYCy)xbZ|69-HLV~MA$Fl`TV0~> zOP(Xo=|)p%nzkm5rg@r!%X)Uh>B4HN?evW^$5y-%>s;U>feLM(gfEVRnzDkkbB>}> zSQDqUDmV@z`rY%#8SQ>fJhTghol{ZthY9sRDn0~LmH6*eE&EMXS>=ywE2`EmB7AM- z#HCuX@!q2-MizQSVS&>X-L%aQ`$f(So?U0ra$i!dQa|$1BM+wPxf7XG))VW4pm*TZhFTi+?Tt5`;V`)DQCp1; zUmvw;V-BAPg4Jxk$hlhhCK1=j0tEC7_G6-g6=0D-(m>W4m$mt#n4eSu?^EjtR?-j) z!0~K;nW!_-d@KROiN^(|)PG*@+!ZHx_K?fUiBAY5SJ8&$$fP0|HJyp>)LGvpF_A|J-zv=zj=AiDj#%=D$^=u?eoES04 zonNv3HcRJD1;PKGvhTon)g(`W9_JyNs||1)5S4yUuQ9MV9R(#ev~u%}hCoy_QQio} zVH59F8$DYbj>jp|l9JC57qCP*#yen5a&BT$7-8>-z${r#J1l46+}X&a!Cc=Z-J^>N zpI-=PjGxmw;*Zz7TYJhtpo0#X?3drc;_$&XEKw$k_2SmzH*(DG$S5Yu27h1gSgPkf zr!EBQl2pboY0Icp6wokjYIG~=ek!^D+T}gZJI03m<>Q7Mn~6jwok8>nD>yiC(hj+Y zj(JN(E&j2ct+N&=9V9+{LDym2ty+~0Kn*E*m7mw4Cz z60hP9@#^(Muy}#IuD1)A?RK$Xp1h;U?wO+&IzfsR?p%{?GFsbd-PmAhh!{wWZLwv} zxdC|j%*v~|RPCJ94FM<+Ol;cqcKdV0P|SuaBX1;p*N&|Zo8rU7LSwHsGJWm3!85*i z;{H1(6cp;EitL zZU8rjqm*%;RvjO?2G)S(1kGW*<6jy)L-}8J`~;Xn&c9Qr`xk`{zbGXCpm5rjY=B^M z9DPnYXaAsZBdyRaA20o~IlO@j-=x1^ zLc0?aJ$r-ECcsbw*G%ImUhiTQ!SGts%Ka7#SM?uVv*Z?pM8~4ZASW95(C}ngpQ2RI zwJ2n=>2^RKUuqio3BCS9mi}9FJh` zN4tqv$EkTfz8#y<+;Ta9sFnyNlem>WEB>z7B$)1lzv=!jgHZWx5PSY^5Cg|_=nz_- z%j!Eu^Ie8sJyg){=Z?Sk@#KhCqtODVi<-`v;$Mn|^XtA7MwH~a3v83J?Hdc%Zd+@y4kS-+I^bgdAL-sD61As8un}QX zgYvc>a6~|$z>I#=8v#e$h6hHzTZTttQQNj;fglIwCYs7#@Jz-tqj_f{$z$B?eJWaH zKZtK{pz1V_-W`?qp#wg6i`Mvn0m zO@%3p{!QV3EqWyMYjZdKrC19t{LsQ1522mR*0wSI2C`|knHjx@wOnG0^6E9N4`LbA zo}nt2hjDzD9LMDe{jcgM2{@9~ttRN@l{iz75<0;$E|k**=hU=vnnL>UloSMzrN%MH zBpW>g3E;Hj$U{AbjR?*nKs}tNrI{f@)%T7g3_N*uzdSZACf4-%!Q3lYejTfeuVxdf zdWow9#y*wn)r(N1-4Fe&1j0vJu_j=By4>(h9W3tdJ$n`q7cdkKhwpD}DFIm7nS0jM zx*ax2m(Dh#CM5i|oo4niTKmWd`+^D_Mn5Es8hRSGk%-`;t+ehqTvdPW&8*@b4B4`t z*(@uAdMMN4JP#7t`HijEitX0n03fT`4Nxe+1VGh?=8aI)A61PYB_yn7Xj9Qys1qM6 z)PX{!gHLjtg~MnvE|RAUmg>gcPcy?3{!ao+hi4J_ud~pRN&EBB%N)|s&qptqx$rDZ zOL1iMN(DWUX&g=gZGXJLsnNSL-+aSSyvai?S6~_}qdXIXh(%&LL0GTYAFn+Ftk`OM zD%Tw~nq|&n$#IV1sW!D@MKT9ft#P_q%c;vY!9-f3EQECJ1jHrzM=RS~cJ@M)+MWwt z0FC!#%VcimTs!T1n0m20f3d3nWInjJ=-^PBE;dx!q_iLfY};5$zY?)!m=+5g%fkd# z+q&>hq&8jRKinZkyy&Z2J?RZpc3jo7wu50FCeJZNr ze-iHzn6Q2SN|@F^2?P2+2rEuJhPI{>5nL)>0mCQ=ae`HxuXq2+tz^lXg%S6oCaJAH z*Uk5KtRKIX)HrVikw{T85YH)Gh@Fp!6Z}$fB*>VzCC?1ZZ*F?h6lzbPYQtO_7aqf# zS)1cC_(FJX14pq6*%k|~8O5=lw$$6=<}Uno2*cQ#=WrOVo&H44rc_mB2?|Qns&P+R zf=+1npmdtG{!%fEzu->n`A5`>Ep7#3>~a5lZjGAAfPf#7LGVnd&Z$p|UuZnCxh5DU zzW<>9Q~^~fyii*y2Z#}6?2rlY;mtnwzCJyAPI6#+8xD)vI7$MRJ&jjUb()w#lwt_$ z?tyeSF+gI{vXvRD^D@WqLJ`nCagaBRW^KSGjv2$CL zyF83^%Pu<^$TyX)$4uqi&mdv`)=2zon9G1?wfFa|{^`}KGD^^&rwC`wpV3(Rr?_V) z!^crJEorqsBV&&5ML$YOnpwm%N2oS(;ao<}!q^e3+y|RYh-6KGU-c&Fauz+_SxZgV zww`S+L&L9Xrf_OEIq{N~HrF~p^5=RMmXG8qHr)k+y@tnYCp(m_t%6|h$YhW4T2NwD zdXt>avwNFw!9Lt9PwBRN#9`d(2P4*?IHx`^F3P3H<-VRa4NG!HP~||*<&h#^#WV?3 z*!F$A!lGZ@E-6gEaIij9Q`GFC|y?#QIP5XFUl;$H!cO*@7jL~c=IQ{}rvXrj+O zV^pd~{gYU-ktDK@<=VMUqsjA~fciS1?$7kwHC0{_tJuwAZ0^KGU3KH7UvGH;nV;LZ zX%#hM+f?}ybDqiuII^+MG=$Z{P0mB;&-fde^mIZomMyfYXxpl%ZDcTUz2>?=t?7Qz z2E8vTvmz)|*mGs{IS3mfkw)L5W)6e^W0aGPk!a=Qpn(-t7hv4`fRS$~8 zsBf}X+ZaoGwx(zjWfiEvQ1+TzY%g+F-RiC52&nkRtG2O0L*Wy?#sgfEAabV2XU*fHYz7y z3kh^f!Qn37W7Grw?bs@fu^Hn5{?8`I`_FTo^qh%=6><80{Axw3q`()5gi;KrTlO6% z{7xTV`L8C&%Fpq@Gc5&zhI%6DtJu{f;;yq(4$wt+L|hgq^@}50!ednwl$eFe-8bR4 z$L{zT#=G#oA5D%hpPCHU9!-kf(O;wRRiL*0yDr?~#5n_Pd{h#F4jZz%_cJ7&v|c98Fd}`;nP3b)+hoy`K&EkC$q3qCf5Ucf&Bv?L(TkB88<9%3x8O<-R$3ZVuc z7oimNCfYZr@qV=kxW)&li`(v3Me}09;EW6z2DqvVW3_KgXw}rLFGuZ_YFmM@5ym4V z{vr?@*Xe$IdB;MQ`6htpu*gACVJzb<tn^(^lC2c3mL{ruL4qao#ipLoqGUCq*vgR%MZg)M%L&yN?j_UYQTDf=JC@Dq=s8D)A5Xu3a} zMmU5{VGi9s>aQ{Q{WTa~m|9b{y@GA3?g6L^xdc#5yBh;^(Ccb~ zX8FufKYe1+JgRmRif2~Xj-!s0->wM@MWFqG#|1GRHVQH**ez!KakmfS!~-HK!)N!N zQ$4Twm(_jyc(Ytuu2rM8K?}v4qjW@00~9I5l7`>^DklL8ZhV(|&%x62BRpjZK+k}# zipJvryq$m(A6DLgdb{!Uczc6YtjT*p%WTfQ&YY7u_(q2{HVI#)BXR-WY2G$CorrY7pLDg0e4Fh zge+ri6)e^91IBgI4_l7m0Q`DYyIl5_cZCIBZM(2I?Zannbw#Kj;f$_7wvYAXCe}KR zb=_V4I8x0DP6lpfgr=78`^&xpgoprWfX-w^;Ijv^?&?c9)U8|%O`vR^tk4nhKyUqV zBTAR;^s9%L26z5X;j9RzFz`2p|L_7?j11?`G>dTjk!DvUX)I6arXY3j@jq)rTDKFR zI&arBZ_u~3IzOHpd^}z(1MZJM{{-)yNhU8Hq3)_@+}cwfyQuo{-fFj{AVtuB2!|3Sf?Rglr@_Z_N6rdizOFy2PcSP+Sz1nVE%|tB|uFQ zB}ym%&C`j-B~2$Mm(GWe$=cnP?>RBeY;AYXr*2U9lY!WJ!UKi;c@x07?o_J65&Qla9(*aNsfK1X>D&SrI__|g@&q|X`)iDAJHxMkxfzKT~ zk7@({TD4hmjF&H7} z`;p{kuewYv+&VL~Xwb&AaAgsCW4mTGT&#g*TI@;!xX|IQ0^gqCSSVB(Mux@`GYrN~ zqi6X|%p5axgQKOM0YKAD>Nniqc7T4x(4$12&Ng61Y;(#Z8+~ZPQoB6Lp4U26SxV~e z%jsAdJ&slZ!}a6>5Y!?<#s1p*;x_jgzm6*Zk{x#keqB^BD9dGVCmsThdAfSp>Vajd zALcmO{8?P+2K_3GJtkY1tRh4m>UD`+^sL1H*}1lr4H7Zz&{Hl>If9rodk+_?5h;SV z;y5&blmJ!pg69_yW`8@Hl_3$X-=pKlU?^6`iO^^_V8gsBZ=UHq-&o1UNyjy3ildU? z_>Vgjier#CPTYAL zX3APco>m&>U_T1-L5bKTtDK>>#(B07fU61LaZd(Z!6PJ`-TW)3iPlyIS6*aWgaU1j zgh@3-)ft@So`|NQvCCdk(h!1_%0!Ix-r3Fbv+JfHxT=iith*ftd7;SqqH)OvxTbeo zhvch?&c~=4$gP@eSc5b2`XR}#8^V|@u0d$jTsU3Hh}{Ju6bg&NvKBdaw78d|=TPU0 zazwGmdeWC*egMIVP)y+Tulp!3jd?@QoB?iyN|4 zBa)599iL50+V=v1ztv{DgQGigB^Ie@qv^-t3ul_PyYy`Pahwx$j+X9D;}qW(b>L(d zdT5b9{Hl8xT?ubyy!U7V6#M;kq%37R2B&5e#>dT3=Fs=aW?tRM(Mf+GM0vfn<9gb} kgxy6cdSIvtsvFnwQn22bV{lI!rU2%a1l?!AVa)RX0bk_-sQ>@~ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ProgressBar_Inspector.gif.meta b/Assets/Plugins/NaughtyAttributes/Documentation/ProgressBar_Inspector.gif.meta new file mode 100644 index 0000000..b106c8b --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/ProgressBar_Inspector.gif.meta @@ -0,0 +1,77 @@ +fileFormatVersion: 2 +guid: 631c492cc54906542851734be1231fab +timeCreated: 1518636277 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ReadOnly_Code.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/ReadOnly_Code.PNG new file mode 100644 index 0000000000000000000000000000000000000000..603149b523ec135477fd156546b8147c03c7d4ea GIT binary patch literal 4018 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 G?SBAVTH>Do literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ReadOnly_Code.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/ReadOnly_Code.PNG.meta new file mode 100644 index 0000000..7772c2c --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/ReadOnly_Code.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 869278751dbd45549a12050d9fea7425 +timeCreated: 1508862811 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ReadOnly_Inspector.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/ReadOnly_Inspector.PNG new file mode 100644 index 0000000000000000000000000000000000000000..aaad6ae6204d5ed4e46eaee888e02ed56fad4c14 GIT binary patch literal 6273 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 YsBnr+dzT+f_-#O>qNoY3eq|Z)e^9z{ZU6uP literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ReadOnly_Inspector.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/ReadOnly_Inspector.PNG.meta new file mode 100644 index 0000000..27e94d7 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/ReadOnly_Inspector.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 867cf9de018b6fd46a306be250cd7196 +timeCreated: 1508862811 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ReorderableList_Code.PNG b/Assets/Plugins/NaughtyAttributes/Documentation/ReorderableList_Code.PNG new file mode 100644 index 0000000000000000000000000000000000000000..23de97ee1a076518d716c940a6d01264c285db2a GIT binary patch literal 5388 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 IwGo*A0&NKnD*ylh literal 0 HcmV?d00001 diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ReorderableList_Code.PNG.meta b/Assets/Plugins/NaughtyAttributes/Documentation/ReorderableList_Code.PNG.meta new file mode 100644 index 0000000..4a0ae92 --- /dev/null +++ b/Assets/Plugins/NaughtyAttributes/Documentation/ReorderableList_Code.PNG.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: d62a3181965d92a42981ed3d66adf987 +timeCreated: 1508669478 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + 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 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/NaughtyAttributes/Documentation/ReorderableList_Inspector.gif b/Assets/Plugins/NaughtyAttributes/Documentation/ReorderableList_Inspector.gif new file mode 100644 index 0000000000000000000000000000000000000000..bdf80f3a8cf35adc0fb0a3b1ff6f58396a7f9341 GIT binary patch literal 116020 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 z

  • 3(ZN|Ckx??6 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 AaR2}S literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Scenes/slam.wav.meta b/Assets/Plugins/Scenes/slam.wav.meta new file mode 100644 index 0000000..8efc450 --- /dev/null +++ b/Assets/Plugins/Scenes/slam.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 1ad39a45585989f4bb1a2e1be5b5a46d +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Scenes/tada3.mp3 b/Assets/Plugins/Scenes/tada3.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..04152c334e4dfb853e805a18295c9cbb8a493ae1 GIT binary patch literal 37951 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 + { + } + + public abstract class EventMessageAggregator : MonoBehaviour, IEventMessageAggregator + { + readonly HashSet streams; + [SerializeField] [ReorderableList] protected List Messages; + [SerializeField] UnityEvent matchStarting; + [SerializeField] UnityEvent matchComplete; + [SerializeField] MatchProgressEvent matchProgress; + [SerializeField] bool debug; + + protected EventMessageAggregator() + { + streams = new HashSet(); + matchComplete = new UnityEvent(); + matchProgress = new MatchProgressEvent(); + } + + public UnityEvent MatchStarting => matchStarting; + public UnityEvent MatchComplete => matchComplete; + public MatchProgressEvent MatchProgress => matchProgress; + + public abstract void ResetMatch(); + + public abstract List ListEvents(List buffer); + + public virtual EventMessageMatcherState MatchResult { get; protected set; } + + protected abstract bool OnEventReceived(BasicEventStreamMessage received); + + void Awake() + { + RegisterValidMessages(); + } + + void DebugLog(string message) + { +#if DEBUG + if (debug) + { + Debug.Log(name + ": " + message); + } +#endif + } + + protected virtual void OnEnable() + { + foreach (var stream in streams) + { + stream.ReceivedEvent.AddListener(OnEventReceivedWrapper); + } + + MatchStarting?.Invoke(); + } + + void OnEventReceivedWrapper(BasicEventStreamMessage arg0) + { + if (MatchResult != EventMessageMatcherState.Waiting) + { + DebugLog("Not Handling event " + arg0 + " in " + gameObject.name + " -> " + MatchResult); + return; + } + + + if (OnEventReceived(arg0)) + { + DebugLog("Handling event " + arg0 + " in " + gameObject.name); + MatchProgress?.Invoke(this, arg0); + } + else + { + DebugLog("Rejected event " + arg0 + " in " + gameObject.name); + } + } + + protected abstract void RegisterValidMessage(BasicEventStreamMessage m); + + void RegisterValidMessages() + { + DebugLog("Registering .. " + name); + foreach (var m in Messages) + { + if (m == null) + { + continue; + } + + RegisterValidMessage(m); + if (m.Stream != null) + { + streams.Add(m.Stream); + } + else + { + Debug.LogError("Unable to process message that has no publishing stream. " + m); + } + } + } + + protected virtual void OnDisable() + { + foreach (var stream in streams) + { + stream.ReceivedEvent.RemoveListener(OnEventReceivedWrapper); + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Aggregators/EventMessageAggregator.cs.meta b/Assets/Plugins/Scripts/Aggregators/EventMessageAggregator.cs.meta new file mode 100644 index 0000000..fe8d605 --- /dev/null +++ b/Assets/Plugins/Scripts/Aggregators/EventMessageAggregator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 16bf0b72df264fceb6d2a759afef5e0c +timeCreated: 1546273811 \ No newline at end of file diff --git a/Assets/Plugins/Scripts/Aggregators/EventMessageCounter.cs b/Assets/Plugins/Scripts/Aggregators/EventMessageCounter.cs new file mode 100644 index 0000000..dc01662 --- /dev/null +++ b/Assets/Plugins/Scripts/Aggregators/EventMessageCounter.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using TutorialSystem.Events; +using UnityEngine; + +namespace TutorialSystem.Aggregators +{ + ///

    X%=k|Ik%c1*({s~vTr*rV&6H+}>Zt0dR=-yN#XlGSz@v>O zuOD7NZkOIJeVqR|pOQ{VSN^2@X*y;)CM_Z@A~Gy8>@K(j#$S%Vlmaa;T3);XP0yR2 zpAS19CKD+Wx&O`nH$NkPMy9_`f9)3P7P{r>mZus|G@jfKxgX;2+~GM(C`;(-m#bf% z1cXpRsNGAumwK=DUc>8tk$F*hQK8YH(GF1#QTHS6M=X1_?A6y05d1Z`@=@iZ|J}4w8{QV=vp17Vkc6TuTo_E%Kw$`RN+)X`APZt zsQppyrAYVgXM zcKXWnl?et326v3^7@aabWeQyx)|kUb$3n;At>s(GP^(a@Rko{av7PRW+Zi{f?M~av z{mcDH0i*z#12PBH533(8I9hO2>4egW@-yXU{%_;$|G$c` zo=rWQZ0&9Bqt`^QDc3F64NwkHZV_z}W#(e$dOH7fUT{osOrckyH?%FZ4f`E<)p^wg zR0mY2l%4zlUF-m?0f;YrVzHr zY>(}N?Sk_jbU9Wb%+WmI-+c@|Hd<^)go1~lM zoZ_7F;`58od}(}X`vJCLZ_C-1BbOzYwJUX3YQ=|&53izMMN7Pvc%Aw@^*P2e3QrWC zJO&*h9U)cEs-79XG<D}48v-r-!OQx4h5$qA{{5~tr31lDFamUCb!FA%)#WcKUQ+B*?ouvSDOcIOV)qJ19Y>vXgLH#0MqiA! z8*VpD)lbzI24_I1L8t-4Duz|Iy0*HT)i_u}ux4Mhz_N`*>=3Hb^6@VGel3w)$= zrE@FuEAu6bB#Vxg9WBFmtRZYGA1E0pDf(9Qt>SCN*Au|8(6Mk;(W;`OrAJGds+g(_ zYYl6+G;C?$Z{%-;u7|a*Wv*rT2NSXZ?oSXRzIwEZ*p(C)^V*PbTD-AKIJ~;4&e@AjBAX` zQ^ZrGRK8UHjm8@dyk=s15xmCZ66F!)v1;3@ZP-o~u`^<)$qthpUR%7j++KfsJ*y3? z%@>m|COs>AR&LkcuHCKEt;4m7Yt>_m#}*}yC64(X`5qU&FM1dG75VY*=H2b<=li#B zW3N}Q7pn)W$CeFSHiSBbI_2Bu+lH(SS(~srVRf)UutBkAv1Z@$zU6j`c8YlJH-m14 zZUuWqd&QGVCzW&+brlJ61UcyHEqy8fXtr7=}MSwBfLO*35uWK3mDkx!6Mz^iK{uP?8U><`%=??&&&#LC1#pLi@=EiS=78RS zo}-bY5v?(;@m<5ahU)t2`c%49y6?2!X)$XsYlJ9=D96dg$(2Z!NFIqCiHHh{3JUTI z@)z+H@m=D-#7`thB=}zVy>NzDhFFJWha}j@WLAM!0J}81w27pNBu*SB&JJ*hafpeD ziiyUF#EFCf34j$~ENm>?DcC7!BVZ#i#W%&L&8y8j$Ti4CiY3MV$Mhc)(uq97Jj0+Y zEz?8O!>c=2cRsCsT7xy>;`5p3GinoR6NDp#BbEJ?{pY*ScgM8Hv>!GdHXYX;*Ns{zP zw6nBhabj_jbCq*FynJ{$6R5seeNo>@--+Fx-Co^J{ogJa=@Sjl8J=6WTelms8M48* z!nb;8{?Odo%-Spx5U>!i=(p;(GPN_cBXS^e7o15!}x}=jDd_nr%tC1k0y`i zN41Y?qe`PnZ{^?0r^=+t#7o9Yo)bMMTFhU}e~R-ICj&DBGcPqSH3KOF=^x1R25H*C z-0mE@Qtm1rC?CAXe~*6ya|07Z6GVe_?jTp@tmmuedoBE0cwBs3Tv|q2MomFY!Asdo zIb1bdbw_PStx3H}T|z@bg9zYJ=TWaysZ(i}Z3#58acppG6igIM zAgv2;GjB6fHB+^1iEW8-zHxqWc5ya3(**tw{N0<>oAlw=hhH4g9MOE=_`Xd?PDfHl zP)9I-Vg4czA`sI1vG*g4_dm?Moq7A^&6hV@ueV;;15E(O8;&=hfs=1fzKsN;-bK9w zxx|Nzj~O3lgJ*;NL;OPmJ_meW0D?nZa=B?e@^v9>X`G2efD{}B-t5e0ul_=ow2DSlD>0&>%^*2vb#!sxbmtwf9IsStQ*2`#WE@0##gOHYL;r{VZ*IN0m3t@mj@v!Ae`hM@2h0y@0%`&h?dJ#XkmHsNts>-U0X^3gC>#*xk9aJ5pn5CGl*{s<_K6f*6Gjb1l z5BgHJQZ}$kaa#*o3rdJeh^C3Bi4RH+O8UzB%9bdVC~ckEI+badX~<^9W`*yF?-+hL z{BomPqZ^S2k;f&^OP=q&-+NQ}Q2DF?mwhk$CIb@yy&t_FI}q&~?JMXb=wsz&<@MD4 zse97pq|4tge!rM|A@>6Mo@4_y7i=y>xJ0--b$#l};LPBh>5%C_be8DswAHi~yBWKg zp^>4{P3@c7O)5<)wKBCbvZAu0wtTjH23P|u9s?eOF1ao_^777a%x@sySWkaXzj=pw zhhMW_Gt%}&Hbge8)vwhj)+N@Rt~p(kU6EbESHf3Pm0y+rBj-oXc-DB9R;E@ae>(ra zz-h@u$wcW`>Db0^jo*HT{R}e=H4XLp?DbhGL@DGl0KXz3R-sm*Ao~q_5%nVK+s|)5 zk?!Gj((9zgw8k{69IKpw!hk~8QrFV#vg|V9QsL5X1>XvSvVyX_Q@m6B~0tf@I3T+=#$S+K8J^dha>{ZpOrr=g(`(!{&M+CW>{vJP=ruKY-DWYxu|ndpT2$i z*7?2jyX6ndA9rK##`2`_qy*#yYkN5KS6Q zs!6Fyd6nTR!zBA8JJRBUeM0D17%l|AV>?iCW zUU+z6;NrkVQy|1S#M#in&>_zz&*r4rNwWZh0D}vsE}VL!_(ri=s#(fk)L#_+_bT!! z@}ZE~Y0ha*5-bT8ESJnERIh`wgHjG7he5u;!Gpnrm)kG5(^u11=ix&!MKOgkh#>Z; zAJdEJ9qk^4$@gyeP|r}$R_|8t_rC9a+r8VpgI$ANs4POUPO&bgG^X@??)hAbG>SB* zM5n~bxXHNA*v?q-U*f+WBtA&oOWjMY&8*E-&Qs0{Eeb7~E}t&P)MM(g9oUZhgZBrK zh7;u+rR}8cAYbjdqjN{J$F#>tCteG<9lIS{;aTCmA$UXZljJ8!C3z(|JrzCGIhu1c zb+mP~NJFd0pvZvETLG*AtQ1%ZtUZT4M+vqBi?j+PEF>%!m@hC_u~xAja2{~x3gilO ziFb)7$R)^4sZ6OHojN*|qm!egKDPJGXXj72PSiLmfaJ5OX``cE!z#o5sGzzV_bs-jSY> zo&(nguDu8JfNYO!kH_wh-S4>FajUpgap}I}ea9S|92=W6HfNB=Ec;aUsR5+{B^qfO zX`BE~;1BB`*5?$@DJ<|T@R+ukwj$>v=Q+kX#&ZU82K;;cd%kyl?}`JSbwBIo?&0p4 z>YnQU3KaJg_kgUZzi*^(q;|6QUjTLBY~bwM>9^A)6C@L)Bcvlz15yL=J@GvtU+X;G zcDfBl0!?Ta;#A{Qqfw<%l~IvVfh)(AKdg9Ifp*YAbwPC?A!-h23usdS7@8QGf~$k8 z^-J_i_H*}h)iTvG1=0l4+Edz7kk80C!8if?3;Sz2cKV+e;$7^!ShS1k1dtblAf6z8 zG-)(R^|$Kp{rvrW5-XRfJW9e#CynATuUu16+w+iI+|+orph*KSEwO?G5dX<(1_XaUf(hWHoI)ZGC)W zd?OD){#Qz%Ypv^_ce87yYXxaO(x%d;P~b~$S8f+!GhuUZRd7{7aY1o)Zgnntzj@_& zZz1+Rr-}t}rgDpxBq-g@veA9d|3gXfg{~)idq^#to>ZTfaD)7`b-D|qC#nCqD9VcuchG+s1b4?G@tJi7YmsuV!wLFLiz z)$VoC@1h?ncwxTBe2@Jh`~Tbv4?Y-t0Iw7O(d(nv)7{hE&s;il=|9K+9J}ng?A}?w zvp%pquxvMPHwQ_y*~00C)3TgbnndbE>S&H3EiWyl`Rn;n%Bm4bv2 zD?e6#)I`)oz>hgt|DFCjbO-Z(?fn{l#R9`$hX2#3Ek0X(#sQ$u8UHf=8EBhmo0y!QoK9FsSlD0NUkky7 z;3V)R@I}c)$zc?rf{KfNjaZ#-pIzREa+_LXz1u^>uDQk z8ED~d;%>sL!>dDHy3>WH3(sVp$y`rdPxO!WkN)xX$5*c~udt7wKYs4|)b$AiXaWMC z1wJQ-Cx>VK$oj#T$d}lW(UDPFP+IW2{CD|w?RG87`TN-Mv16`lt}C!7u%{7F04%yK zy8XKRx*!&ylcbBJOAHVKAdaT1zO%k_;?KmN!}h~=h(2rOY~*Z2+B($=)ryy;FH4<( zn(~@*!5YDuy2iT3rS_%v9{8Xgk(HhXDnwVHWIr9Cf_+=3Oj{`F(xkUip!MC)L7qG-%`_3lS_?Dtxl;< z>7?RGMIi+t1*DY@0>DZt|4iYT0@_P`Qv0O#Rr{;+){%D`(t)<@Qd)R)vZ184xyxts%V1km48 zc)jp?@}=ZUza4)&p0Yb-=W69@m134+7Ge@&;;!ee_gnq9`h@I+Y_m|a&@B5bJ6POk zHV8Ke{cwJ`sl};9-!b1Yj$V#l7-zPF6u+gWv8Iu~p1Imu{)I6x!tlF$X+9yX~9e{|I=Y?sw-7%6>Al2~>Bmn!x`^6879u_$lI2T~^uz4goBsqJTdztg;^XU$04ryJ#yMEWD z)usK@JLJ0LJ}G=s=w9Mp!e7c?T3uXSyjieWkd>R23lhZao0&H=g@Jon_p)YlXLDZ` zzbyV<^}Wiv$-2q0)3NjJ;N3yJNxjL6g^C5+4cm?0z23c>csKEqiIRzGF}0Z26t5|s z(mbUB>k);vV8Bd*=Is-C2%Vq0j>vr3A+px1?XM@iLpPM*4adz2e*@n=P(DKunPiHz# zcbs-Nb2oz{pH+cnfn`5%+v>IzlMR#2zTLiEl|z+7kaLjpZKvB#kDVVos{%`oOOCPj zvGyFc9JcV-H=j3}H+rS>N@qfSLcLb0R%u>#Ubb7JTjH(oTVXOjGQKMuS2&Q?8f4;h zKOu`0>1%h;hBP7T+v)v&d@zPk>R+f{`Xg_WmEPnW(gd|!Av_jC^BFQU09 zW*jsAX86r;dtZBB|DXOpGtD#2$@R(gtaYq)==;Fd#MXps#kJ1=ng0XpxgNcKy?)U_ z(ZOy2UTcHM!-29FUiH4}W$9w+GHx?&OKM1JFswGL#+GBtX-jBJ9v40?EXpg&OUO>h zUP@m|r%k0z4M+?~)QH!Jhc(HsbN~k^#4E)A`Ss^lePVrLPHIjneL8*m{mlEBMA<~y zb3k`acTQApRPI#SRM|n}LF2`)i(R8bqeE{e-cJ0O`7v{0{=&TKlIju(7{B!u_(95BL!GXcCfw2MAe${@eUaDTbZaozL+YMLYp5%e# z0f-eDm6?&5@mls;uG_BL21(vA%7xOT(xl3x&!a~fr^Rf=Y@G1X)a1PW!gWZIeT*Lo2WjIo!H<>td{1tlPN9xW~e^g=>i(i5_@vcy637oGvgH zvbVLewc0h^H7(OG)6dt;*L<(~UX@RYPpLzpL!lp-2Il1FXrcit3{6cG(+4e1fZ5yei8PK{E%QoTi!MU!gtYV!`O4y!BH zSFD#Umo0hD@SM44aL+(kQ&Bt#{P``*%;9nks6X3a`L~E z|7E_(d=nZN`cG?$0&dQ{Kl6Secp-S{%hH#ZQ7@x%f93u%`fc=EIZHVU`KzDgJ;@UX znsS;zoko#!45${U7F3i}lw7F1P#IYpS-al|KzJy14|UJ((C*OK=(6gvit>sMwhy+6am2Xhz2-gSw;VklJw_cDM#M(M z));FHST4vLPBxsZq^P85qimz}qV}S8rFEs9qno2cJAOL&+@ZchjXQ}u3CAT&0C51Z z6_FJY%5UMr@L`H6iYa2~V(6GynONaf$~DSA`mZo?LvlmXOU_F!Sut6WRGCz{K&e2f zT(Mjc;w2PZfI|5~`5L(zxl-9uS+ujT1q1=~=Z^A@@xO4)hN6 zY!qx1@R}phg{~LrztVrv9Nc=>dN*)0aFcqCdJUrEmj~wu=PRcxr-jFa$7K6u`$s!Q zJ5D#9Zep!vt@W(*tRyKXDM#~&(UQ>;ZlJ5Et7y1jxZq3Pm%NOejGXf9^6Us8AK=R2 z%Bjz-&n+n|DV!^xE03;=u4{%5whi0%sP$26TT@#T8fcr;n$&LBY}ZKDN!6v-r`KZ} zunm;;l=Zr`y0!b&`_(8swX?Rfmavhq5rx+?{$czBBitU4RSwQf%uMtw^emw4T~#XP1GL*twVg^)O;Nq1 za7kfIYD~&i%vB6*NW!0mJ`2eT%L?BSy(8Kr(Il}ey(>*DM=Tcwgvf@-j!2D2{T2Hw zHYGGAWXNyGe~IT3PbOz3rwF?UI|UO3lQy+Bbs%XVDJwoJzQuvX0TzeFjqZ-_A}=V) zTSMN3ZOk^Nf}(-~WpsB?cc9S#^&!F|Z{1(ek+ zwj;LVcIbA9w6YJ$9+FkkRMNm$pZO`rQw}u4LmmL+1d@u-Yey1%1w{E9{*SN#{arY{r~=2>;2aI zS^io6WWHp+)z_-8!OFo+)>YPZ+YUZNOLmv+hOCFIH!U_Tj?NsN z`DXgf^r`Vv+^=>KMQpyv}6RlyZVMEWgfc=1dl=*gf;POCiQ*BdVX<%tURzMc~ zNRkX<3}V3k6U7zA74|CRRS11BeQ?~zxR2aGbx?Is%%_-7V2KU6@%hH*W&q8X&jBNV z+84Dizrucn8HF2#fB5?0>tyU?EF5`~KBRw0AIKiaM%vx7;K^5k29$?7AGa z8?_sXABx{f-bxO3E5<;cKpq_l9SMvwMj0Z{wc`xq40}y`O-ap2%^m}{&fGfl*z~cf zw6V1Dq`{;?s$Qy|oQ|B%8O<}A7U~x2Xx^xNA@*SE zE zg6#7<%y*byFuq_!8L-o|)3ig>L)4EbA5mtKXOh1leL;!}AH?v*@KGir%G*D}9pPs7 zX7;d0*rR&r_jp45gqWF(nGE7#PsRW!JGcZ>f{7xIB6cBgAs~dV2s%8ve|^S|1daq5 zBpDg7qTXMK(Gt9hQWXg!7o|n9GLOhF3>GN8pO^6=7vDWwA(!NC{slU#URp zKV4GHsR_>^&mr?}^KR!B=N4=Y zwkEJ7uw*KCD%UR4E)y)F>7i+%X+=Qm@7CX50MgY&q(r2sB&#HkB#tEBO1PE49nT%_ z9_JpX9itsH@?+%3@VDV_VNqdGOaKO${5px`jb9BT4I?|lJHrLT1jCRfiyYt!;|qHh z{w&-k(k3$QYus1Y@2=mKqm`rK7#i!C;Fv&=N|1Ut>uy$9QCJak4Rg(l))%c{%k5zt zW*lapV4pzmDUn5yMVnQd)yR#=4V^8Wt%=Qv&9CcU*XdX2SJvj&=Ch`=rU%Cd$M;9} zN1hKq|F`EH8yOoh9ycDhp0b{L3fcPl3;GK>OFB!z%fZVKm%YNi%)VT>P`KbR>oF@n zB|fz|zBx_~oCSg>f+rHE5~s3evt}I^9T%-vtyfXT-yCiZS9Dx-Oix5l6hj_EE>9~@ z`U7=lpc!{|; zQ*Wlw9q{e=+j09b`!S6XjgiNLj|UmR>w31E!s@m4 zYwHJF2V3EL;d{%+%g2s{j)a#nmoXfa9F%f&AU$VMVKLz{;i7_2Y6>X|seZ+NMUX#f zXz6O{Iv6+@cpG{f@&O0>2l|V;i@Fd~p><2+mPVgSpNfp4jN*0K>$1-zpGmfhwu^EJ za|!PY?h8r^NeXcaa|#y#Z9;8A8T=XiNDH0;W})9yzp0{#qKIHryMKS}{u)I1&K!>% zkIePW^*!i%(6!sX+s@F!&_Y^IT5nrvTZ!^}{uKNvAcU}TM z(c)-PUZWk89n&J~BC9EfDF-VzD|Y~I059@}qnte_F(#l7MGSEjXxTV>y7KfYQt)?YqDz+0Lxm-T9De*^#OkYf_j4b zSHN7uTm#C+v}>_z`3YDwTQvV|_}h?Kmsv+xOIS-&LsQdL-BnFoLtLW*1Oc(Nv9(?G zUG+6hHBG&(y{-2;?sZ6aN_VCLXojTTq23|YCe?;!k|5P>f++rm$Muiv!TwMyQ6o`v z2D)d)D#j{?%ZJNz%5uv3OZrPFizth#@~ZMSvp2IZXI;*+0Ip_V&4x8-?r7d!~k#d-sJ5S?iIF`wUu3~xmGjWINYe*rrcKAQQ9#9bhUN0-D$ql z++N>a?_1+rBTy+&`CsXO|Fmivxf;0;%aw(~cA>r}t0<=^2Wg%iiXDnCm0c>kU3t55 zwPv*@wIQ{^rp2bExxKj^)&pJTedT>H${0a}Bd@ zQs7bGi4%_#k5rCSzO8p#&&=G+9A)H$x`euLU**2~!s~^Xzn{O~(ygUi)OV@xZr|U& z|NlET|G$47Wu#T#tG*Wr^Z;r1)9$-GaCuMy_yYy^3+{*C3%_^z?&-To+p~3R>z0-TkCPhC$1cLjI3D{@!7UApf56ySXcThf#j~-!A_yS}fz^H}*o(s> zzD9f{{6YBRW#Y@k+Kk!^OaZ3Aq0FHSeb13rWx92`^`PURqpGv2^KSRu?yG%Q`>?~< z;Tw}TCi55a7Zf)XH?sD!_5|?-@$Zt}B|W4(q)ekrqpM@6V|W2D(KFG%rhQF|_Wu^t z7Sx1Pgj7KkK@?X`UO5TJWOCHO&_>lpH9$8&m&KgLECaq9d_H`>4&e^rbjftdS@~J{ z+iJJfz^XI2xbB#g8kZV-8+jYG8nhaC>Urux?2k6mAX=$esfntH zs=QKqr6i;%r1((&q5PrDq0C#!w~`-3Km5~Nr1GTl_+$OCst_<%M^#59Pa;oJepG(+ zVe`Xg!Cb+d$*{@rqmD-%X*Fpz5`_|l*VC@2N&b@jh3>>A;U?kLA=M!R9|u0>yw7>R z|91ba_B-u&t{+@Kcm{a}fqgwhCR8Rg_e<^<&v4IhkWWQcf2;oH9PJ!^`q$}S+DY0; zyuW#Wk7bNyJkEKX0}*NYxFTE;Sh-4XRo<#ZSq~uHZoJfd2}z`zqZ*?c(R1u?`QLK6 zBDo^j9NCF?5IQe;v>l0%Zuq?}1LhjNE<*9+DQ&>aiyKahqMdCxYcHl|{iW0z6ZEJ(Z#e-r#BP$g3(6QmZT zzQk~eL7P>Z)rr%I^O*0L4<~{XK_z;Eih_!c>W=F5I`umDjqe**SX5Zlovk}d;7s7` z=j!MB<;s^UW>?Lwg00!@zsvt!R&rHx9l9`dA;&4lspWjjc~p3YyuP8fp|&AbAyy*h zBIaNNF`Y7;G91wz(Y>yDT{A&7L3LJPRsrd(Aeu!I;wyw7@;u~0S%L4F-!nrDDm_Rr zXyhp6C?AnMB0DBJCPI5u-Xq?l^ZV!bIrcdAdT>2(dYi-50I2-%{?7fKU(g4zx3Ra8 zwVt((ymKhq`SJSWb^8tb4TepI%{Ty}us2hIv5m2f2kQ^kTUJ|Ee?zu=Bfzo7v1Yho zxIw*5y&ZrHz?mJI9d7^K{)=Yk+|cBW@>Ylb4*f;vn|=7G?y2t4;An8zUF;G4)d5mjMTVThCyc**;c7mpKM~EKjeR$dz^bvZm9dD`y}db%Gk=-LVW_)39b_$4LU^eo%v zI(RyGW(Q^mOWRA^g=>XtJ4-uD35yB;G$%%DMr-Jd8W$NY}Dh@prfgEoT}Lye&ZxfO-TNs*JNHv}IT#0+AP2RDv9j(nJ6 zn1Y#xnFifskC={_(0c%4mDzr={$g!rYG!&x_li!QQl7Gtq>}{o+L+_aafPdet2bwF z&dQI;kLe8P4E*T+(S7#M*?-v|iEW8(H2_aLPdh7M(Pq(xd=XG#(ahGu*23Jz+!ppH z?9b1hpFPh9o)4h+F#QDm1jHW9kS&ref*pPhWx4q8`|n%)wfM_T$W7>n@xv5Q6;Pq? z0y-=5aq@9)0Nj8j))I?+s#;81Ot8kHC8Hpth$N0AMm`D4L(6|>dZfSAKh{4s#W%%Q zCsZeFC2l1~g_iKIBXc|HcJd0v6$+%WLq2>oThFA)q*#GcNcdnbSiZI==jkQ(H_wr-xlAd z)vDDh+AP}qtKnAzdmVe-hw2a2&nli(yeN55awq>z{%GcCW_xOTs&0~QQdmM5q((hU zc$4@h5ytw-APY}@p7uQLb>{2LSGlipksdavBB%ltS=zSRwn}$NcRlHU(tly(!U*0Z z-elx#4Nii8Q z845WHIgqi)#!JUbmrImOtck9Pf?QKLR47!a1lSbb6iyUP6y+D^7vBPSBzPpG05>25 z_y(XXQWjAb(LTXGK~FwUzC*4;W zyl1v)w#l->vXVTXJb!We;xxP($KDRU9lX$Up$F+lWLjlfe>DAQT5DKq&;U@cBUJe{ z-U6l?rW&9MuFkL8ulhmRgEGcK#=`KN@EkZ&WU&CgIlejC1=;tPP6AV|*!D~RpQt<9|u8y_}^R*6=%7qu4+=M3k*%zT-_ z0206&5HuGwcX9FJV!&#^>bf-6*Y3FO_doJ)?z(vqSPy(P8pcN?RD~HWF8J`+}<_<6- z7l1k=VKg(oC~;BZiqsV;W@%>W3CRgb8!;QPaDi|ENlr=5QpQq7G;4AubS9kLpWT<* zklGko7+Kh!+MYtX9`|AQ;oQO8!P)_!zqa2Df-ZAV;%0K^ZBeh1Kf?f%&PF}N0v_fGUq@K5tkyUw}J*)Q2I-CDb~ zRFu$SMXI&x8wr z2Y>`{9IURBr)N&jWG!YbqKq(>J(fL)_dRaGYr)IG&%w_FdVwV9foCIRBTOYq{r4=I zCz&T{BW)u^&z}nv7bpg3258Kg%$eHR+u84O-{l6&8{b2LhXV3~@`C39q|@sX=n^>K zKj5$AtK_@PdzlyM*O6{Vol~9j5yvBBN8&)mJfT26dp-L@wufwuER8JrO!-U<@X4Ub zpsA;*rx?HtVBCn^h#?~5U$>OYn`*G4)yX%>H$7^9)c&yNVUOmJ=8)RB+PM3)`!w>t zGAuAG)Xdk+H_bN9j!upK^O>2BnW7l@v7PaqaiM9UX|s8=dCC>a70f1PvuU?!cj{p3 z03y`>={qw{WSmGRNGF&loG1KF{GB*~G=cO9*%PuV@+xweS)^g5RummFgbF^9-2QNB~Y^Lgv@7V2)?T-#jBT*+KPv%9A=PiIiT zokYJxKk*;pKgCVOO%t^fwYF8ZRrkv8m6yP0rEsNCK3_h6FJ~|3S@yH+uB@)CC15Oj zEc;{b$K1U9ynK-&ks?@+mFSo2mxok_RE|}TRe!4cR7crF*#skyHiJ%sPL^Jl-mQVH zfeWJ-M!!sbnfe4Buny}E>qzWD3q@JCNN$lJ9W;#3nL;>2IKK*g71EN?lEJ89)IesU zM{7oF)@0XY=kM(AtaC-@3f(ojYmA?Z|?Z-_@BLf_Ft~)*?_YFigy+7p16179@MzrqkcgB!0MsZ|I}O&GKow2(hFRyj&HAuT?C(=FLJxw!A zGpyC6)uqs+&_rBGTp3dkQ_!B-o=NnZ=r`07B=aTlC2;^@0MxrAB?5wpf{92&(-zYf z!}*i*C&hP)?`2VCQGS5gH?wcrP}+bpc~;|A<51~1%6gYilTUNWbjd_>lC1o!e9|J) zB8WvRUMgBDdRzFmFg8Cnzb>~fS1v~`XEkdzt1`1P^HIj541;uoboVs(G+lr^ojkoM zqbcJ~_MPmqys|u$7X)^c646r8(#Dd;l9J+*;@+a(q7=Ze*svJo&z~wgRVG;>Ss_#< zRMlPGU0qpIS+f9i18Alc2cUPBexrWl{g(SJ${orbP~+Q;<|?E^q(kzf@}sa?ofw-Q zn}(>7xxIzG1$5@V4w)*>E6ywTR`0DYtSzj;)omktJA1ohuVe4S-w%Joh{K4>Dat9( zE~SmJjWLoblF1VKDelnSp}R|UmkM5SWD>*@#4GqK_|C`9$0i3R2dH!G)b^=u{tf;O zy;Z$clzkbr7_`{8(6?|FKv^!R9|&p$=L%;EXPl;;rX{8%rt~NECu=5ZCL(}jU>u;C zq?zOa(2O8(DsT!ngPWmUq+NWz_I&NZ&VwC}Lykk#0d7HPL6}FJM=VAvM!Ex_d{SXj zVNz>iYhvW3XT@X1LtSt0aPM&X+xpv48&MnR-tl$y>*@($bY*k}qQcRNcon@fqSm9< zxi`5to3@&^?(W>(IfXlgLtVz22bu>^Ee(^HpNDowc1O34Zygij5#pg79r&sdZIf-2 z{ej*X)K`b{kxt){K^Iqh?-4y+CqfQr3}z2{lavtSjnC9xv0 zLRybYhL;Rc2J{)FGfL=wyDPXWXuxg24K+M$(M-`y5bZ{fayKu~T%f6-uAnZZDy3?r zXr-tkt0F^veGd2z_-IFn_97Zf8cSl+V$(lHe~jV{;SCuN7!Pm*NQX5uI5RjgG%-{^ zTtDnT;y;oB7yxv`bi*=(GJ`Na?{DsH?o|f@0PQ~Qf4hVi11| z$-oz2nP-`&g}a3tbw#gptaIdIbFn+@JM0j9&Rz-x0^C3ZTLfDaYZPl9a~?Cwhk+Og z+61ZuD%4Sgx-E;zi^)HceIi30MQ2FPkkAm({L8cs`wJX~9oFyF?}40t7xl%VxdDt^ zR>K#=7h`5(W@N@?#$oL`bkuv)3-ZQpi%yG9lzpVtuGNm;hTn#=zH|U5fEA!_p>E-A z;%$nkkEkE78Lv^QQmU#buPARWZ7zkFt&(BjeA)Rjy-K~x=e5sk%bLoX0y+XZtb46{ z7l#&yw#T=}&(EBnFH4D4A=ug z>q6@&CjjM%@*eOWpk8})Ujr)&DeA>U`}KU_Dc}G=EFGCA#uFn&B1K|EXhhhH*NfMG z*nfz6j_Wt-H`JHam(g=0X)Xr5-|2P2)=An&+G6 zJ0o&N zv{tkpwjH)TXMfIK+)3QY)Wy{0_r>2AX#nR7&KKI8+ME^~7aR=$&hwn-p~BoAX<{=h zGc2JN;|x>{7@^#-qEkhuZm8Z+?NIDc)RxzlhYC;GMu1R`P>vjkm5r6f$>31jhfEA) zXbJ&|Qi)Q;z?#IG1d%wAIHw4wh`)fp0GgXW!al!ynFB$zg%6TC9PVyb)d!a1<`v6!Fe^~sq_^B1G740759%CD88#@GS1Id6M zuo<%%gNCr?aprO1@!|2Pp91ZZnM;^UkiMGw5A~m~{a^dDMzco2(l))gu(;sA?!P{P zo4~=N2@mxSQ_)b-2r&yWBTq*xcPux$t4Ik*3GfN=2|)ys2*i(x?MduOOiE2kp>FqT z*=kt@c?EeBMH9tSDyLKu)DzUpHOnl+vQ|qH-0mrnsgED+9U5l8+^ego}jH^9J3w(Or8U z$^=pVUN%WKNijh&fiIpfUeHm{5yb(;0n}aN_;>ktt+%bWLE^Kiw63%cF;J^z%Vo=N zmfkGsE$S^^pT9o8HM2DX|GKH-@#68S(W=qYBd15Choy%xLzp2nH}dcG?~U(_?}V>u zn{AVA6WVJz);QK&th!ibRA~gKd-uxas^zNE+S1yJ#)`(Mwy3s*u7obWe!hOkA;+Pz z;j-cNq4goKB@amSNc4!inNwAl{A$#mO&dseIrv7Qxiyk;kM1yI0|JH^nf=2 z*OUi8fv3&wVj3L&>Xk*Zhlaz{-3T54v(3Q~n zGWs&+vgES(V12NZ+?3p~dgATi@8Bm9BoU+)q7`x!b`(aPF^*!6VqbtMktq=+K_x+2 z9$Fr#tzt)Ka1uHax@*+esAnl>DOrGMif9TY0BKud$z#c(ju7Kb;!WZ~=s{S5UxF`% zCxyobK%6oDErMGF;Y8s?|B?Jh0ukI8X6Tkfof^{A($wg8wVR=v;X2cGB!Oo-%W#%q zoo1be7|Lu>Z!^juLtX1Tggb;v0676UffT+J{_OGWF`6+P>>uop?2YUx08_XrNVXos zk?oP8uile?81@b$O%sp{+p$SlZKOC zB)Uk1c1W^^vWJShio3HLvm2LJFRw-{MJ(AY*esyzK=@J3LIfjJoq zc=!11$m|Hy5Ytdye_cP)KZA{|2dZznEP-X9s;8>QsNbkRYcOlja@caX5U3lf8|oP7 z81U-z>XYt~?#b`U?=l6tfsyW!Zshg(+55BiLEnSEf&PJhwjs75<5A;Lki$>n&*IO5 ztYA@NO=Hb)$8bmCNa5%-6sEygn~aE>h?*92B#avu|df%|Dw@Sxi~{z3h9Lc$Ih+SXFD68_+%(!XMK#i-$Q!)cImTm3lu<1DPPoYpU{ zUyQjDa|LM;lHHTt&4Hk+L07BXs@zP0(JP}@27zb*{}TSCfeQl{TpV2-i_aCGJ865; z_LAi#%f2&xXJ8FzGHW<%=%?wY39C>=b_sR~Q(jYEc4l^Fa|&|`ScMTh-G93OedGJa zm&GrOe$#%_R%2FUazk=MjQx!LMLk75OWJr9R{5Y8~n=sqF)V%a-bs*1A7DeDV9?#P^nF?Os!0vO`c6oLrO#1OVmrm3lsoCBtri> z=ncpW$h^qC$W>0NoO}wPoI7@Mc5+EFNwRWGIc65HCbK4s1Kt92m^n-iX%6WQ@eXkX zVFlrt6K75g{2loF`RMbJ^?~(48ZHfYY5UUluk~N+tShW5ve0c+GgmVwKO;Yb{{NmI zJwKW}m^^s1?`EHBk802L?(5x>J(4}B16OBIXYj+whmqLv*m2P*(J8zcycvdBhS_U? z6o8&#h5+h$4VVp>h2!fy+Wkc>MJ*xkLmp#^lYjFQ zfP4=G8wCIMh!A17dI>lLAl7zWZBuPCVLM^l24{n#IiNWxJSsfW#nZ*BJyCn&4$&Q= z5YiA*nUgXnS*Tg4bLevD?lInD)M3_PMn0hs)(}>dcL_0?98^41JVg9N{N{q@f~`WW zLjA)1!WdDE=o_&&V*BFz;$sqHsHR)uJb->zN5n?N{s5>KQ$|8Y0%TQ^o4_ThOHyZn zdy@Ag-NoJiopsp+*aQ~17r0MwoZu*7En&51wr56t3aGD>954eSfOo(s!ze=>eH^_A zbb6xP6QpxD1xNsMDs!sG6ptw)$Rfzl{nCKIfPncg^WUrcSNGYs*|+^y{a29>MQ=)P z3gw{8_s;ifc4&5pH;Fe*)=buTRd`j%g9(ndfVSXA_K)oE>EF}A){~-;psz>t8v z-qpa^ud!bs;&9TGUz;I~6;%`nCGOJ~=u&Jv)v3L#^wr>z8*f??~)R?7upCb(D#hiRVe+ zNnl1~Mnq3cPmH{M*9or^)}5$30arM@)#KIU`osFe-u>SFz`ek|W85)LeNTN)VP9dt z{-FKFxXXB#^)9P7 z)*Jhf^C4#>S0tA*w=y?34>!*W7+|3=r>VaAzh(2d~f)gxth691`6uM^JMa5Qe#kKaG-Ob`wUrO$yCWy{uKTcBV;3F zVF8h znU496d5sl~mG;f{P2qjveTb&VyGe4B1R0W`Zi3F3*_auh9iQEX!-nG==Q-F&nR2Fb zq;kw*=dcUx3+&!(-fT)NN-U2VA2aUL?bBJ(TGHmzj|y;^xXk?I{N&fMuVX#Gd4A)J;EXu_ za{Prfj5G}SER3U!qZocN{LGHcj_r=`j;~LuPxAQf@%v5Io2&rHa=}&NDsMO6Zno;N z>Y*Q_AA`E8dGyXj`b4BZ7$zGgBc~;&4P_2xHsmnmAmJt9y(M@{&|J)14D97H>PqTL z78({Bsk*7U&;Acd=K<7Yy7h5FAdQ4ndI=o_6a_>S5qlTAVy~bpcGq(4z4xwb?_GE8 z6)84)?~ni?gg_EPI%(fIeEeqa&g|UXS&+Q%^PKZ9anX`SGlh0T+zAW@$$#Z-=w@r*`2&Q`ODHTC<|Gdyd-%^Zvg6ymP9X& zUV3WDsU?d5kijfz1cH_Z;fQN#^OEKzor^mc|5@~BQRc!-9A_;oTTq4-;tOII#x4w< z7dkI;Zsgn_vwzG!l5`}=GR-m#Gv6_b{;%PG4IdCcAl|00P2Z}ps<6#|oBi-z^Og0L zC7=i>ZwPM)i;atoEGfcK*FTETD ztbDcd748$EmgU{8Pq#jCzj43CrpKnER~W41zsvH<@(z|9EZI`ErHUnB32@#4D~lH2 zR^QejX^=D?z~A3dK$E0N;@9feIzT!=%5G=3FOx5mKkj(kv8r=bCu&ciYEE4MSbznZ z1sa^2-qGLDgA~h{Yt6NG5Icw(vWBd4&^ZiY4Pilbwv)xp;#TBc8<1|`Hy@b`C9#~exLn6 z`&R>jz-HggzE8cMdRMqtxF%6O_(SI#Ukesp|~u3YEkvp z_SW+BJiQiJ1Dw&G(c;c*8+Z=U8zPhnrRX6%+;X^Ot$3}tXLHZyi%l1sV64_47KjDj z_1^W*YM<3+*JRg7fQ@w<>oy5D3GsdrDT$QeJ_-Ll1_0m5L2W^8&n3?#c$R`yny3`G zD84AZ)_ScK@3bE~K6d=8`d5{pP0)VSf7G8co-#tri^Uec`q=fcs{qo8=|n$*A0gfx zZ(gKdq*rz-JNL@=%ES_}1Y~#3n?##L_kp_Ry5@Z?`&w|m8ZHf&V%F%1_7m;lig3js z)gaXh{R(}dxzK#V_Jl2q#3Ff9yeV`l9UPC-sQ6V&t|fo6|78Ed_Ju9e%CtfRhp}1L ztaH=2X?QB03cFmBfHqZ|YLs@A_O$-AKHrdU$OIt%+koc>)G!bYL<5Qe&RNb`dJ=mQ z@h%t22xZi>>RC`R%`F8wfQh_`yi-o6oc6lxb=l*##|^W5#6X8zhuZ|#39iqbpF6L0 zTI+O-cZ_G?8o2O^!|@>RjPn`i|6KobwYpo~BfKKKpmv>K?o;kF#BYe-E&p5on18_y z;$j6)(EH%`!N)_6hd_lxkL6*@!=Ckg*0U+1DPnn_<$aXEQQ%tdYrUUEJd0QWOz1tK zcUojxEd+1Rlik)4noJ{w#RK?DHQV?`HiYNRh_BYRK2olWfcRs3_uh{b!2U1Ef&KO>IwBc zprfv%t{%YuKh(^@q-O#&>rUzZ`>5;3S^c}pca_u2rkBMQ#TGr!eV*(0+wXTO#?8~i>w?2~Jli$0&b$g4tKkPmp^WT{N=KeeP->jEeFV{X_`+U}uSx*`sG(1ST zmvWDKpL+in08*s~==Xq8(!=YIu0JXOQXi*2t^yW4UG#M2vz52cGU z#xsp;8rC#O1yaF_x)*g1svlINKmG5Lze`}GTR1g;DyXc8`TrLDTM%CoU(#98Sy5A4 zQ%h-}bZ6#0Z+_nVK>R@5zomam8i3w+H>sPnqrIbjv~slagZ6{=i0Oz4d$=x=FOqE; zwv30Ihn!;9VpsHajtm|djB~>AvEyUc4p}?o@Yus+!={E!Eu39A+jWuaBGgIpm-Cmq z{N?i3W`F^O@*7h(raoKsY}LcH57+M4uw%oIjXyRDf$YDt|Gu{2+J@!pm#-hRZqT~^ zYx}QVzh?a!X8`jzYJi(-Z?2uWZsxisVCnj$>w`B0Z@{dMT^o08oUv)frg^}cjcYbS zH17uSI`O)`Yx}P4SlzLj4oqG(dDY)5|6U2l#nkNN?Buia&dz%`{oVA?38542kGMY~ zEFmlb`(nVZ5mOyi9mVU->pdcDMA+`Y-GO`fd-$*tcfzej2_bzUllOLe);uQ+O4$9 znU^!)|9=15Gv6~GJ1WjqoU6dkRD4~09cm6Y2sQ|o36}{cHB4$~27UwIgx`d=0$Ty@ zx&Ep7r^Z}uu8ygRsqwG%ubo^sxh|+asD2s%N3^;FwFhcpTvuR!UK0Rdc4A3bl0EHv+Anro?1)fDsFQR_y2P%;u7l=-=0HLqA;T`i4s6Zjd(?Z> zA+#a1chq;(p_HMN2vP(|NmLR!wjA3Un;M&ufYEBSo(FO)IhIZ4P3AYoH%8naf#pKq zqHV#7A^6`G?Q`98-C+G-9GU4qYd>pK)v0Q{kFphP1yljIFK=7k2DSClosyjreBQwL zt9gich!{IPFrXz&8Kx}JlxQG&%7A**2{sdKVu&%s08#*{kWxs&vm(Tk(^2#H0hr-9 z!|?+!3D`~FP3KTK)I)ZM?5-^LCC;3_wE zo6XJU2c`$69Al1gKJW_Qm^tR|@0Um>4kisIQ7Kdkc35QDXW6rfY@*IaXR{J0CzKPY z_Eh_g)Q!|Nj%yqfxryCA#ZB&;+^2a?^IYP!#4E@<$Qx?2_z6Abia5V5J z%FhBZHxm6-cf9U+q5tcr^H1kI=qgMAuy-lS?7i*1UEu39>of~$dmQeN?vR!cmk>h;Aq3P6Kd?No zyfwcyKQcWs;fw>dck6ZQbxs;54eHojI$S!yawUTp2pr8ob9{b#k~~R{`HlBF?{ywm zA6FM@3N_gIZ2=zZ9_y~@uj#KFt{bLxO@kBL!!BE+t;4|dpg6P6b?+9gta-?je%uZ@2J>7D;#Z~Mo{?`1h8Rx}&BtYAqw!wie!#vH4$%(2Y5+_~L%V}+Z-&EM1CbD!5fFDroB z>5%|x!Ekp>@+Nr~@(cNmzKy<_{+a&RIgWXSV?xG+7<(9dEDT$SV;_vN4udF<9$SL8 z1Tp*>{@#3VzRBI>zQtvW%POZ;P9uP9=WORVw>Y;q9&bEuc-`<4dyBoZ_*wiDJ|}#3 z`0nsUKcR1cZ@}ch$$?QpQ9+%6HP{-A+R)(e;PA#?jlEDanjD=R&FIJIce4M<{@HQa zaYy5i#-AB3sx zcYp7G5K3m2NobY=R0i~$+7 znYEedE}Esz$}7S|T1m8X^8 zueo2dzhQp^$VXdt$alyOs1K-57)}_bnWvc*R)zIB;d%F5N=B3sF~@5nX(DM8WfMj1 zpmy+Jd$2FMTy(kSea#zx|L|DKz-k^Jf@(1P*oH}6Y0I0C;x1{fqzF;eef*QU^+*u8a7#7hH-VuH%^iU|oMTcw& z+!7e)7w0$0dy==&&FF@nC3lWH2m1~8(f83&v!*3$$+)+I*O6_UHO?yQl63`Y1GQ1g zC}nhebUUks)pDTWK*P40Z8b~FmX@^^v=*GrIh*s}@Be;p`L*R&E71I>`Hx?oU*71V z(M68sj^+4guv55G2o;abx>jB5TiII~NSZq~s5Yp;LZaEH-=}ZrYUs)^WtiYtYhGtr zXPF8RfFg5|*~#K$!FwFezQT#NN8?01rOk_f;@;zuI>jFXMYMi>p~pvq2Ft}Itp z0aP_reMEmm59311Qqoe=QN~fm4DJkWh)akI$&KVT5D0V)boF!gb3V^K&#h!tvL-uD zcAQP0O<(D-(m@KOG13^Ak(0(v<1TVpyAUf#iVX z0Czukzm@!z{AHfYJT0yk*FH{toTjsp#e3}lwwRVj_MlK^Xmwg0 zzK{9=$2G?_wdz`|I8(SuRu(fV$9qtgu)sCx;g&_JJ zO*@*TEz*|fZO_}b%D2jwb}a39p?sk{-+8_>SQV_A3qXXAsudtxVD)GBA5Hdt-Mmer_<2{Q3Cj#U!vluT8a!+8`?&XUgcw51s)$t)r$bJMxcIsF zUGlu-xzly0tJ+EJ^pW?G7Yv~1Xaaz`HE*^zJBAs6s4 zfx`yJ4URKeGg+8xWndXt3Z{ZN%yF0__LVQ9E~4%r?I7VZ?=0agfnr0kaj-gA<1O)) zBy*B^q-mrn(U@q&dpE?|b~OX2S%=uUF5H_h&@Rw&R2&uN6)$LC(EhgdZ7c3sQkzqo z$2W~{Y7{mK$JCFh&#cL;ftsQ!-%8)g6BQ>au>0ap<(JOApLm}bUjXRq(8AY#<9_21>kzBIt-tLcyFqq&_IdUL$OFhYmu#oC)8;egGi+Ek ztWlg%9PE%z;id2n1AhS!CBU1>oykq%q;T*v5y6UJwK}#s9%mfy_8G}(a+)20zLCL{ z!IV-`DXGM+#BR9laN96zn01|ToiR)orn}vFyK}63to)?(q;yTonwH(7-J;nIvm1)) zis~?1*ty)fJf%3L7(GPjMV^v71!G=v3-b!|b{6a`uohYi8;Tl={EGdGLx63-zLI?< zo69zrfnC1xe>MNB`B49%eon)j2F$O8n&+m)jf)#k3Qr0lCZZl}$aQC-3-U?BlZG;J znHV#MWEz5j&GgZIvF!6 z-R8K>NnDV)z%84d}JJ*YW}&@~_ChNWj451DEHd zENt`vpxaq0R|vRk|ep$ za)-2?somLzp)*5gN~cPv4xTu8;*K#p#*l`QhD{$heIQ(yVjlH=)carPAMp+K4ZRt1 zGvsRU)!@THhlAPz+5%=lSIZ^uOWwI|xo#VH8+foXV@A`WX{aw`~cSzp{QoRqT(V z%%V(Dx+p#3d&Kvkw4k(D;K=tQ-+yKN%9!?J+K+#J{qt+epDBOv?rZ?^feU{w{PF(f z{p(QXq0A9!BhuKP*`M#ezx#gi+r@AHdh^$t*TC3!W8cX?$UpGD@V*R68rNKfI)1{6_xI$S$vNKn-uZ`%4j0`nyInSmO#%1-X3?Ako&&`I zcF}eBC34iA&;@%W4-_O`P+x)OY>d9U%@}&dBQW&Ez<41(|ada4RX4eUCf@0 zo{UMfNi+hPK%PRJLi}v~Y@K16VVY=|XlT{8YM~BUgLic7t$5e@uG642DAxlcfs?=w zKn(Ql?Axga@MnmhmpQsQy2bj%`b~yShC5w%x>guh7{36|0asv4*Osoq0N$@!j4j6h z%>S7uSSMJw+ibVV0`jf-*8ArB<|kcGx~Ax+=;o{Et0hW_61{*N1xK+?4#?KYezg5) z6SN9iVVu~aY*sd>ic&?7njSUX1|V9tTQ4xOd1NzslrZOFPs<)?xO&*~3`hqcCQ*Vr z4SE~BtwGix139e{zu()s+dA|ct}(4K@y&emPSZ}4qtVfL!*IjUs&CczG4wH9?Yi1! zG#O2vHl8+V#5AHE#g0-+FQr$ptJqJRpEy%Js2;tc0M*go(f?D>ry!S5mr$q{>gnFw zy?1?NedMXWr}{$0MyywyS6py>a6H&!;%@?525uSnVZet0J7Ral*7U9EdoS`{q;rIG z#F?-&Ve3NHg;WJr1wQb9;D65dobNXNHh#QUyqBwot4Fe1vRklgu_@ z`suWbw~L1}yGT|fE18kZSWjC|L;aqky`%jy+hw-!xU~A1eathuW^`TAUD3s9;xy%| za+MA^uQ{)|rN5=WXS!!{A~+FlLQiWvEuO|=vX~2a3wRPYiQ63h9RAyYw*ffBKra^V z<07IXqUQoRkvWm(2y?`-@MGcFh0qY#5E$+s?tjteqR#;D0p6%zle$aYOWaD_F1ucK z{p|eNxrN)p6*I+5h6BSPoD@#N*~Wb9d@Fi29|92LVuSzP1MCOb-=N%};Mw*l>nN)S zuLln*I-GyI{B~Inn4Qc{U}@u`=Lzaom}ec&I{sw*gm#hxj0XVMk?Z&m;Kp==ZTlo9 zSi2n0GR`uVLH-zwZzy~cpY$9;efARe682m7TX83}(YVpL(y-F7Lbsw@=h)oY+}Ww< zRNxG)Tv9Gs*}SrORpY8gh-wr}ub*E3q3%Q7rut3w--X|WLq$VHn&@Oa$ zL7-^>vkJ3}S;jhjo&KTrp*BJjp_!+ir*;O=P`MSj0hm-K6=u_8E*ExJU~lcRx@C16 zDmGM<6_*u97e*KUQ}9p0>cZ897mF?yMHELA(}4*^6N*L@jwnPOPfUJH{^-2Xc@SHi zyFYt>Hbf}?p7>+pkHn0`jI6Y*G|Vc;9&b2Gd>Q_A_*W?){wDqw{XP2o!SsXa>oeA8 zJOB~^>1Yj)8lxNB@kNa}#A&>1)m94tCmq%Kw$LoIJM)044oetI7(19dm{ZwP+21+eIl0_i z?layq-hHS0P7rbBoa~zHI@*1-`&Q4bo;lt*-uTXO^>_7G2dD#12b~Ub3~>zk+T&}F zw_$I?WIbg)2lXD*du!y@$g9y;qp=ta1Lc>+E{hfR6ZV@FGbsjSm(e%--0X88;y^@1 zuZUj1dj9H(J+t2;zD2z3^Rmz7sLN6CYZ)yBAU-1MdY|ikP`mRk>|I!RNO(x!fW84g z`9Jv$?hWqGoSr#NV@+eB*B!fuoGs3lJ=#6mbMkX?omeMM6ebGYYTRmGRJ^DNEe|bU z3P8kgC0M(vuhd_u#~iH~ag3PR%4~(IKk4kY*=<^>79|+cu z0eGr`%L>xBqPbV(6G<|mQ;Pa zu3g77@C9Iyft0w#2OkMH{5_5bMi(GNb3z9#_uD^&CN zmj;vupk8}tkDWbwhW8BTL~tVPBJCov=VgD){+Q5yq5Y=COpED=>WBh+d+)@s#ITov zF9UP=xqPxa*&RPeumoo9^>7|yPtPE?{*US0L%k0!$`yv@o*YQ;(!9rh_^Mj zHRpBbbv+C{3{ShBcH#UZ+#GJc31A1$Dbp#_UE^J&vP;=@0l+-a4FGB~5&)G!g;ol~ z58V&lV+dchQ`xCTcZ}|k%A~S>?fu%Pw@q*31LJ}707OQ&Jps~yfcAiP%=1l_C(9Ri zEbc&EA;j3~aQD9A0yot-^9yYKJ5 zzo-A4{_}Iz=dAge^E1b0jLmqI{wV!Da3kYJ#+s}(Sz*7zetpaSmTk&6<-aa@U4l9D ziS>!~xCEFloiEMn$m^J)o1yz?{%EcyRue(aL7mQ;-rW_9y)Lkx3GwXh**m6ROh24s zVorI$uz+EghhH9!`_?Zbzl>ClQjX$|;f_%Nr^cQd%OA(bn4)o_@uKnJiQ$RQCqAE; zGC5`PxvA%-&Ym%Q1_rslocnSv*fsH2Vg6t9{+joG&igsFNwrDQ)1#+(e#?poZ!0SgDv`qTQ~?svOi zKukc)-RQf~(NWP+(mv8YX}!~WACEZRoi)b|=Z44hi0Kg(7!^qLA^PB%7w3#$>0jxX z#jUogtse{@3{ZQZnk}C#x3*ea3&aItsGSuNng~rt8;&;g6!sK)3%msoL0f+qcmg~E zFkhpluBMI;fK0UZQ}w56-zwj#9Tht&+{)d`1Ihx*E|p#?O#$`*UjQ}WR_0bV6gULn z47LuyKj(zXgi2+FvI2G34@)1G%8Fz~`S67~6Y$#ljos&VK+5lw-_beIIl~Hu6)Y%S zP&&AJa5d_Kwu!fi^V{;P zx^+6M*=m*&rNmy;UesJhE~A27!QSPx%c;Y)!*!D9B+rNZhkS{j#7`fn4}28zC?q2^ zBa{`+3SS9G!X#l8p%tNzdpz#(KIDCfAAmW6_zcJF1I$JE?*HBYA7FLB>HyqrNI?W%hPCmt6#a_4FZo7fRoQI!*7xWi&T%zoz?512JUn8#s zJSZNNht!AE9EThSuuCy^Gj}t81AiRi2;*BO?y~>q@IQxL)sF^Bb)~uqfLtrr znt(gHJGu&eg?>`kq^?KCN5(s*J0{$HK>V!bnDv+y)-Qy2cJJ)=koS=B`;*e7wA~K7 zG3v-+Iej@D&yDvS?>XZ4x`MR=Qqv~0&NI(5_d4!%+{D<_?NK7o3G^inOB^oJF4DG8 zw@`T$9_1nFAqjgL&{vJS(F{Tc0oKGeC6*GDQ(9o8VnzKhM7tAH?NjZ)lD?A0lgFd< zi7X?@NIig3yHYzm!}PJ~V*?UC(-gxL1HOBDboS^BRfH3^f;@32RsE%0)+r-mUB(HrbE_4)(f^5Y{%MPkj$gk8jl(KqcU+an&3FdT4uSHNYp`C*2hN6#aX^#o%JN3(V`9*A;9GhI9&% zahqwIsSOx!9&fGzvMt#bs6(+?WV^`LVrQ{akQHR~&tuoyXXa<-Ircd=#8h%~dAYnW z=P>8lF0)o++L^`91l#Q<)h!Gw@dMtzbonBE$?71{Vh7XKT6ta)0zk z4B`*sfARX_b;k3I=V_1A9_!rKxl3FnuJz9K&dI!F-hYt6L}gN$pXi_HKWIN_B8rHT zMoJ_3+4i5-G02Cq->Iii) zf*1kR9W@SW9@M->vPLqxZFJjZ*=5;y#dyW^j_Do$1Fk5pC^BRjvgo$xHW>|-A#>W#xuit z;XJM@*A*Tm9udPeaJV*wibKR9*MqJH zK_z>47xg`_dtQIJ|K&czWroXX-f5mU$D7m1>}2LJau^344mzOk9DV;_`5;2fl+Aqe zeDh|*X2UbhGYw`WAMQBZk*G*itdOseqwhMYEvfCgRbs^My@};~2`&jPIG^|eYyw_5y>Obzo5{P)xy=!> zgskz*@k}*C&B&wY(eX}%?;y-|>kIe;g8+!Np?;%$qpTsXArtM1_Jat62&f0j(d1~p z$iK)Bv>a%W31vdel1i;it?XOTw?Ynpm9c7j?eb^Evl(?)$y=d!gpzh|dw91^~}DD}7h`-txQUhnY|>gI@-7 z!Z=}AOg_BN@IL6JT?%+cdPai9Hi8+(3|kzuIH=3F%Xhu^dT$twdtyf1F1KB7zg>U3 zIs+gFbt!Q!ao!3X1N>e5T^6`5a1C=0b06k8%oB6S<$QVfJ=fmX-WRj~KLXLd(Z2Xu z(fjNDabZ3sWJ(CUIzzL1X7!xadsgpBkwDa>sA0g7$Rpjk1RziEgS{l}Kt9kHQ1w#v zqV=Tpyc~Kt^n394;9CK=0?;c2^(x)DfvK*kuAVNQF1MX;J0Apw0T2b`)Qj7Tt6^%G zc%Pe1o=vtP+7P3xQPx6Zp%F6>W7IL~v5K(@7y-3HgqvuWaF=j#-Qv2bHB)QkRr0FL z%FN2^71t{g$`i`Zl%6TwSiG?~zaYQhV(!J=Eq|O_xlUOlzOk4ib`%XR2qa3~h#Xhhc}o&SYmw zwWL~}**vp(Z2QEEuD5;d#-%}iY}( z3t=SI2zAL~%;FD}2g(n29_$23l6Hb|g7LWZxb-#hHL;LfNUm_GaQMOe!Mw%2#XSVQ zbSFGcctCs;|C;|b{{_Jdg409OLtpiL)e|B_dhhSEzmEVg^fvSc*>J?m@R#BEdxssE z_e1W7+y(Hkiv4h{0F1kPoCnaGcs}@iFz!sg`G51rT$nxHd%X91?DyE^y36&k(_<$* zs|{oiWaD!ewJk3gFCa}PpK;Ccnj@a)Ub9}aMzcq=mjMv~7DeLyd1a z_~`Hv(kiJAn}7j~0gMr>5v&2c0lXB~6jz!j&GWPOXYXY`%X|j<4g_WAUuc=}g^E3& zI`2B~M6X0I%=Y=>{sqTK?l@}-2Z~&aT(1F{zCpLV_Aq;_bzkdl>t^dFbCJ391F#GGKd1kkFw+s23dbCeIhNDPX&f?#{F(Tf*b6do z4_Xge!D5Cr7~NVT)KP%U)8c32XM=P07GeugZZEgLMZQIbV*n+anoVUpupMBn#CXko z&Ah_7!qM?`JiasE`G?aFr+&PCJb0{e7PA(!7BUwy`vI6w^o#Y2HG(sO!{9M^=}zfR zU~@(Zg7Y<}YfgW2|K_^0-PxmYk z68eTPk7i=W#1436$V%Eu+8{EhTkqT?ZW51g9^VXhswOG)!0rXA0k()O@)UcD^CkI` zytcfyT6wJ;a~i?Aq?w_gp?_$6X#8pUX_*Hl@+2aOxExquyTBHo`DaXLO!#a%qB^2F zAU_~~-TJ!qpXPs>KQ(@8T-dO%;REn*)4xsR7IF(__Tr4Lw6nC+L+zo)KC`Rxt8#ot z)i=~Pl+={etg2X5fw^7~EmsN_)Ux@N^DFVacS3MNfckf43$taobhtE97AXVimLjV& zt8<5Dheo6m=^hy#8E~F=7Pw=$V{p1SwXXuqkysh6sjs-ioiJ7FxQ{H6G%SSepA zuWqkyhmoH2s^qFf)vRicZ;Efivxux-R=>M$cir6DxwXq`meo9~eg?@Q!>R*;F~Dg6 zmnEpLME}#z+Ml(eI#FGqAW$$@I9Hh1kl64II0v){Tksel+%DJ-$&R}P6NM9ng$;!b zPn(`LZEfD#438P{mzFOr*+7-JN~{zqMZ+40HBJ*ugQat8?TwlnH7@{49i?uvV6q^v zF|ct;^OWWaNrmK7`=@ryVg_rQrb=I>XP6kK&6drUem4DV?h@`2{E7a=O1nzC3#1FA z4sr+i808pcDS)}Uc#oY4%%RMoptrk$(ZJxq*E{ET&eJ`ndz|H;<-=Nh& zdfap8YxA{10M38+srISTI?_5!?WXQLWP6dlNGK2r(rVLcNj0RJ+UnYB*IL)w)cVx= zbq(tp3PpvYI7yu3K-+<~%ks^DeWok)8y0S1C;}n=hf%cdAd9u&UiPOHkssRx!Kw3Y#nGb(B=~15&`=WsGv)i zkR&8{^-(U-F40!dSI{vho5G^7glr*u7k3x;67LdE3seD*fC}K8(>W*H3*)oJ&&|&b z?;|=7orfcYEuZx{>tpe=_+h?ia$s^G{wy(n<+0ymzgfPseE;zO@NatE^t#}F!TqcA zSLYR+6&xo=Cr8v$!YYDv!|sONXyRyM5HQMal-)|wN|HO(oeFCp2dE%$T*qF=hDc_f zr?aQ?DwkC*Uw~*}vGZc*MkqBA11QFYkAYJNfLZe&*&o@7%tYo?`cyhps8WvG9k-*~ z&}}vtHy8;zf=Rod3E_}Km=T+k7V=~-=m+Q4K{S`bzqR$g9PUi+r$P1Anqekq#b-s;}!P&+!?ZnoV* zC?OItMa)-FJbJ_RhU+7bM;>A?arZg)p3glW-0fWPyW)pg{JbDu5X5d(f z@1QrpI^cNV@j(1{fAan0`_}udH{XNrfq6ObW8>yQ@ELZNj-ZdA<9{c9p6yBYB+Sxy zVDrFcp=F_kVy2j3%x=Q@#dFJZ%S-D^D?THjh87YI{vYhjIt1(m@b^Ij9izj{!_4Sm zL{H{2?J_Oy4c4pHs}2Jn)F0HZw6C5UgfdML+m1U`M~|awP)Hh z!6r+KvX8R2+E{H`%q`|PQ=EwgKhyhL1MzsCLq=>+L5P;OstPqHJ~ zp%^aHoN30~R9M}q8^CWrNjgbt(_+&?ZKgI8MMTku&2rGmx0v7@5?=3Z! znzrh;>dvaps+*NJD=(H`EUzf3D5-|di9mL*sZi}#oA zFLkYOtvFnLxEi%tQBdSeY9=*f4zdxr0HA&gJ=)QL1%gFJibmqAPxPbtNAq&=a`6k` z9)La$yaz6AS=zE%vRbmNby;f(umC_`)>QFSF^nNZa3pB@14N0UMEHd{a!qa?2KMulh`D-ZLw|n4NPgB(z>>7ZJSc2lzr>?*6rWDsJ*BSGlUsN7)KcE zOm!xc*<`+9xd9HE2RIJ2MX=CbOt3T*S8#mZu3 z9e_K+KB_({Pqn8Sbtk*EyS1KrPyHXmA47yO0_|YNa8tMmdy`@TeD6aw(q z`sHLbf%2Au0YHb3t6qCF-)CVqsBUs%`D`?315j&YB1 zzd3z#dg1)Sc@@BQ;&yBA_AvJ_F%LVE97+Ce``z}Cf@#Y0Cx}i zMt$QHpt_+Nl4I^Q90KBjhr)*#ogvH?WD90P_ZQ|~*@^5#>&5HEcO-WteIduk0>}Zp zPve0uUz9KE)6k~@?}1yZw^k3U99GGyU{zob^YMz~6(B{Zg1DRNv2|nXaE5id;dFN% zcdw>iO;;MPG-4LxVZmX+y}EmKaNX{{lM^e6mA2)!c_W-j1 zh$Aml7AOk@07y6s{{~us)S}d)$l}Q2H6?3G!pg$RVk%-P;;Z7TWYw~2%qv|AU@j8s zvCjitfWB5=JG6di{T9I%!6M-zA*X@UkOo|8ywrFP$|##eO`=VZ35Gf`7*|Wb$iB$3 zIAL1 z9K-Brc7&Q;7G}(x=bQ(1b_yqu9mvM}O)O-@-G{!1ceHo3`N01G3?jqAyOZ>jbToIb zXRc?)vSZm=j+V2Jw~r@xk~^ikq`FLYo9rg=5O}cpZ2mpJdwwf|Rs@0EICNF7RlP1p zUXHvIb0=ovfQbWA<5S~dHJIQ$)Ol#&@WA2IMot@9IJ$83KFH|^Obkq1G-=T!n<+L^ z+5xwzZd12U**?W{vgc&(MD9fFv)npn>zMG7;UlYtR(1E%PK%!wzdCMpoT0y=KiCUm z`9M>@rhcPhN5$Iqw*{xz$^K&ih^FZ`rSFu!DUm7NT`N6%_3ZU;&wqQ;d(pdl1%CDV z)vG_i?aA%=AnZX{NN7mtnUFIfAA&vv?F-l!pzu}rYP>bx`#kn}Ty?qXf;-=4$7aU~ zv&Doo?Zx!4s@GA8x)m7*!a843XAJ9F| zh=h#RY+<$#^E+nN&a92BimV!2KDIotG_aIk!Y`Qvq?M+X`d9c@46Pno4RytJ5LMn# z)l}64(qi$6mJ{7N1N6QL|`glPqrsdp-iD*PfEQ*y~9JuFU7OY5dep`4EVx-KADtE3a|~Z z{m1-|xlP~JJrBgp+}n`xPm|Cja*a)k?fbg#YwVZUFK<7;{T%fr>I>9N ze!ckp;`hX?#H_o&@BZfJ@$>wP{EMPWqe{_>4sm@IuYlyrN$yEbq9xHrFh(%YYbpc00nE{OO?yq-PT5Y0CP$MafOV906x7L}-ux_dK&)i1 zWTOWCI`=x)hv&oV50rDuxnObOykWm#&tc7B&0x-8x&U~#f6ji+hR8J@*@f()c2m2d zw$hF7#uxeseLnbp@Ld5|`Br|WSEknxk0BluH;NnTpvO9ob>8E&$7wHbFAu5)IagR$ zSj!m87>}rrsCbV2%l0qZ$JWQzljf6VSeKXxMuKr)*S>Du5zcHvO`)cK=6+_>Xl?)| z0hnv$Yw|S(b_I6*)cw@0)2!2A@B0_X?EeldQ!P`)spHh`z)a0d&3^!9VnMB<4$nXp zrV7(m>sIS@!gK<5D}5q-BAl{0Ws_&gv+OnPHDL$YG3_xe&hlS%yy_^F7s@MS72V!0 z%mXR|YJh(MkW$L}xA$*Plcq^?K@WOHd`3K0G**P2sn{W%EJzj<))&@y07Z~%F`!{U z1NKYI70nf)pBT@r&Jt${x0Txpt9vQxrtl0gM?Oc6T8s6a>pQ2ar>ecR-reWBPhFq7 zVlA;2?7*Byo<|M^ZR;-9E*6)^<>3wiBC=gka|uTU&wl)V-B~=?y$R8Bv@|op5%X^^5K#wafS6p6mUvmXa0dp>W zEfVt0WfP6u|AfYj#v0rn)<{(Ls&yI z+!y*6`g2DB^n2-?bPnnU@vhYhNC9}oI!8D~IN9)Qcyf*$?dhD2?2TxJW)BClfTNtF z9Q3o{ZVq>lnDH9S3Fd5IZD83s+Bw!krda?vfb2)~BaXI?wze8ujl&JY4J&mkb#t|I zwN08P&3E7epj0c>sNqB{$%~E`9Ra|10HU!vpQxXxG3yA=`%T6sW23pzoN7(A!mHlq z7%%|9OqBrudaE7+6Clf>4DcX$5QYN(0Ds&5ZL1(Eh;ZE_ZKiCdXlYs+lfh(6bDRbf z?Cp-n7{?ez4n^Jl&Dhi2VBcUr%x;+7Yuneh3<86IezuL~jpkp*U&bL_L%MJ;c1w3l zw@ACFTQ4834p;A1?N&ts{s8_p4hRI$YxxVf0qg}Z&+0GWFaWauPRwKq(S&Gv>w4>| z4b=uWvzs}?Cd1~o-EF(Il(m!+hZ2WXj;kColduk`1fV{Gb=2{w<8biEmFAVEzpB3~r6Z*S_lpn>)Q0oS$KuE0>7wbPyoS7n(Sp$es0phZ zUo*b@9Q~p4L*Vj&o zTCdvNIzW)y{rQ>QJi9rzHMSL>b@Mvsbrxs~w0Y3OJI6A|a)fY%fIa~92)j~TDHb4# z8by6ic~5yueoG!f8bLZ|cg{|1E4ED~q!K3COtQIey>FchECntBA|TZ!)dn+8hIim+7<<K5kj4a9 zX{_~7-trxI4dDBo31Du=OXf?ayQ8}!-YXzhfYLy0Ada_=w>EY)c17!=b$`@<)HHyv z;cM`H`ak3UjC-wnt#QP-?pzlgSx0_Gc?PcfO_Z19m*h9#OTg?BkT9UF$ZkJzKam2Y z+os$80dQUnHetIH_9yI9$SLH5)Pqz!x9xP?>A0W0pWVP~;9)lBb&u;FQ@y8pC;24# zU}oH4zrlVMUyCnXYkh+G!Tbqc6TDO&DvwP-HgL-Gl;>2hsa`LDy}*B-|9Ot|80j&= zZGzhm=O4~5xG%V_ELRptY3Mzm`vd{p{Li*k(uo1VC_>ER1x7COA|W8dEj-~m9@QFSj3FAa0ebImxTqe7Or6U~XXld+S5dcaZa zQS21p80#1-f*HZAXVfzcbOU`0zy(l~>;%{W_&h0LlrZkG?y(+oA9G`!W1Z_<>Rgt) zE_a3Tn9CODEzS#h3whb>Y<8PtnjRY;-`M(sTf4o}+=A)SFZeg+sx+6Y8DunIB_{F@c@X za7lluJCkjlew`jO+KvJHfi!)Zexz=sE=iN5S)^K|%2sA8KXiP6)L3c<>hq4vkIN%u z5wiHU_%_V3#Y|d=*KfKcyd+GjPpV&6yRH@@DywlJ@K?oO6>!`uN8Rjf0Q(rRW4wQL z|LQ@tgKB@&{iu6g|GGX(5Y?@H*(2N|1Up~@yzZJ7i5H3S;e}asqhzCGPoRwSQ|G77 z9Bq!a(pYIkPb{8G9y>gC7|tBde9C^x_T&2DQIETpx0d$+xCzV#F!TKo=Md)r>j3LE z<2Hj!vGX8%kejGY)XDV8bc!Rzu^4y& zoMxP6z?k0QCG{m0HAV6E@%HFh9ST4lj9ry|mHjEoDGI(1Vwtf_8Arycbgp#%?*839 z4#Lqf{64@hz;7<_&i9?~1)mE(Q~6W*KHfgwbT7IW#0-0SdU$#yx+l5|+yric?t$*9 z9;qJaea18Q)PSi0n}at87xyUcfqk280E|Jx?16*-N77kc-%c>naRXGkOYE5 z0~9IlZpB@SyGwB|rMP=3P$WR0I6oeD*O_EoGCs5C%;vtX-R^GxE`^!zd*5>&N!XRJ zIBs!VV{~J*JW?LnF05VH&XAoU!xY05#qwhLP~Z;mH27&SN6Aqpg(QWX0Wb?~jAD!e zd;89b&x!GQa)ft;7sH9+#Ij;pcn4cXTSmjXhk@P?)7noYOk@^%mD@gxF=azy)w{4(5t*x`Js|SB{Pa< z6hVYMBtA_l%qz+(+EKcrR8gs@#95c3QPGI~jKg)qb?pu94P%XCjbfA7lns0}e>M9o zJ`3g!;f{A=%fuEpfI7ad&aFR%4phX z+D*ny#(ma(RtHXpfQO)lSHmk16bL#8bq-o1StDtXHb}hy#HmW~>^4R)M(}|9fSbk6 z!k9_+DBum}4F~5tGet8+xUv&@cd^M}kg?PKmriFFc`s5$+P~5?tb6;xFYb<-O#*H$dEgB{(U;&)@V_R!CSZOwW_yhWibzEyxSA31{rn1wgD3bV_^<0LPQT<>!!yzGlH(-{ zD;HL7tKU|?L%TzpW681HbKP_8BJ3jIFg}Hm!oXZ_8^^}MIl~mu6cPH&N6JRZP*-t2 z_?R*`%{c2`LFFBif8;lLK5&y`D-)CL|9}9G(c#U9qG{ zQsko0MWIKON0fVm_Xgv4@u}>o>@ctg7z^B&-j@!Q43!Xrh(VaugPMk^jH!$iY6?|D z(va>G?-MrzgGqw}`XD;|WU?|@_`bjw&MC;a?i}1X7|UJ{DGw?0fo6ag!VBpG%mBIr z-<98$iNH3+HiZm;cooHaz^C*naql`cY-$)DjNqyraX#{Vq!z%P_iLa%kQ$L1aW?F1 z*lE>i)kft;<&EGQ!I%+z3lJy-ij0tqko55Ma8a}<`b6A`xStb$PW)fe|B{3d(9tQW zQ_}i`^$FOI1?$u(+yxI+4ON|1oL0P-zYn|%U&~(0!sKD{BLHT3_6G*a2Fmgzd6F1$ zjQFJJq-dIOn(&C=hycCxr~`o-Cmz0cQ3JA)zLGwTGL0f7N{Q%iALttB0?CPepmm@X z{qnWOTC^(|HybtwGF%#T4Z3`7zV=M>ndZq*(vzl13wS@-jqFC;EAi@hb+4*lRez}X zP=SH|t%_O|UCzIp-yyF<9tqF@*9xu`G!-=!?J3<;irrWjsxMS$*Jan?{0{pTCpAxM z#``8;&)1{R1K(qxY@cjk%W`Bx9xv)t$NR?z?qk^5c+q#!w-7)-o*#bJ5!VsP@PoSi zSnw{*0OElclo#++9zw|?XF;NzkX%YEC8`K2LX)@2yU4xBjq|XqmaLXrwp%tkfSIi_ zx6EDTtMV-)EhBZJcA|oGig45m|Ml3Uyc>#z3Gie@x`M^+h%3Uc~DG-PS z;_33~a-NE(LcJ`=E@F-)981V(mCOG59*|Kk1^@OyNL?h^e^_m~O9OrK7ljvvaK#GT4YPUKJTjNey~w)A%A{w~ z|D^m$K`&#xKi)stJK5XK)6Ijkfn~rkzzd*X4m}{9fjm#12QOKRpjV~ZQSHDx%;uKO zkR~kvHAdSOEr33cbXU6Tw&%77??o-d79yQOr-VY-o)l;YB~Q`hXfkH(jw6pFCsUKD z=xG?k9>Wgfhw+s`${>+UBzvQHqp+&1s#W2u!s8<2BBfE%sPO;;07-siTzFhK_C8Hh zOjC@IjgV!Fv&A7nAwf!!QglIhLAV@P4QvPSdsHGQ5tQ@G`FLkO!#Ts51%1>N^a?uE zUQp3^*pAqaIFK+9n)DR#Uk4I40gC}D@QeQ!f2uFl_pj&QK)>^K$8`tZZ~nFZYh7ho zWyvyUnQs6W0o-YUh1>)y6@8dCOzTm5)OgRztj(;2<9GG0s$Esy3U7tDTwMOJOa*TP#Jp2w~SIbPujD#_5onEb1pU|GrZZvE(OfyY0 zDa}grCDSF7#3(UB#fYv~bFXH2gle`lZfO()1;BdEdd-&REzR3?+jWBtgAGRbIb%L! zUSnNj#ok{0^TICOC9Wl|5CD5P@y`-7(>5A68n^4W>mTSI=vn|2cU&`EGrR%{pfCl! zj(BE?QOBq`4V;EKb#nrHJAbvm8deZh>6Ph~>&w@dzbk!L`e(_XB`bh`O8+SxQ!%Cj zvwn{^9B;s1v(BJ1piT$xFQ2`iz4gR;BAz+X_j8eP5wEcf2e6j8mYKuKVYxYO&Q1PJ zKKfT@OJ+;t@N+_OLV>1f?B+#H@!qJtQGH_i#Egy|9lIHL7V|7d5v_>MipYxKhH=Bh zA>u$+Mx(S*IzTc&vP8T@ECcd`@*$aWNYF6RFp*hc7Odf~;ivJ^c!Riuxc4~saK*!U z&VJ6`09*t*aXN9(V|4?7m{x8XfSxfWPl+`=Jf46j=qv0ioFtkg8W%J!Xn}ZvI7^Zx z*)H22*mF^!RCh(liV(c_LA_h(fbap~Xx@Pld(`Qe(=l=IGdF&2{Op9;39*T>iB|xK z%t}Np^aKDbL9P0??%x_>pi?Hcnb_u8+OxEZ_7&|ncHG!;V5fndS_5ev(>fk$f2951 zw7qG4+w^UtPF5!$ZFRKOro>H&c33ob1-bzczYza8;c)`Q@+U%UQc^_gh}Mc^1tcC` zPhJJ!GYR#lOX8Nq#s2dUYc3qTxluwz_SB-4SNmkjhEroKjBd@#5pfABsK{ z{Q$6+=xgcM(hU_GDo~#{wSH9v z+e7O^YZS1{vI|!U76xz_xMsZ;m|@?y-?w8|8G5+-0$c~z;kLPLIP>!uJcf?=aEBsa{ED{ziE?!*xp!7lMm5M7BR`5BFsvlLq zTfJM|qq#?OH(fW~ZvAfkG{ZDQj4{R-ZHhMG936N1fn7n%wU&+cjTk*(7ePMmP~Zcw z!nwkk>PmIJ0TgZpq?wL#-vKa#rpR05MLqSOq(4b3s4J*F89f<=tU?w`VBUfM3WSVUM@~^bGGA zo~6oCtyQd5+?3vwLR72>bIb5OyB)Gs$N**;qDN25)&{;$ZP;ztKUhClS-?8>IyO93 zI4!&u-WcH+;rXERLE9zUC2yo}q+zl!*=*@-=@#)8@jc-^;Q`(OUOqdYjqmeY%v;Ri ztl_NN?Az>AZYme=d7t>7_&gy`i1*_*;x^)JNwy?Z7Ah+OP``)gQDXH6w-*gPE9Lp-+C7 za+h+Oe4G58nA=5Kpit`wAXRgaX^O5-oV_zyhgu9 zNB`m%(ialG$1Zp;c)?Nyt%!6FMCW*W_Pve@ zc}Bs%fORL~q3@w@qGzH<=~BAn4!L7d%c7Rfw$8S{t$$m;18Z$-1AC}+dpa~&f3X{Y zQvlAJ?%M9!R$5nD_gVH?u)h!Ue`eTb*f0Y=#u?)*auvBS8>El7j~8UzzSlsCKgItm zFcN4DgaCa2%;immj=4)fCGZl60h~UkFUgzaeeHVf`eFZJ-(uZjRhSeewN9-A`(QK9 zSh580}fmH*m=2pzDNGeY%e^Bw&u5I%lo3b}Hbn@#C7g#shq*{Zf0Z{#gBQ>fh8qYk$__ED3XX9y%X7 zdwP3%cl&qyM-fI5vLF*_k8h7}uy?Q*pL=XC+dI=Y(|3w+im-^hh`fuoi-t2X)bx$# zjpyBm&ZsVeE`oY~Js)+Sw>Y;r*w4hKv1vKP9O8EGb}xRnabQfe5G`58EMuA>%>WTA zddzp~DtLav%m5MVboS$ZpGDuA6M!m7m1G?Nl`dj704u_vSW&D9zZ){(BWUZV0&ne4;$wMP-eK-xZtQos z>bUB_-QP{%6~J@wz|lO(aR4|0Yyt2&TWhbiW7Z+QKlm2DWt4H05p%>|Hoa`xsotr^ zQZ4ksR|Eb=f8$=wUQOHPw#|9kJndEeRlVQnH{v_!p8cMEy?ebIq*6Zg8$fJ7Wear+ zbt`Qvtt-7N%Gc79p)V7d}MzF z*Yy_mcHkC(87(6?Bf!=6jWd8dfO`+90-gZ)yj{v!%6ZRz&prrHIaChr?9rdsUD#cS zb4$FCZ&7Sf)TnAy{&0Udc2<0d`4ICw?s?qjgwF|StGmhE5avXG_w83 z_MvS<+d{p4^24NuNtfa;#m|VD5py}>aztOqsU9dFD96t+ez&^Ny3lUvi0Oz4GkEa1XK)xCc>vxGFn16A z6fJcvbu%hvRNN`LQ$)xk>~{;j-cWzWh^Rh_C}wNY&XeyRPXwqJd}diYwYH#cu?M%~~6%K^(|`(*nK z*9{l?!Lj=Wj^{+o&p1UrMa8q$EygWIYcQvsXP;-k;=JPg#{CW2JTJkde-n2Sa2i;~ zTgFrK)%;B8dD;}TDd?^Et@tO&Pm=HA@8Z2ddxP+9HJ(47kF$83B|c+3V@T){I(Bc3 zrHrNMNIDXBZR77DNHD!yJzG7vhv*CZ0d)3s_UM5>y?=W9`1<%_{4s&&A`1P!k-w1@ zGzG1SQN@7xQg$nTD?U{I2;T<14Vo#QDSjICG^i0of~gSD+5{Q9%NffVxUWZ(&M5yV zf3i0@&<#Lv6WmIm3V^6KFX|uBCy#g0H{>_u@zn9u#k9q=&j9Lb22lr5FOn~kuM@8m zfB1j+*ZJ1@Ea0n|?3?Vv_suurH{wFdLJCxo)3K|-!m)57_z`@Z&8UPb;djCJKsI|m zH=o;s-GhzKyBcy08K0Tq?r=BeCqV40HN%u)!adpq!vsSDfb&A^qC?#PdQ$pm`)KiV z1}oNvxZ1edu9@J+VfDl6?X}x$chv8wAKW;&@v!=^8vou4Ko%frk~IAZ zOmCjvyi~hX`(F26x6H82u*tN^RB9=;U=MPbGc4f2!+kA!c;-O{f`+c4-)7!szGA&% z&48Q)+$*=|wC9`!+Hl)&lX=O!NBl?pY+<%=m3Wo-pzNRwR_My}q31&dk%CB&??iLr zIC0W=X*?4E8CNW3T;RMTDl{q-{S6yr8)PbpO0qU+ZO{bK1krBcZmcB~LM6EH43H?PJR)JN3XGSGU$@+=*6AitCP<`OX+<`JrnddxU z1D<)Gc{M(b?Zf+y`Nf-|y_-*_fM;y|ZDWFj0y)MSNO%T8gPl@}Ek6~6+TfXl#6pf0#B_@Mlt9CvB>y|^v7Em+H4%SG*A zM|wwkXG&)Z&izq`k3;BH?p5ybuJNu;&Q8vQ_Jek_)og8NYG=aFh_X@H_@(+wwWZ8b z_Okk#);zaPPX891MPKD#EjCiir~>4JZY|1FLxk18*LUbowI zx9cXVC#vr@-)%~kllO%4gwvVbnT;8f+kkQGaqOF% zo17lJ9z1+k!BJT>M?6Q2{=QZ6RdUQs$pRYXjdGHVB%3duFFqhVAbh}kz{7h7?hJ3! zZ_`K7M$zt2??7_-8LAyX@A66dNqQ}#mNAVrjfMJ;LQWxPAa@{lGB6InY>`g@?x~Xi z%zRwIS;6^_^&jgg<0<1M?IkUpnod1RIZ7!2%v3YAgkD0&ePw5EXRcHr6+96=5qZU4 zu}-R!{wDuTzA$)Ua0P%FK+k}wK(0Jju9xWpdsB&6B0eEFA%OK62lazvpx^d|`-S`W zmfu@YBlDO3Fa1>QRPDCrZOuF_Py0jnLx;IlwdPv0(x$XwNBu5fq-~@P_3%6+&-e=R zTsCMnXbvUVQ?bMjm~Xb;>Q$ZTEUTHpf9i1Pu^1cbOl+?SPtFZYAo+-C=NK;GwU0zjNi zoJ^WbiX+Ft8|e+X3#AL?7SNO0lPaVMX$lB$>&NKF*v{O}#C`V&_6YVR0MB7mU=wQ- zeB%eR@`2wtzj2cJ$^0Twkq9-6P!+1Y5qcvuDIzIiQ{<+|;{f`UK8Jk{yP>+Fx~06O zged1gmI3ySq1GTiEIzC>qBLSg^o;0Lv8!V97sNI>M`s*J8v|1H1`Sn3A-<=FRMGVJM%H)G2;Yq1-K1h zkM$nl0Wg?3n7Nv@nuS_F^tpQZUjAC)TH!{>dQb!@g4O|_fKK90I5HLgBl$;iOnOW@ zR5n!h53mo&m*z`9Nj^zFi$6o7+EDRrz#_3oY9Igws@sB5i-Fk=#{hWbDNia+D(=ef z%DYLsNq-IcHE4ohf?y4I4cEvrvYHr8jOq00^q*-z)8zD-gksV9#aFW$vNxq32R_slQQvqbw&c$66O~cKu4;N7+Z& zL)$}(Va70d93BVnH-8HM6k=}XTFF|;QONWQmIcc^QV&*VOHYYUi7|(vub{7BByS{7 z!BueaZU*s?+z&>x|v!%l}y2e7|ojdG3B2|+;C zAZt)Hznb5Z(~~oTIf99LzJ1hvRQ&wvNqW*6;u>O+zsL{PN8dWnIuFauayK{|oOA#+ zVAt%|?A0yREnJ|#t-tND^|5sh&;h8i)IiIg*s{;G&(zV-(U71`(C&lYuyb|i>TXos zsIryW%5D_jDE?9KqhNL3>b#7cjGPzQFS0KHTXVMNOwF5`Cn=N^jxHHpa0U zPzWTh7uSDi_|ULLy+w`w;qvD4W_X-w+w0ovUT9xv-$E(egQf>f4hUaH@Bh=Lr%emB z3$-uxFZKAY#GW>>O>9G>T4wAd-Gl0UEL|eDFb%njWQCpjmXFP|^RKmP-v z2SWEp?2qUk-937E?C{w2aqHvG1MpbIk6G-@n3*x*Ko?*Zfb;i1qW_5Q71b+hZN%D$ zJz;yoa2|+xPff}u1J;;!OQ@S$Lkh0C-Ot>k&o^PtDV$HESR4uTQ<5q!Kq zegQ53J%PWue{-3@U!1=JXH^s(PT)>}nIkC?OEht!Ako9{QD-lcan+nWP= zYMeujHjg$}nW{`(&0WpQz}Gm}HrJMG&$W+sjdtzw?DBN=b@k!*`y(&|;QF{e+z|w>&ffM z>7;ZLYK3?JRQO=57y);~>A-Lx9>CegW&dS=k}t{E+tb^lcB-9VSGF51Mhj|M&S=kQ z(T{(u?pPhInpVBEVrfOE@=oQefzpc73e52NyXNm2N3Ek4J2%6D#M;E#yz0DaoTpu{ zxL)BdbC(S)9a#FH_(3sxsFa1u!dV5g3I+iX1y^vg=wwk^X4; z#Q0D9pVp$c=<|*F#>?i*=DF6n*2tE~mP~u59q%ojU7cMXV5xhl`wW10%2@!^pu4ZQ zuDCLs8O}sddf|6(rDdfB^%r{hSphvGo3)#@n0Nd;fII46f$hLE0AAQ2W$X1z~JV=%@dj?G~t;EVieRb0I^1_!Jh%m1DdhZ@ja9S<(u=(ZCcv2 z9EQG=>z?Z#%${FQTu;P(XE-&S3eg?(GG-Zb9(NuW{l7ceJfPKpjh`6vJhPY6%I?;sq-qi{c(9+4hV8eSTH5YU4! z_Fd?^P@0OS0(p^Qw|uvJuyn8#yEJeH-x@&O%u>-(5$b7PiC>A)H$DxD6)O}KifUE0 zDkUN%Vo>y;=tr@SV!83$_%^_xxIuAeW6s9Rj+z}+5nd6FSvuShZpbR=aKp3fYQ<_r zTL|mP3(X6KsEj}++t&E4@hM3uNw~uvlRPH*ECAB&*6UiWYc)4cZuy13sEpJ zXo$NTb2ny9+?u$igrhEWyfiqrgiEE z{M7NMjy>D=Y`?ATwzlI_#-~KKifje;;DnyBJ!3Jq0C!OxRUK8C!I{BHkURH5^g&d{ zFXLa~Ug5@aVmaL)WAz&A8VjU|tX9lc%;)sy^uMToQJbI-oJOD#&YYtMKCl%4 zc~a5f!oh{33Pu&g=f~%JbG^AL0Q1$MCM353IGJ}c&jPprSkvcC%%7OQu3%lk{-XUw z=#vsw3M&h03TiNW?uq7!<^c5Kn)PNqX4K6z&osBUw6_R>bEb2q6Z#W+W)rh%THUm| zNfnbS>Wb=$Fe?*%%6LEI=5h0m6dWnoSiG@#cG>JQ%&SYNNvOG4f3Y5We4gr`>M@@T z`*Ejurg%_?0TFrxyHv`B_;BYwn>?EwMUSGR)@%lEMnIdU5~)Pp z0NnrF;NReH~`24_NUgT)+SSv>7?PL;jQki4xbA% znrAd`YXUUeG=tTH)#!n?)!Se*u(`e%&^Blr2B`tfAWc6&2L(x!>nGQv7wc`s+lm4x z(LP#yG@$Ro&qhl@O95&C@#jL(g`zpdbBb9dtde6uRB2RcGk_hO_&P1GvSRJ)GYHRdXNUXXL z?TzwAp&kmmi|$6;jd%wrBbAVlH5Q&WagmtU(>1(nIDXfstEQ_6ki~_Wj1j>R!NX<4 zW$h*H0~#-*z$h5YAIl%Y8^XigxDlAlo6M^KLii#45?%?<#dUGf6Z)L>oOPLTnSq%i zs22|U3%*DU);vx>=|ms%MmAlq1WUWkuaF&Tq9kZQz}Q`)J$; zpcXhmpP*l1SYfam?M6JW1Y3eFHBc0|+_c=3ty^6!`4pL>6<`c(BP^K<6s#;=WE6SESt;`8G3mK7~4+Euoz zj9f*o!hZ&43mk4Z+^|r+P;F>3G_BXK*Q+cl3+^~J`8N3$Qx;Powuv>7KanqnpPurb z@;Ayi%4wm~LXBa@u<7B`!$I;AhWp?jsvjz6h%@9I@D@l{rK1%?^=s&_p=W_PzzNj} zRa!_|2+p@Y%0J3y%Vx`#N|#C>OCC$iVzU@Mdt*goMQ;Uf1v?=#8;(^x)QRFg47K*} zMejwIgD!(IvJax3w;K@4i{%Xv3=qr;niWKmQDoPky!or@ zs|sv^;o~8PaGbA%4tz@laTjg8jtst8Us^WujmV?=*Y0@<5e93&tRA8)htaPb-sXSAesT75a z!nrZrn3%+v#D~cblcU;3wFMb$yAeQKT3lK~YD22AwXyYv#0`nKCmsAz37PiP=E5OJ>imiU&4|2OpH`~sbCIQMB| zZet#y8=)hp3F?(KD{FAydA0CrVSP@04(A8w$L_DYzn=ec{>$jEqrZ;*KK8pZTbV7) z6Xv1+eR%Qk;{B!jOP`lNFQ-;fs}|NQtocy)p$;=9N*ha|fvu^rs-dcZTu-k5r{0;#%Zn?ED@`?~no|v@8seMcn?iIUy3vNwfzNfiIo-U*vc`hp)93-i z-Ex()%8B^_X!3=~7BAQ)d~yIY|HFV8o*5p@ML-=I=Dh!H|J&}exoq*)cq`6taE`Ob zxW_mg7y`g=r!muzX~1rut@^F{$pGdK>^JN;U=MaVU;yp_xU)+JrUIy;{L}QO3A3X% z0&Rg*Q>tl~VV7Z{ZlNx@Ik}mrA!<--g>(5eb!+NUfFHo5hDi;t)vwiq z-0(~^+cw)a(mc|P=U$~=sb8sEsl%Sl>-y{Z4~7p0^z4l?jWR6)Vu2gR8%7H7li?== z=0}9?yJQvlv;hQ{(<#@HOv*}s`u6Va!I+QSJYQj z^sAt5ITrBId^A7BPr>uVZ2xRO_PZvzk^;VgDtnb3bwK$*v9s9u)b-TW-re5K2fDes zxv*acGqFR#16yJ%vHjQbU&~#`T}MB6KR2F>$_eF!$>ho8wbZp#4xK~K2XH>!1G<*s zNJGKTLaaa5pXbd3<=kg4<~PKE_YC)0UaFT0BPaS<=2@nRWn#g9oKp!b;4a{v18{GE zULFbXhV_O8Q9+Ckv=4!9$(h8N#GAgGKGXpeyNX?dfq#Kd?oVz!6XTBjXTr|}^cf3D zLehCaNmi1#0XX}N2T)U=PDm&8hw_}Io~52TSDg!U+Fm+d20S_NTC=+V)Yzl=8lq(F zpMci@$w7idyFHG9&VkOMuAwf>L-@=4mp6@&Mp#K+Np1zgH_Y6Fh+ml0EcDd7>RqV05ITg8e_Q@->1*q2 z%d})#BF&NJoyMI;x8AKkp*x|QtevdIo`|tcW1DbqjG3&}jn$2V0L(g>0jz>N4(vR@ z`zCrK6;_4SY&Y9)xo^2KPYIV%ID`D1_B#!Cby|j&QOB%f;+_$U`F;`nBFG8K3ED5) zFJmg1N}Sc6QvtFg5ZV#i4NM)FdLrpW(r>Z9 z#jcB37tvYOS!EBl2Y--#kZqT4mx3G>6pmREzLXDY{ZrDZ;FbSH{)@bIaO+?Xa6xfF zf!>@1pjJ_LsE+uF9G6KETGg@W@G^wYIr;JhhC_VOW zbk%g#;N|B*-Ge$(EvdG+y12SGkPhHpE2}1}20L(2wuKq>e*>6-2;#yWGI zd9rP?jSod&&t1=5!Qj({YE@q%A(5~jK;6|^-&!BRL-1rdvK+CtSld+SHLTOs>9Er$ zMU$ezxg@?v_Cr@vp|()F)v(pj+T7ZF#(KtD(o)ibGpFP3-aB4@Zh!6#_6;`f`|*2??}uUZVe|{M3p69uNF55~ zQSu;V?i}R~P!A}m3YZYaK?*UM`h@a?G8+&8x5>9*OA$vtLOMbc19;BBEDH2Pz9zpW zmqPCmokpj%gFJ?jjFAldv&#W|0CsnL0R9Ee0I2oBGyZP+ZaVJzS5Q_^4v`L#rV^$S z>b!N{UhZD*D~>A;%nbZ!`Dj@NeSk5B7z6I0a+-3QD%2Hf7$-Mi_sf9V0ky}gk5}s| zb(L)@+Em1q#g#!NV=+{>7JkV4koPL*RSxzzwmz1{h|dW3ra4PT`C(`3DgX%SzN!kez|(N z8g*s!bn|rm4gC#Xqt{prplejv$v}T?f9=rbq0JMUCN{0ptkdMF^VBy1yyx1R>`myQ?q%v_ zg2#gmKciPMs9&ya1WRV!~xCxW^@$uZv&@+Wq=%5!&}2c-{TC<3=a0u zwq~|w#?#~J_+Bq1m6F~Q-V<*5ZuzEprg=U(KRO#*8e8zN(bd$|1Y-^TZryIQY3lX> zsQr&I#h5->K3Vp*>}}yWc}};>?Lto~?h=cD(?BZ#zt=dlaXDSij=)F9M@Kd=#5u$n z>xy;#yVqZ#M3Il#nrvblBe7cY>oCP?++*-}4=AbY0Jo!8sy)_b- z#5KBQbPH;O&_^f%egY(BiFu%9pk=#tyLE+ag$;jjUWq$Tc#PXo&z9rLalx_12XzEQ z6V*ih!u-O-bL4ma_kd5YCa5L|b87p^`pHVd(^`e1r@N_UD2GG68r<`Zysao2a(7YAV09=_jkkA~+C%xkznxc56i6yRqI_kKT;UfD4%1I2lyscN(D@xe;@TWEz=<*hFlK zYmRGPt6i(j)8*;B5Fq-}@X}BSv;scqKIs~o8=5OL6&hosv9Vo4yM~i>C+qOOqpVg| z+bisWb0xckU9z=sYhlOyj`_dm{+|0K=S$9z+#$Kq(8HrDQWe#g)|bkvWL3lJhSl{~ z_gCX?=e7Q|9{Pc4CqYlZO))NL9^e7sA0^o=-7Iy}IFznH143c&SYU~KNx)l|0!634 zN`94e1z?pgy(qgV!yaOgG%Hbab1w8;=tID(@~Uoy+zJ6XrSe+vwcyY4&+_NM?BLnK z%M{BL3zZ8|293va0}?vx=?a>7wbP<^1J*ykp&G-e)d>eE*Bo zi&PGULs>*xM9Ls!5U^`E%bSG}8{Q00hG#hdwq7?GIN?0uM6KyL+d12K%Xo{xBrsLz zEA+UhK(F{6%^l5o^?9`zz?>Oa#cQrLU2A%%eW(pLgd4t^zMB4kUE@&uQ2TS|bLS=Z zB{x2I=6UCN4*@%YwZIZ!K7bvh_-onc+vh`V)hgmD;vn)MGQ{RlN~xu|x(s;n&XUiP zFGIfYY5!?|wYS>)!1KTp1;ha-fZpETUKg+$vWWKrp#c8x#2&Hdvg>jn7x+%gofa<$ z>`II!#%a1~x@Vea8i-VFcwO_l274hg%QMR-mrX8vSo*N^5O5y24_pM60c`=0AC;^I zn81tT7sa^%=JsWlW|m@4{OZcpm3yl9R3EE7R=dA`fBo3Tv5lw!r!-NTa)IH^!<%;i zlYwVV&ze?iR%`xf{G$=`l~MolsQOX$0^m^1p&Dtuv>taovAS3tW@F!IxzU3DLbK28 zL$7!)IhTBdawL#l|CaQY^atS&!UyjM?>5&q7tKzyZ?kN(VEB5vE?o!X<)+b^(HcB+ zjs_kA^EC4`I2ZXFcmt#Z91TY^0D2oRCo;4)w6``Cp2@6iLb?f%DC@nrSt|>xb8es6*7Rn_f5d(e=@x-)o9_ig|=>ge}vN z>G;d@mj`wCa6Jy3Z7}}=cd|i(Ai*){`GJZ@5uRHhMnWz(WU`5Ld9CwWUrxT9JUC@=$_D_f4k=B*C7?Gz0?L!ilkWl30C#J5>nA`N zurYaK@~V_oDH~EZqz-B`sLg923s?tSOTCtgy6NYwp10bcus`8O%#E0y5j`W8hAa)i znWPlDem`(NaL`vbjx>%m%{$GT;mB}ov~IL!8Z(UxVWx$5(TR-{8~fGut4pj-tcG=9 z1$G)>ciex4{}qk`J_9d`UKC-@PDDvW$zoy&l#T6sjyQaMu<+W znp!ogZdBdl#>b6wo8~qR(+<;4&`r=C2igIcAJ){|1ghuF(AYDsc?nPq+}7UK7U_y~ zJq$ezH;p%qZ%uDa6A9qHdM^-Hq*`Y70eaPqpYJW8C%BY0O-T#0#lh&nSV3> z4&2kwn~QTE^jSP(J`41t;(d+}KVt=B1&sinY4iAb{A0Xhfo_0aoL&LVeJQ(?J%KZU z!{9QwkAZYvI`1%me_uR+x$PRZhMmMpVkI&X84MbOhM(_Yq+x;clgV$wBdR|6+&$eV+fD z0A?(q28#z_VpZT#LhaOa_H_0+&N)sJH;J1L;Gdm?4e0cvAPI?oG{`n&H*Mt5LgD z2NYBnR7clF*KVlWQ1_|+Q$0vi1NqGNHTN}`@o52;1FbZzG`$;pH^Oze?pV#S8q|O% zRwPy&C<96ll#T{4XL@(}?!asvsts%4YE?f?GfneJ`$} zGcU3(vf_O5bIa$J5GYP+fWrF)fCRw1LnRR82y$F-UT`jPFA3;1J${cLb=c@t>d5TK zY+<*s3%CW`#k|G5-?_hYRcsY|4RqPXkYmWte9wHCQGs1j_11dpBFiER{{CWaS}t(K zdc``^Hq$0;k>c2<1wH;$C)J5_*%n|hWNJ0LnqBzsi8I$sTc!>3Mb3SS~ zYDfl7LPp zL_UecOaekIAyyryj{BbQJ>g)|!6Zg&M(ei8ZIjt4Y-lI_e{z#^lLxdO&>C}hI>dK~ zr^V1>jz=7ikcLV_F-rrgMP%4{B@_$A<)U&?v9MT(``$zVeQSpSoJ(QX$$H=f?*tDu zP;*&x137?W$zuaKfIqu`cCWLqvqRjJRb&zcvZg0#Ck49o;FqZ0RllpgM@^3!^wG30 zXf5Vt2frRf>+;tNK*hI;Z^wTe|1mpzcD5!*lk+|IJIcCp zX9GXw{FL)L>vh)fAH#q2`rhk1*m%Be|Gxcu`>gg^{9Jx6$h-^bW%RNq)laH1h}o*M z>TX$XS@t^iI#NBUo)NwgK9Zjl@bAs?&ho~9rZdr<=)Mg-!&d;jV`AQ0-8ySL4;(YP{8Ww*G8= zP+d?!r}eGo8z{VsYueVf#gBPyWPM~k?pcOthG>GcL0X)%VfOkX+anv^FT*@xo?Pg} zq!1~@You$WN^&JRu;-vnq~W_`5o-~vk<-ZO2l;?wg=2+yf2$GK1m^I+2LBq2S|C_! zgyI<_Gcq$WJt{rwbL8j9!x4ug%EHRRLPA4AUxd5}!91ui;5~pl;iS-{&|Uz}!8{Nu zh??Dh75^&mpII-fm-UwRmSP`=PvjGw7oHDf|2*M8;dcOZJRLX)G9lG)CC|>abK3($ zI72uy*)!RgLA{*0oC(%i#tzyJ+6~GL3eNv=$2NvACeVq{8ak%%-xc56P1GjpE7~jC zDj=JZP5D9uykEQvoC}=j?ZlnxNaIK&3f(nO>=bEw(Wu0YRZ(4667zl>Gy1qK}maG6`bTPWN`nLMvhT(?s#_`7frv9b@ z<^g8()h)Cxv90G<(1f^e?sTob;Fa~g9R%?;*;jldk>B;W_OHEwI< ztNGx{+^K#AoCX@yANx4^+EVY%1AQ^10x1!MfaaxdmATS&|=;z_X+8 z_rBk&0bKTC9`c5q4LMk{Ffe~${-%OW1v3g~6lMeEz+(W<$8UipMN5jF6hA56Te`RO zMfrRQE&wLtk&GH|ULe zBSce}ms*xuLNQ3(9%`Qrd7D+>cUuZM`{?6E&3YSJ8`=`a5=JjpFV;@>PBvx-ZUiv@ zBo7$O9n1{|XKV~VhL5vU?EAvSRGKIaWeTGA!uP^H!2bmQ6HEhy06Zr7I{+3ih&PDW zmD`nzopn%E&x&S5Gw@w6gv_mV(A&0zxP+)7Xdun}e^{GAkP&6X4gmT%(4+N-{||o@ zlv5t`9Q1T>cW`fTZ3uWk7P=R@VRh+k4ZiP8VkYqdHM8RJA-gG zo~BGws#R*$ps+zDvW$|?04=D_-Gb87dtVV;yAD!fa(OtJ?A~=3)c%5 zX6S+(G~mZv?O*NROV~>oN*qeO0&D{yo`Hz|nJ@t2z5?F+fy9BtDxfQ=E2%Gld!f(7 z&&1z>g}?y-^$SmcjpU8wa7s938*m$_0%lWZQ|Hs>(^}{)bS+cM?9A!R`M~?YTP|EK z#PbAZJEY6g<;#MX;fg=_6X24&I3Q|$|TAz@-A?-cK}!YB61uhjxv}!nEIObn$`<4pwM6O29N+an@gppQeTi> zkTCOS8F+nOdtQ5R_WsQI%qegP9C*f!utr!JW`-FvBGdKh`b&_His6K~7woO>t$x_> zumJ^)@wM@_L#u~YZ>`)~Sy5h5zNTzV+04?JrH@M9a- z=m$mL_+7v)bxV1OgeOsnRbu=O9TOcBp|Erka7S=Q@R0wIKN>oV4uh|JCu=8bJ!3uN z8tqyjcl#z}6L*H9h3$mxgt5M{f$z;7$hzHZ+iaU=o@U--*kg#-#p_VN-KnWl(<#j< zaKH`#w**ylMtw%@Xmm7&05T{6GS(UEp4UFF-Cnc3W@PoqYV=RHt87;}uwr1vvhro+ zXUoo(<(1}@4g)Z=erws*vac0iEAUy2zh@ttJ~m+&R(sIJnp#XP^IY>>I5+J}=u22j zT1&#u(-!dLqt{Oio#OkM`R~X1DBZdPb!$*dv zLl5>4vf?0_s+%(Ph!9cI4+@DX%l7T#FrSSLPbX#hS8p8|KBcbs=!cU_y@o7_YX z(USyVmk|EviXekT3M_Rl4Lm0=Ixa%{`3MK*m>dFdj@}>G4+J}c9ZVcAF{2zHcMLWf6db2NfuvTZR-)HqV#&mkLxqP5u@ie?&cd9l zSy!_%eq{W33Y^M1m4&nCC%I2@AucLkRiG+(2}~%QP>9};yTx~lZw*$U5=`>ILc-`WHIhIr~7DM5rKCa8-0wbU=JSd_{6a z@(RE^OZTAeLGWr9KIT2wT!ilU+BNk|AQX*LSPkr6@4gUC$3Dm2VrvQb#EwJ0*%814e6@YG;WK5t zW4r@>uBbJp`l!AMgb9Riq;I4S)DG0;^yTzv%xO%p&#}@u>6~zGIQL%wq}`y_>(4s~ zK-DL2KYu^}SHZ6WoJ*ny7W0Ar2aEzh@-JM?U(KJ#na7C-bAESPcUl+l>Fp-(CXb|y zr0k>Zqm?pCnQypnxY(n8RdQ7l3_lSe5h3qG--klIc=#3Q-?A)XUVEU)dSBrM{)U+jzGTeGRDdfe4mb0f606|5pE7T~<|A^}6zP<(!H+ z73d%Q2lD6YOX^FC0Nf|Vl*g1~iSC)|Gu7#J>2-KlIHozKX=!e0hFCh?2Ezu!UFaXk zfb52M&^KCSDYATryrZeMskSk|3F`@K7fTll-hZANo*I_wmtyQYv}Qlj-!|S3^t9u? z7JE7BA=mB}?H26@>jvux_Xrp7%?-dQ0CW4xIpv<aB{@;+AKE`O3`9iF*dTxppl6HH)qnzcDwnH?tRV z7jkhIj~a<@!f(P)h~Sd|j+nfQoQoXv>;B64mC=jdi|zrBM1OjJXg#=3e+6_$;PZn< zXY@bM0j2|(w~qOoe^dXa&ZEtvT?cvsogj1b5&01r_haFpU0ndZ&u=|%J?IDR4Ba_1 z>@)1R+r(Vs&F0PKNK>TAYOoqmJJ%D?=rlU8G3g<;({R~%+4$c4-mJ2zY@_U>>;s$w zoTw#?_C$NQUat2%0Bd=#1Uehhw|5x8Sqo~fF#DH5Vt^W@hIEvCG~l!5Q~A`sw7xWW zR4}@*y09uZ6&%!$91$H61xbP=5M3&z%Bk`(fDpj^3hd?W2NX$)BpU$CJZca(h;IRy zLADrJ2Rs5&C8^*(wn%EFwbCqEmTaDUo_q+e4;f!a;v*BpU zyvw-DxJ181j|3(GgBgPvc-CFOUcknz!YRBdJk0&Y9Rg8A6rK1#p3VZg>9hU&aZj2i zZPU~ZcNZkYKE3P)p{1I3{Qel55>TCy)mpj29R5Qub12Dl!%HTtZd6 zL|4>}Fs4mm(zl>fOMlYms#Oj;X>TIGr^VMDgv}ysq3xlg$#t*_3!lU^c@3q zKm7^$rk&ZH*{`{;xqqVjLNC&bG9(!ix7012Dw|5OW7!wv4A731^5jpTA7>;oelW5Q zSiw*1pV+kTqO&k;V`9n{(kXOI-pUN+4CSGqLqS;CC_GY+v_f1V7K((TNrFiN%EoBO zZOHA(?#Uhy7!aU2cvo*%FFg-ec~^Pk(7#RhPRi&Wg8cF%agundbgJ|}*?+QVd9*xP zmMo*4Z*%k>5n~>w*&(P1XLAOEIqq0Zknu;|Qtw1ku z4$v;Xfv$lrLLZ@L8CZCiTqodD;ZZpx^Q8MkjbD-t4ynW zU-iCfpLw6Tx1+aXg=Ym0Xis$qW0A(`#S?kYQ$C8eb z^fKvs;`PMWpjA??t<=4RZ#Pf;YIm{e3IAn0h&ET8C zlu7zZ`bs)MG(q%{_mM{(sPw%##52T`jQrJVN3~-dm;#P~o#2W6iT#oFk#!{cmrol` z8z@}TP+%xfW-GIEzT|w_@nOe@p>K!2t^d0IYe$A7V>Q?cioyS0{qNO%ko-ECBq^^E zmGt)QySMN9f9(Hp)t6OY+GV!OL`6hy0baXHc9+l&W-Gcx>O<=vVh^$BxO3e606!4V ziRW0j7Vdi9dR{Cbt$7K%gq_FAV~qkwK|VX5O}k9G#~$0)}rNe`K&&SLHq95qKxc}k=OzAC-S4| zaBppI?RR8xMglS&W&)K~rA?1WkD&ad!7+nlNWcCu{$qSfVoKtzq+3abT83IBwM%NR zsk5feB`^@Is=ccA!deS!jZ7MuR6ntP;`{jb@pa?s#>K_N#e9tX7&%@$URx7Z6Luuz zNC>YcAJ3GCVSDsoYXYbLZ{F+lzY?_9$GP zzdFA`UV}W?I&w3zGqTgN(z3Xj+|2vm?lXPa%fBxFdIZ$|R{L8HxcmL?_s5x!GfD4M zlUilK+%Ruu-^3m+I?X}Hw&U2D(Ee?G&C;cb=;{)TFJ^Fb6c)u5~6iy6 zbn-jwJM05(18u9UtE{7e4)E=KJMDhy*P&`>c{b_VAj0=myJFO;+-qTORo|60~jI@W8Q$^Wbe}FB3W<$$EmWMb& z!_bDIJg_)qamZfvUiCE9G?iEBRnk4qEBDH;$gVKIZy#wN=?`Ew_zZfaUArN|0?z`^G}koO8OIsNQ2S8(c-wf}UF%)uebvv}&w3O5Yx~zW+cBHzIcno=<0YTZ zD%L92W%gxuI47Kw3ym}VnplamD5vS5@1QTuo95l(+2T=x81M;@UVUj`X`m0M4`&j8 z5`VgAx`;A^cFA_hlH^HpI+N3PheoUstAr}y4E_v$UtV9{748+JuZ-g=!4}RI4&Cbz z`_6bnc0%Jq-~E$WlUd8y%h;5Qzk|DjED78JfV9#|mXej_%kmwAhI1=2C5}6eJ3iY! z+mftF)@9~p<`>2nM#^K~XV_wt3-K5(2`Ud_&cc*4Pxm#_Oyt^g?F!_2_3-uZjYY?N zM{Y+h&F0Sw&kM;TLhr8%X@zuve1M$JCI2Y@QKqZXRaZlbd2*5X<rH{17n;CH64WEyuGw>iH#|El1s;J)y_ zu%)P_$RqR!TLJRTzUIB=(f%un6UAB2TF<)VzvSNs{pf_i7P;>8Ad(hwl&Ha{qFFHCP2Ad=b9$?(^QNGx{_7O;ww!=GM%up?vN%bDDXsWv&I1dFxL=0%)&&2)&qh zO?OQ?qt1xfU*p}HyEUUgD?qua^m|Y?7yX>*eoco-gh@!bfXHYvzW|4ehP&twv;G@Jq!@#d+Cz8J$_^UQJVD8Mh}X zjU0sCzy@#*Yz85qm7tZtfUd{p+~(Z+?D}kBKo~$Qr*FMyz2|rL@9xj8&uCU$#CWsb z!@tP~lz+M1y4}h(bIomQ+SVL295l?=&DTMaRlxz9(QQs$o8!R_K>yndkW-mc*-qb1 z|H|;nKzpzc-H-Zygfa^7Es$$+e3OYdT(Q7>Zd*R zBlaW4XIF~g1ryK2t0$-@xFEbBTq<5FJ|I0HrI09~2)7I>dE|dlK^` zCNC;4>VCxih*ROG!b`$R!f40Y0Sp8eKmd3FNSS$&Ta3 zacwLci*nXz4p`x<@LdCI0Ohb-JQhz=bXUA}ymeqiY`ti@XiBP1s@|vDrz0=*_LA)- zcZ=>8QLs9{h+p&tz_wpZqT7+BBjNOITuPeq;-carRQML6?j!F-&WoJeS+}#Yzh^U@ zd~d(J{j&M<=Fjs#&HqHXg3CY!V1H(RrXZ%--)Dcno_#%gYyQ^!YsJ@!-<7{B-=g25 ze_Q>w`kd*UX}EPblf9RZ{>@TvsTXTlRx&r4J5Df8FkC!bOg(336=xN6mglK?>XjiY zLq>;=4*eSp0{cStG3R~S6_fsif`KXTh`fpuloOQ0gNHMDUCY(W)oJK`tQ}fAbOZPc zQ0D%kkVPRh$GxDspn4ztp6Pu00KfZq#dyU|*-qJF$zn-&QFl?8AdJZkpdk{?O=#Ep z9G=8Xcc%N1^O5rp`yY1vxGnun{Y}*Ub6tO3PdzETavrl6q`t2=U{2|r(t~9O%aSXS zD+cKX>Cj$npgfH|<~?T8xzZhO4RZ9J2c8EqI2oL!{H6Tw!tX*v;ETz}NAtTNWHM79 z6J_X<7D+CX%P5O$5OO6uiaLrG3Kt4#fqMw_1(auS51a{x|+p=%F4BXvRh#gbY`P>z3n|gYK;t(TiaQj?#yR{s{9U45BJy+pPw_uRD`hKX+u*j0rlJf*zLb%i5|k2j75xxhfdo(xAa&@r z0;CnZC%-4ZF1s$Hed1-&Wf8tE1@zsX$WCN84Kxkx_U-o3-H7JI^!%Z-+$_f|2i>Lf zt@+l6mWP&dbGdmkXau5x0A!o8(JFDxbOF%(nle&$0D3M{5JNKf4baa$9{L&bwAZoK zvAqDR?W^sSSx>D4Eq&>#FY< z?if`%pr!$%|GHjv9V)=>NQyF4U9P@d{k7(64P^(YRWG<+aPOerL6l9gNxF&IM~xAU5z+aWdPa_Nj&d3zi+_=Ck?)lI6!V>)gpMW3 zwW7}+VcZTnt+Lel7;JW;HmE^^SyB2ec!#uwZ~Nsk<}~E z)78^8&^^#i9mNlQ4}H0T+yI@mU0fIU4*w3nov@v7vuLyEviLINccQEo@;p6}Jdtz& zSCI$N8Ms6)l9h;L@Z@X+l$E+px=u>_=sEH^a6IJ6`3UQ41h#_?K^=l<*z^?i4ekr| z_u=3yKzh~HK&qCiuYqNl*G~$a6goLcPVx$sIQ7VNkWNGa!qtiG*CE@$#8DQYsQo0NtnQyOX+e=nl@dv+Y;WqqxJe!}8MnlJV=2uD%5z?duBD3eybZ z3?rj`Hk2C7IK)E2)%|w3Lr2M4(F1cND3$qJp z?3leSYh6}Ta6R*SX6g6R?^nNF{nqkp%ddZb{`+&(r>IY*A4;hr^uwn2o8B(~2H^kT z|M1_Z|2~cRI_B%y%(IzGbC>2GFFamIT~JRdpHz}hD##eboa6Uf_FHCJXIj65cD8ml z9Y}B_IA{+`ee9%Zq`hf#UUOc$AYDK^e#!v8EV(Qx0Ce`DoP$^}7fhB;mVT0blFfh@ zpLCP7JFkIvo-(>3kl{U7I#>FWu(Wg5m?Sz&Vn0* zUB)Tnkk*=p<_Ul@gJ^DgfOCL@qdPkW&~9)CphXyIa1d|9r5uV){7rm6LN3xp>7t|P zL?s;v^_l+`{9EvF^>8)irjw!Y-;jSp5Xq^2rFx~Z23wIzeIuCs{fGw$$q35`YaP)# zf_|gt@z3LvYbDp}Shr(c>S>(Ua9+dxjrKRfwW)C{K>e+;U?8{$D6bY4k)~S#tOiZ> z;2X#QI?xQS*84YJNY*nvSJ?gU@nJ_XTB{n4%Z{4Vm5g#KcpMbuz zXctF4!_*;x$VhGdi24y9v>&wJ!@q|Q)(qB+2^|xvRcqDDmCKduhBy}WozFEUr z!#UwU;io+g={2KlQMUW$`{s?tjYiVsoYkMzU#YlKF}`$s>6^kgg{XMUTb;E!3l_6) zH1J&YVburnUUhlfw#pHKF$6#`_u5R!@vHO z`B&!toc%eC^Bdmb@jZ?`j-AF$8BVAGt1vKPoRHrYLyA|>1zV3>E9m$Y6UgyoFnj^s{54*@K; z!e*joBGRj)9!UH`@hHMGl61oaqa1xC~69?Xhy$|aQj)WcwjRQF$ zIU(7A_FT!}Pw+2rf#9&8<`CZmG{t%p^IRXi9<76&a3qBCcId4Ksm**)1WpbelG zov|nn=LQ%HR!UY%j1c3HKF-N?a^u`g@u z#zFrYf%J0Z<+3sIK)+5g$k@o{|V=sc2HMzI;8CaYnrYb-}FCS*7HEq6`em zQ`=Lpr(k{l`urDpFVNaMG_M=j1A6E8&YxT`xuCePxG=pqy?ATs*3vQMW6EjHwXbp? z91-^_y8`k>c<~^GL{pVKTFV$a2ukFR`i{7Z-sG`-; z6g|uQ@AUoCPuWj-S#epBAajQ1p%4ruPw0CWJq zg8P7SXNG{kzR6nU&1Iq8CJf0PyD?*!SnrKQO(xc3ri;)+Z z9;`c2ccK;m%89xhaXF&Bw!L<;X0iqnoY2v#(W)Qd;mnj~N>7STis%m3lh>2U^(MbX z7k(H1F2OFrP2o-9WYJ{NRxk|sgg)U#uo95}rw#ZAy26Y6i~K}hBCipr5r^*k96!fT zGmd-idyGDAhI58!lh~ zjhjKTDcLj$`R-YkEX!QmT${upaZGYfa&~idgNt>hi}DO8qvizs^|U7w)(Dw-cB!sZ zM;_wW0FMyebnq15@upu45)FxlHdSq^K30FMwj1rnJ(fKd`n=q9-E=+hKJczW&k+fs zNsslO|DI2C_(!5gBFY2ImE=nPlK#cqjp@6adLrrkOF0-l#XZG2q8um)9HN`zn_|>+ zN=aitnyMv=C5i>$yZpPnSXRtv8d9aH(lp=zMY1B9Kp|juv@}1Zee!m29sPB!6|EJd zk)X2G7d?*l_U0^~E&M*n1gIVHb~eVJP*&)$lu6M+RDki$-K+L%fe35 zPEz_F`A_wqs(V=Xu(sN^+F6maBJW4tkE$D8H<~_MCnHZrHjii?aV-2;c%mjzb1(EB zqc@SLCF)(lyMpCPxpJLiouZMvkvvQmCZk{Th~$WbvLxvul>_QZ>Y{=9orF3(NwY>7 z8swcQmKIAJh#QET@SE^yKSc8zgVkUiUNgL=m9CZUNa>N%GlgdgX?MFVds}vDW@@J6 zo8wzU0ISYd)i>3*j-V^hg1oPJUvB}de!r%DOZ&Fr`-bmyKO31dGRKx@%OmeeUP)fb zmGUd)l#hfpxqeke)S!!Hr^qRaTng{)5`^&bsMDtc=l+1*v#L|KQJ&b z(1z89#bUGAcfk_Q5)NreyCch({0Y<@Ksl6qM0*(j))2`Mi4)NK=?$Q{%{y=z{id&w z2Sax+($3RfJO|hTdEqFdycGPc{#)HFq*+K$uv5KLZ40&qQ|`ey**IC5s7%xmo%Va# zd)bt&a>sp#nSD*LO|Y#&pLk1TOb;^+Gg1Eu`Eo{rXmA-iGSb9TpKrOL+>ocw(^HP! zP2El1zaUs2tX~Pf0O}k48BEnp)wQl{UCFE9RYa6WlwT;jfZK6)*_rY)<(x`RC4G)b z$2qimX!X{btu@KUWaCOe-xs^UEg&!nOn-wtnCFLC!+D*Ooy!Mc`{ut*NM}QaI zA!#nXL%u_vt;kkf4!Rsf^XSgN8{|bpTbCfj$|>f`=E`=V$LyBqmZ*iWh45#=&w}0{ ziL%T^Z$&}UAn7&vH96(Mk;Zap*w8R@xH-IaWa~)S5~JtE%!?sSD?5%Iw*&~|g}7}! zkH4L8JK;^@o5Z}NyrlcJ?$_#ByJziw;7P3~wXP>!PwJJ}EAd?Xxp>%5<9>_zEha2F zjM032kN6%@rY+M-K_~c3f7kr3q3&LII-EDNM829d3i&YlP0ohBVs zXRuSUQ=%8^@r~6}d{=ZAlfQl<%3G#qQFm}za9L2yFXm_QvX~w5P|i?JC_9wx5BQM? z5gVB9pUyl3$a~w$+saGcwS%sMF3LaNXxnI0Thx}l=rBmBPN}ADJ<8&womVf=5CjA2 z+gJoV6`qPI;8FP_syr+wzdH|HD!l|(`Git`iN9nrI9GhG7_lZrlRw|l$doulHw79_AHsWpc+vss|fS<^k%2NN1?8bCZYp;gdm6iApksi#;ePY{=AoR%0_59MrZxR{ z@~=?#O&wMp7QHtX0-6!MX1!)r1}XzN{v3ayuh3T)WOy^+HoWLP0_FjXTfMzJy*#7b zqujmWiJ|>Jol9ohXWJDZ9vlOII{tLfZoulYy83(idk!F{mG&zu{VSn%)6s~_{}Z6y z@=fne?^r;;$1-^8==Wd1TEI%+BydRMk7FU9KDT3pV}xBqUGS||CZeoXn%{00ZD(dl zVZt!sc)@sqfp1{;bbN%Y(VmX&>0N24z_l-cea-} zOPpceFfV0coaUb9(r25#@8$%}3BtHm)hVn~Sb{b|yE$@mWJ+{OGbEB_A zOFlkgd_*U0C&rs;)7UgQATm5M{5Tk?9jT3rh>Q3DMn{gO+J(p_QB9)e1JduW0i;h) zj7*H&uHCMkrkSRB8uB!xD7Yw?vQC0!!Lpg+nPRn2EsW$x^0#rfaW``|b10Kt1!(3> zKR?<9Q63rXu!ey&P8z2_JpPc+v2eBY+fl~Z0bKK5^VSEnLmA{AI3=5{Ezt}_yS;;Gp7TZ3u{eU6FwrwJmgfqt$JHkWGFI(fZ_V#`n$Tjy6ylG z?PzKlq3fdWqBr10nw~}GMP~e!+3CB_3WFr+A!$Bh;aE6_xQDo6o|v}@OhAXq0l@*r z^Y$E>(!Hd;n5?r~vRks|;4w1nkHSkud*M^uQ{1`ix$L8Xql~_^8!{*#dLQCXcg-8_ z3-=WOn!^uc4P#Nib6;d#{=@r+N17h;qtm>_ATTg<6FR@m;LYH*<+kN=@S@M=ZuCD+ z_D}YY@{MACW~AxD+rh{3v;4J@$DhnfW+{=wLHEUtpf8~BjGo{>6hbWn8$cDfguMBW z?2qh$+<{!0%ZwC`6y6ix6E~AJldVSg?N;<^Hd8fI^-}jzzX8;PT@UnB^;A*T@k-@N zia$jPYa3-X=&0(bg3L=z9<*{zxrVxaq9datJ4SVkqW2{E9Hs+Hl!d+mqn<=OiTF|b zqxOX6ga*-0VFe)tA@uL3f!crzJSq>;cKoUUC;+>G07L{w1V0OU79>)L6jrHKO84JT zVW^PqnTec44y5vdw*Iz$9M!zF!AIm`Ltfya9Q``JI!s0qS@p7tJUf?lmvxp(OXUYZ&qms{!cNEJ zBvqNJOy$t9g`-zwoM)V8n}3^sIeR(V%k^?U@IUbL1bKq`!umqJKrdJZXg)^Y`;@OP z5DUa1(h%ts`4stmWLVJyHv>7j{X+YNriP`4wbZoKYzM0WnaA~^`p|J9<3j#W{h=Cx zPSGxkE{a*`^`x^+Ye{R#d+~em1wh`E1%T!Ul!b1Dn5`jLBv?c;CP5@P4t5K7Gd;vp zB~v9XsY^=d@I#723i|GO59sGk8MCBIC;x(9?#DkdOTJ&WUq*AVgXn!2CLAWb#k<9G zupR6^fj$A+^U*ou6Ece0g3h2AP#?u1?;&rBKgG{saaiCYhySqsVVmQa<1jc4PP5DG+UMTqrXE4M ztJ7T}9+38hdRmhJVu#Suk%|ASccGTb-5d-9zXIwd{sBC2J#a|?<-9j@G;<8J540b% z9kX=?G&iEW3bkEL*J8WMsdCPD&38q6qCF0;!%Kf&%D?FdE%XoYdH*N)Pw+tafUez) z$M!b=HlOt0l(V?mzuDi&+sGT|j&qX-VuND?U2`1^o>phG^-=a$pe^k_gB?d75)7!*DTk}iU>0-y7Vhccb3Cy7TH@sePsPrKC$qhZ7DbT#LIFhj^ga)zPb? z+eEdA3XKenjERVe7^5Ad%?-~D-wj3rSd%oD!Y+l~47nLXSyQyzTq9W{*&x^;c!KQY zS%F!Bv);4b`R@7d7s$fj;n?BGv}Ym(WUu`aAbl0R?<0ZB?y^4xi-8c(emu{TXQA>$ z%E;?u=wqP0B$@0f6JTJ$zyjC>^T<23DtlG-ey}!YZH_umo#)7R_<)fvf{r zf*e84{oMPx>G_~Ay^#D=bf?-}vAN=~{;Z%lm9zJ93pNdZ6*Cx{;Paf&@RS%Is!fEi@~MfOThxAK)FZ0N4^=k z?$PiHF6J&~=2XkQ%e{1`=wt6=Cq4Fc<8`CFT3)?gzh2+DvU4Tv-Vwpc^b&VNKQUs- zN}HEAFE6hsub_ZJ15^W4V}r*A|Ec^_NqemQ ziv5Z+@-uRpA<|Bb_Dj#e82K1EedsoUJb>tcAUVL=3vJ1XK|h0izyj#AM!TxF;I`_v zDqWqfUJM^slh7uiZ^7KKxnXTIZ8Qnt3E`;c)}ks#OMP@z;5ldyrfR2ZSA?%%bkM(O ze$mVUH$Y5yO!!JbJKQL3ly(Nl0QB!rHezGsV;={oRAlZ9q_M69*)iEMpJPAAo{T#g zN4i}um=QN4ZhGwW*p@LZV?0rws4tOUA~PZ~BA#oXYj1|%4Bw#Hp!p%}hp-DF7ec60 z{wz8HA`}sd*3#C}7NQoS`uzHQ@^8@@mL8@w%OXt>?N=c=why-rhjKmK)&)EP3+xN* zKOid=F`SMT&KAx-pf#uk`hzdvvFowR;V}4`4(>Ui2t4#W^hEih zd>DoJ5u3(}gol`ND(LJ*TI9i!!Ho83uWYYunS7a?cDPt`VtRa?$z7%l0|(HkHR@R* zvqI?aRHzX`8Kl?r5APqI1n4_-ZP?l{dLQ-+=@&9ZJw^RQ^+feE@C18;*MWD+cgmAN zCxb|z{h#zdDczq*-%34ShtP%6)!)@W$veqQ-NsAZOWmp9GdK!Q+z30 z;i?}N79JKpCSpuPX;f*{;n>5m)DfDMl$C@EpV}MiZmher-p+cB>Nl#t3_J(g2HFN2 z0d@7h0)rY2YP1wY14siK#@COpzopKWI&+fdBvCgb>D0e#zia99GfF*5eMEUgIZQE3 zLAe))q=%%#z*}ID8Dwh}YZc?*&7wI|nYv6(c^gq-QDN!82^ylWk@ii8zym;ea-%?A zSYB9vkP(^@IskkN`4-X}TvA_Bhk#Y8RhaZjRirno4`@!A6_kZ(JU1v#5vS-Q?;|J8 zT020#^L~JG5a|1Zbk662Hb@&Z1WX1aK{pTrD03(h(62EO{WG)=(MfdJVy{FxNjpgy z_WgswB+(=h?GqaF8}mz%!A<*lnjal^9e1^`x3H7PsjacCv7)M?%Br{OTkBfu_E+q$ zAa5S^$hR(OT~b(7ShTKiU16PqIt3Yd8F_1S*XAzFS(tM+`z%>ov-f4~%NhWBfun$O z>lWuM&bgg?JC{20;tS#nDAW2x(TSqoCA~{Jmvt`tqv8)nze@AzyVZBAn;4rITbo)_ z9f3(>)|d^@A5wO}V&h^X`F?(@{;m3E)y=92;BW9t^)J=bAGpx8(A3w`*8(emE!CcC z-|pD%Sn6Er9OWA2>gw+5?&s;}A#EJ_1JVL%0Y010CVhgQtLHj-PToQOL4H1 z&H(aaQTADV^uoVTzEEBcxg4@Re0zAysFqP_v1zeCB>a%DI%##%@Y=&`pQ>}JPD1{;(HwC~PSCWA@f8(12=l<7L5`SLV$h<*aKLTcgGI1Y_Y^Fz9W zi|UJN^7d0c3*~cumVA~_2#1QR;!;kA7A0!eUDsXRoZX!CeW!71oDEzJTy&2ycnx0C zM~z^QV9U93ZY^Ze?*+6Yrrd<%+~YJpeJr}|gJuZG+D+xlGa)bP|mIw;crcQto4x3;#n zez1M8Q5O0}$3}-6%yiCl#=GKO=>zNo>?f=zta{*e;C0|4pt*?yv}UztJb^Sn zp`GD7FqktKC+a60>csv7h0CO>O(9K5J3~7|tEyI2BdSL*oyB8~ zV~rM2*HqUOFb1G1U1y|RpV5F!@q<8XV{0Sj-dwX>v%IpsvR!dpas1%=!PU#%%S{@z z4ZsPgbL$Og?Q4yx^(|(XPV?Ma$Q8pnh#kR+;L!Utm6ytE1wYp^(J~SF<5LtV3OeJ- zL*yY?--I>RG=}y&Z+Qr3N8daR6SIP?NiqYsT1;B=x?Er z=!cC79~1sa`$&r`dn6tsQ8*$;KLf2}S|f$AQ_Pd-C()E!of4T6xkI}{ds%Z?Lq%JA z;3fW`{-C}LB0?fUN`WEN5X#r^HOg=$$#lXWY9DGBL@bEt8QC*(aMa)^>LBVA+bQ-{ z+^e|YgkXy2PM|wjMM6bFFOV9a8ow-VS={c}-Ldau-p8~Dl#!hZ+)?hRpFwJ5YUJpM z(GjrQX)};5^LyCuOynZ4^<6S{e(Wrhw_JV z+Q)xE2gQH9|9G%>v*~O>XFUoSpgn7nGs#JFb5vp2DZ{z3wK1bV_-guU8ekk?+)=%w z`ho$V)8=SolAxn4`;FkPZpjmJYI0TU`76l{2qBd@+>))ob%b|v$tez z$-0$!EAvMX4Jacf4V(elfCS%jKxB4gc6?5J&dS`Cx#SIwD2yniPQY`e=Sry)>80+a zjx-8GYlhZ@m_kf5%`?r^D^Sl`&-xV5IcNg15YIc#J7|x8+;iO1!r#JQ&8lYY$c=%e7HfW99|Pj`!Ri$mGB9L!Ta~9OPE}9_ zKyq1f8RchDC-K(et;NH@4DdI&4i1AcKm&|L#v*(iinoCUB@0R*k1jn_eyBXXGQBcG zpP_$N^{i@2&6FC_qjfiRXFS65O!G`pfO77rYq=|+4(0u({U$n>AF&>>rl2zc5w4>T^L2BDse;joVT@|-X6zH+f-Y9dwr%ug0wulT)SLX+*jQ6UFQc@Fapr? z;}r6u3+x4UEljVZk6&nBXf8FCGUuv3=04_z$XT6Yonl2KqK(cLvu`;_tG7VIxOh_j}f*Jj8BSsNofZ&%`wdp;tFxSbiZVL z#QQO`UFTm%s}g@9hywq5|MikSyO*n%i?X&Z+ArE0g6@Fkl6{?hoiwxTU^j0cmzRgl6<;SJ>vY)ew1>&IB~4Ejioi|-$|cAH^m)Ap8b}*Re*;^=IzZZv5rA@(lz{RU@1SF+ zD>9*53R((i$9IQyheiI=5AF}{WM{IIa;TzolFTe$O)~rDICTR%iF8VJ} z*;GsibthXVigU3QTZ^qPz!xC3No_v^%BG==AnK|H_5M{GoZ|w96)zD%2TjEEqjZM;5z6|e2nZ>(r@oam(-7vA0?!Fqq8v|%oWTPhyd*begz4Db~&}dT<%=% zHO@5-<>64~0L_?b20*zucL43|eQY1Q5w8*Nn&6tCnYfv_gS3NmyKK8mAQ#B@$o9x6 z|7WOps5o1YEudd>1A7CzZJ=%7XW!30nw9iHj`9a|kx~W)ozIq9ms)pOc3Elx%7!3K zq1|d{{;aeMDRY&%D9?VccdvJ#Z=ml4cm^C`seh?|d0=?}qX^a)&KC}@Zv0<_zX%bd zET)X2Q;Jgx(hO1d(ra|K9Sk}cbV7bYPTrMmqHQ9LKqDY;Sqgf~XqQ^Ss$j*kW6|35 zf&G#5k%I^=ZaVrr5U&r7MGb>4JcB=YRHT63+wKTQlSaYnDIZYbJ3xLiI?``i% z;$>@LZDFOK2bpm88TT1Y)u!rhRo$wd=%46U=vL?!S1zvHSFx|+Zu#BvjIxZfv!!QC z`P}Tgbw>50nnyKHjZcmAneA!mY2n#;wx*7z4%$`C_s;hQ z1%d)}=b`ruy?1DSJOL=cYvgY}2T9x{iuU3{ddLeGgp&kJ&{Wt|cu;Uq(2(DdPxG>O ztamKZQM5%T)@1a8^#@fz?N|FLJE9r88MEhTz-z$#T}b8oOjAI;>9fGgvX>;= zDmztrs`NNWDoZMBgbwfH6~`+^>qhGu85$YfRqm=|HOFeGJGGy=pLwQbriJnvN|2@b zo8vb}S65e8A5R|--TMv%4g{7VcZu%Gy?MQvj(~20Zh}d|NkYn9?J4Og$&=NH2hfgW7TqGcb~60Uqc!(^74%Ubm!uMt<_trDZ`TVV$&+7Rs2-;Q`y9l zi6s?96-AJ|BklMAwjKF}CyP!NJu803bO9YIJ5*M$qF%+(%A=L^?5J(1ZJ;@Ri|Q8D z?Q7cC(4Fpv=?3%uLhFdF3-U-WqeFtu7o*{4SOR_JUjAM_eO}v1+ev4jUju(s1tdJm z;~+jbKKLRS2E8O{2}Y|&tGfX5c+gywG`n{dcNH`kq(d0Z z@ZYk(nYmhhMSTVJkdXFaV(`RZ(kal6E=Cih8KoVi-4?km@?!MGXqrj(i|-eIFyUZA zYGP{Qeo&N9lz=f~{FIm}F^3`!MNl7X39OOH$G{Z87MTK-yoyp`Ok&Q#|W`xW~Q z+YL0TO+nh-UM6FXyykRw81EeKw1O$%m<>ug1>C&aq%6*at2Hx{q&wcanK7c}3ovzMH-Ufdv6X__7Ca z260GZTnDV+tl-eDULKGKeuW2`{+$izp}uRm%XI9Vt2tM5w)$-KAg~71uc=={T2u0t z{9^vayvnl5l44DDl5OMOcn324Vv8C)5>5Kvx1B%tR@o-$9l5zt>yThLL_ zQK6A*E%Cak7}YZ2AlP3*QRf3O0c;fOKqW{51Yy-eKNF?nUk;&Lz%ube(@e z&kJSebVXM87XKDM?ba1QCIZIL&`W--L z2h!V)1f-`rZ#r*E0ZNdCu3Xx|odx8FF9X9(!%bSV)(jbsWuSGSb*pWw?VkOf{iWlj ztNtuAeo)azJbgiT*ZLV!D(k+~^pRv<-%5%$e%WLy%OxL<1MYE3iPte}d z-qPRN-%5E4kg+(rI=ecXxtihhcFpw^qyf^@V};AyMQ9Ja+_K!V0^Z@VHDhbq!lT`mF_(#xesN{;-0J?yrkZAFKH75rTMbMZ3J1MDfjQ43r<&Mf{`e%A`mAQ&~R+^fdnmb!NTPbg> z20aoqH=#fC5zi4%SL7UT0ZRdCURHZndn(xurvcx~M?&Hs zP|5hc+kD%6_5AgaF!IJvUW>l0zN|2I82dFCfG*E;PzI=5aSnJ61UvyV0}dd+o#wzY zKzg<=tS+pRzLUPT?zZm1_QCeq=GkU`4Zmi!VYPv}ra$XG>o)5*>v>hYs*380>aWJH zM#>#LVL4%mvBp?w(ANxjOde*&pIe<<-Jz;O)g%2Q{RZSNU#+}a*#is%Re-+4<`a z=sSqKY4t4iEOb|XXMe|Zo6~b~Hu{RVZZ3XW7v1!;+3MZueTD9|#6V(zbQPKGOy-## z3KO9YkVY>PRDg642WW2HkK2zM$_eG%V%=iV%D3KaM(aV znT4T%yqlLoE-~7kHoFJrgnxpLw`iB|58v9RuM)%R@&!~zF-vePeT;|*~&{KOC+@SxCs3)X`DL%(jQW8 z2))ko&N6cmnvKv-;7|UaeELo%T~V|+T1(~u$C!F zi`fb^1s|0km5}QOZB}en+?L&zU6EXo&`gYS(5Tn&4{!ktL9TkFFp}wc&F@C~Q>>TZYbgJJ$8ZV6(!H-~eZcJ8;FiR*D3z;09&FGY>M2Y#& zik}sagB}M#))kDkvFai)0kK-FZUfE&>XKRzx*+so*u^l~r%}G=Rqa)+9h?T~;pyR| zugnO^2%&r|`g2PZ62*Mkd>PI8(v7zyn z`Ifndt%r?vMiX2UTz8Qrz2CFnLwbHh&!fp`uIHBfmb=DPgGBaZ*JI~n=M+G5RMIkT zwQsc#whgvXHWlqpwj-N^-mm!4=@pfV$`<7<%IBBPFMVG8yjWADDf*@0mx6nF_wrCL zlDjB-QFimJ=2@dMM`dckT#%BLl64~cM0VTUwz>3t`&{t3U~kdhBFcf@S-P|IM%j(B z2jvgSKUI9HpbO$4{UH5e!(jtyydP9Qs2*7}vSufs&&!?aJJnaKu2xMoOf`_n^a(OD zN-Iin``uR|t`t`e(GAhfK|f?GwLH zo!=ks_jujxgPB>+bKlo>Mn6$6a3pdhvKzTQpN2jSRY&$6wVIRA!=(lZU=`>X=osMp zlloHrYzBu1<92#8%(E}gF8_cDq6wl_;#T7NlKPUS(xy_*cd4DT1L52P-@zZi18m?f z*a{Yb?*ThG_*~Ru?>pz2&`eiuy!OjbK;wu$)JR zObty9;qH^6%RpnuYTW{01bwxAwan6?#;cO5l4`YbwQ?iid*vhbN9xDOLF9X9wPCd| zN8_+U5+i|vVmMchG1bwZM@>s*Q)Sa0^uJvP7flyUTcfu|cZll{$1I8d$^DZNW1XIr zk(F_~#_byOYtOHJsqUq^bL!8jf2P5i2E7{gYS;)&Y%sBbvc9r@VvuwJNMs71I1k6Ga^NG#|3iob`q(EryP zxpDjqKJh;B`aC{Qe{jov%l!e!b>+H_g8hK^nHmtg`~nuC$9SH1p0Mw*`mKIya6d<0 zEZ>1mB29#>XSGNz_yE2XeTgYnv1lng0?j4O`710rDLpCWp1v)hU!x7EDXA%WB6=bk z7#SG3AG$BhUHE&y0(oiu!8_15*f+Q%yd%6uyheN+Nbi;I{D;F8o zgGu^H`tP*gX*rLGz{7r3c2)LT@>=>e0QA=M=Vz8=mK-lWj`oHL*ghQ-dNnwYSy8s4jOR%1uJrBAl;O1Y6LhxpdXDIK58`zKw(s2 zRFjw{F-KyL2)pCX37r$fiQ>d6U{S)N1WTMHj#-SKnm#pACrBg3P2`(Hnl3346^WSp zM?Y~#z#aWY=(MJy7qh>lzi^H$k`_rhmmVM=Ajdcs%_%nof7BuL_WTHzf>dx)aZ=G1 zlpsKtfBrw9hN6bzUqBsXRdrQ0cNleab#$lor}bi^SeS?8nsQC-TwDvj0P_H|sTTv@ zhxwmpfW06&IysvD;Bm3zViAE5_i@6<3Cz4=p2>#^A0|wSn-s^n`>)1djhwywsQyvi zLD@mM2syG#WJ_f2!C@er7Zke{=auJ`^v~S`0|C#)oXPUb(k7n~P_9ZIr0+0DE1Vq~s%4s;H1*K{LvBh)6`Cfpr}!0OQI&@1Fk^BhkN|5E=_ zf4Q$5DyYMlcHR{915E-=0`#%*-CZeCNyrPz6X%KROY2KNl6@q6-+M!IH%d85$@6zB z^u6KOr`@ODr-y{nIKni-^jXwrQT3whMc)ODV;T#)^Gz|EpxT)zXu_z`c@g!3kI<;L zrnaVO#%V@oe46!UwBokaZ_#bhy+Ajv4lvWHCj1`FkPl6N&uPVJ1$(km0OyT&!Aa!O zK36?g#cE6Y#d7rByc4|>F;}2+uyQaD9u9ur z#<|A1;vMmho7S6Fe#V-WH!JT~+OO1K?8j;M)8g5nMoEp5cBSn~7nLn4J6nEM$ja_p z(YInTVCNQRi#cUEWoe~prCp1=7Jpm#ZQ-DTK?OVWcjjk;Qy>$b(rJa$3Ll{-eS69F z5^6%ImziyyZOyi4+nMRt-P2vzNsbGQ3-D*gy#()@BavIjzi$h53pM9$^c3){N^R8V z(Vs_O2b)1EI39I8Y9#msoC3q6hewZ%85?sY_Dbx4_yO_N6RRg`k~B##E5EF~DrHp) zGi0hn`m^DDnbVwW0vZE_Wm89aVWR7%>w4u16xNf9wWFK+@E(b3Qp0ZV;Rf4W`1G;mW z0l+@MTJl=L`Fe_SigJ@`lZv^?a;;qOtbMQlUjGh#F`Pm1_lJ7QH1wxqj2?45_INA> zReUf}hd2@3h`A91`+W5EsOwQ*n!Yr3HFh;R^bVmXoM-K6=wjzPzlN%Y3Q{P=Q~6Ul zpD&})JCH6(m(Z8fD$*)4GBh&O2HGiR7u0swcJmIu7~OTu^GXJItT7(fGTAoS_NC)X zN0F<@C1`cw^_>`)7+^oc9&i$wZuAe0^NjQKL)KS{v3ufQyVf~1$FDp_$WsK%$&o#|8U5U986N!(+H%@At)HDX?X31`#-|y7 zRr#w*YT?lxC`7tRZwtPc%+6 zvLBl{E!6t1ML+Z%K&{Q8=tI%HkyE(VxYn4d&(uq`QZ4gD5$&qrtgM~5oj4{E6On~v zA?lxbpP-I8-;wX=VC!Hzg)BdwrPr6PFHI;(DA5(`ia#p)sOVAQqrx%ZVZp-!YrZv~ zGyEyJQ*x<+iO-48Ir8qvyT@Q#&bFMp@9(~+E~YTQFn@00+(K)SwP;Mqm=Z25*^kC- zy;{&|?RD&RcoAsAj+R%xSHAhktfRj4Dta~9!_^91jt`^{q;;VGZlh?Ufb?1U9~h$= zBXrd99J&?oOiE*YU0q#aPX9G>5t*a)v*~BkhNulu4Wk<(?Pg1K7GUNJGocefRZ~?{ z6Jrx&Z9{E?RcF<$(5}#;+D+XJxy1+2A%bs_Y?E}8G*gl(SuI{IbkWm~-5Riq>^Ark zP#elUXcJKrN=ZfK;&SmD$r}m14W|H~oz%oFmMoU66R#70D*9A}2$0AZ=pUorj2zzXU)>p3~+Z{um>+3wx$<$RX&%;R7L$o6IX27}kg>OBX-fV%&C zNYUcGw`-_th~H1X7-uO-~SO(Bzz zdloH<7QGO^5MPvD6z1H#BkoY{Q2qs&8^Cje9gBbJRK5{^Bc=}X4sucvcM<&6|Er(A z!Bn6Mr~)U0Cxd^6{|sxzT5&gNH{qQy9v(YH>Ij+D?8V8FXQ5S7EvIKT6&yjo9{UQo z2Pqa8i~j;DiAr(+>_tv3&r*97dlXYuQ&oL5eKd%6()H5!(uhuqS_24ex zxtAT6Bcet`>0|UU>tol)eiQdiT;2G(m?HK;>RMF%7sza4F4f|g#W9?-@UzO_JJgZk zzcnK2Ip`MME&2qYCVm~z#p+^r00$@r4ZxG=C(+fTsz0`Skza{@e`iImf_6eWO=i%q!KA}D#&cOLQROl)6Tt}x5 zwFq}?cWmqjrsn)R@T=`t8#AZ>asK0^CaI67kEfTnm-l1e$G)BZo&JnqM$nAl$~%!e zk-6fzV%~k8NuLQiqam^(vV3&b!Xhp0A?YDGE=J)q~F_v?IZ zzLtNtf51t=+>2J)R@&dxzo{Q7A1Rm0m&%_?o=TYI@I3fD$mc43GD?@yHOn!}vBbW_ zo(j5vdtfcHV7fWGIiCQXOXn&?x5Z#E-!b1Y$v(+W?Hxw1LjL$I^DXml<-e6P?06hd z07R(?P#?hg(@S__nFm81-@)R8#Z!x>7S$=NQ&@y9U1otS&t0Co{r&d$!JJ@@6EL4G zIxjk}PC=c5+eNpF4woJ--DTco9%>zG{mcHB{gv~TbFX`^n|crSpQWN3iJlbR(WZ!| zhz3XoNSJRLkO$<)l*fdgABdfCT}LEACL1Qj8r3#T?qcBo8Ft=h&$q5 z?ON^X;_Tw&FFfgUg0YxQ6CC;4a*`S!XZCcy37U?b0e*l?)|98ujmMLSC#wNiQ zAOAtj2Ql=`Ch8J(%#&FRPyT7yX&Lh*J_3t@8T66$k<|grjku0H@!ul930Vcai$Nys zp9AO_{~PoR^b6#HF~KpxYoG*hzRaIr66h4@6yW>miua1QrKhFmpzEN^?yx)B+1uH_ zw0>!QRq?8#m${eORpt^t<6BF&mhK0}G9wyFZbw*3rK<7#z_Y(VRurH$Qg+l>?P(g{1pXr&AF40P~ z7@etqSNyKv++mnxnB<`7plEhvb|fd96aE#v1ZChMpa%rULZLHYeQ-z0w{_#V)2ycg^Tzkwhks0G-c#B6TFVL0kK>q33}r|`3H;%VZc ze#D5Jhhd>%A!gz83{By}JD`*)WmBY6guCKs(P+`|@bGX)_-k7ETlu*gt>vlZVaE_> zo=pHXuU)}?$9>0S&;~HG^gr;8^BX6#6D{am;Q4u)f0}<`aAA<%#F3(rqA(1MA4@+L z-nq<4ItDlgSq~}zyN0-nVwZUxbseMtUQ##LG)GF^LB=j<8fqIt$=FVqt8CG1(fp$R zMZFE0BaEMw{IlX^@v_axz^Q`V*Z0U*eHMNubVn4RljB0*LZG+5xBoKoSgFA&a22@p z;EeN(^E|MER<2e;S2LfdAAvf68eW&v<+K6*=Wc*{1m2EjL|@z81YEc1`T%xXW?u zEbj;CJ*f-gV&h`ZMxTxLnS3TlAq?!k{7e0pn$Ku{rl=hnA|67UA)daA#Zx6yC99>Y zrPOKDW5@r^ELoQ9J$m1L5+4#mOp<}(fr18Rr)a0(Mg2tdiKrTQ0x#Jo;Fs_(VfuM5 z1TO^H+3^Lssn2`PdmzDgZ*XpKraRJwT#ugCp4JEG(-~wQWab{2Gb+AE4TXln)p@J) zA~}(qn{RKvjm?hD&UlmY=K1UAuk!#Txv!srFF`tBug@5Os=ZgJK!r1ZZvir*jK!oY*rEiwLsrk0%+wyni?|AlUlGh|}P5zqvO9ht-3h~vnxM}e(CBKv` zFI!%=!MwqoYss~&w6C;}agA}U_OAB+hHRShaC!I-@gHK5OeAC!F+*q?;Q6Jww7FC+ zkxQt}*oYZ0_u{$WNAZv1>yqn&ZuPP3v23nKZP1FL;>;%;!Eoqg!oTZJjNhEpg^J zb0Y+e-!8db!kJ(gQ13dwY<}4}^Eq=DYZq&oz05wxHOIBbv&RFeweKR}&x|^>zMj6G za#y(vk2z;=KyO2iE63H?+t@o7d1h-OYa%t_>7YM9&5&lOh^~mH=PIdkQf2lm%uS!0 zuC1!AiepDcCTIq>R^3{4b(Pgs5QCLIEp=Mz?&RIc^t3-ud@g7yx5sUdqc5@v=JC{k zQA1b{uy2g{o=dT=eqa#bzM1(VImj=ozYI} zl_2>QIux#3uUn0vm8F%?*)rWc-OQXTJ6LC4XFgJKq=Ntdjkb+KcN@F^vcX8#NY`%g z4WLJa&zg3itD~!f_XBppu$O_Qdka8k&>buU{{U+E<^$$AGE;0_v zDeqF=t;k-Hed5iDHyZ%^L@#Dv%wGR?{oB^>TEF`aFh64`$a|ZI_R{%6_Vk&zXWkxs zcko@6_f_7j^VE461sMg+i<%cDmL!%iUyRyceviv5$}7fO$6NWZUg22b@Hjm}mfJwj zKu;rYBgS!fSNm4`=uu%G5cAhpqi>$`Ttx-EZgflMg`1@ZH>*ed7H@m|2a2 zb`(|&@2{R;J*NS^ske|%PF?DMf&T)`LhdQ*DH^7D>$%&$`U{n<$wmL0y|z zf-ER%On(M9(ZM@MGDpJa+8D(cg;*sP-p?=8FVqQ|1dUZ~MXKMY>Y=KkDvQFR=p^qX z|6KaH^n3C5!k@$E*xt}yt~o<*gKvYiL$yPX!O{Qgi{}5vXMj8WAA&y!88B+E+DpCd zRL4}uS=(9LLhC~74a*J7CxB;NjIAqv0gFISz|X}r!1qWWOCQS}pt7p0HjB+N4J@x% zUeUwc!_41j?k&5aOC+Nh7R#clMU4v^7j`S?Rxmt&c>dbFwRtadU*^sNpM&?{zr6qQ zxChBB$}FNkFH#;UA7~wD{nPQMgBsqk{;~c+p+O-_#1i4Gl-jg)=uX_M*sS1wpXXu& z7^@hon2AoW@v`wU-X}^B%1V71wfL98QQ1)$Js;WVHFGE(O6DO?Mjg=Q-{??tEZ-VC!Y+W$9z?V-A&tkT5%-tS#6LI+u4Y zPcf&Mbrm`&Uz`>HTK=`Lr*f)os*O2qh<3A6cRbEHj*$e;fzYi`N1fr$a9;t`<9G3P z;n-QwPp|i__ss_V0JSlg{hk{*geoa zFdaD=)T1{7JSg%#=mpepQ#(m7TzWVi)1>ENdNZTJO7xf>2ptG*4{i@`fCulW|EQqZ zUg=wjHqlSfw!GDs;!lAaDBzC|#s>$628MQqcZRPb50ZYOYT{~0?Tix-6%7?R!_IId z7!mTtCnHZL*4ftCwBR@N===?u*qYchc8#5W4f@13xi`7_y?BAF z?`DB!0cwm|gj$430kgomN4g7n#>@z6ht`=#B`pfa{v;8t#M7qEim91vG?hQf7fz zRjle6IFGIw?xy(fQQyelx68`Q%CYFr=2^2=q*jF9#7s}7hjY8emd2KaWedv&77r}8 z7FY{r=FiOkE$_FypMV|k-ozY>T$DLB1nIfyxo>jb2-@6wZ|l9y$j-?A`pws9ss8!R zk?bScGv3X3hv=l-PYOOM;9RD(ytI6~b-VDHrH5y@cewW%vb`;Si~sMy-+|e|*+FJd zb_#V8dRtRMDZ;t6IdWnrLj z#-LNKm#UZQDbT@@7FLCk_H{!w7~E3cQu3a|`}RfIMd7S>6CJhmHc@w-59mLpo)YUq zAuHey`5#DBD3Wt;#N35X0DTIaSs@Bp*$MC&^PS>5#a8)NIp0y+k=aLm@Uy_Pz$@=7 zZ)JC7_XWoV$0ge(Te3CT`bWhd6^G1+%m>R4mR~BnRQ7l2-=%+*{8e(a_-Jv@qMk*+ z7yMpOC%;bqce&r?j(b1u{rQ~pIafi}`>gj}^19?LDp*vYMS(ZHiuKL)1%GfWTPxch z`yRn(o#n`K)B%uI*wvPv$3Nh(G z?Lci0T@R$i9Mg>lJGDEt9W@;_yOI0NSpxS;Bapo#mWU;YFBLTaoar-vG6C>;F&ogw zMlH{q;2Ws7y9W0M_6P6^_J0643-#h_7Kj2C=)G%sYe9wooA-wAhL3p$%M^(hwt}vJ7nV-}_x!U!6gVF_kA$>oaOt&<$iYo$-8j$tA@oD& zcJOxaRNz!#hJS{iS{-^ev)$R0Y`RCgM!R@--2>VHzO%Xm_F{|xd=9-vm*Xp-wQKEP zfDVohjs$emA~x9h4>~>B)ieh%L#V&2ztA~A-8XgaBW)vXe5P^#KN2vXozJ=Yw)(bn zV4!`Vy_y4{v%Zh3k82O|+^E+NdV}6#U$JkOf0sWt5Q``9h5&sN|A7~w7oi4`29Xj` zi3rjHNn?3q`B%!XlyZ$+b69s+$Gt1PSlm1Cj=>Dm#Yu~WUE1KJ!Abun{+sw!{8#a} zV{XUXL|6MA{T+Qs6Ve=m_L}Dtm)r#f?qfOkF|(AjlzfK0R=-xC)ST3?C-W+(P*QveZ2?u|cRw}Dh)&r~s9`IxNkLB0R*UgZGTh3e0Tc@Kd zjx%d|ZjO77dsN6g=8lTmdhW(JuY3l+1(~1|Xa}Z%H{hGVH-R(Aon~%5{c?lEgTx8a z1S!wMyA-<=%s|Lh=c*@aCu-?+tA)N%YGF9nFOMpZ>KfBEhIxN|;1F8e+rzQc5%!20n?lPX;xd+~e zj9zN&R)TY2rg)~{lgX523OmU8s`)BrH?97}zYPSfPGi+CJ(&>e=X|tfi=>SSVkJjlpEO6;MC%5&EV$6XS>a zg7$)tja3Ex<#(}Ld8m9S=(eIEN~KP%YNTp}XK=(B2;Pzpf*+vi=6`TV&qWI3iQu1r zJ{7+6c)tAzd2J_LCtPRkXYE;*EX)1!`{grAXO#X{{9CaGOa-u@mMkq_T7K7Z*D}^I z*1;T9jb9^Z`K%#p==<>ZIPo71rvc8$Is`ie>jdfqOn#G}J7GL#8BghH;cg*hl|67i zK!RXjr^R7G!|pN15KxHRX`ZPD*aq0zSld`b6(K=){8jl^&fEDobK=1oU z6(3c2zzWL>ixn`l;up}~)*jB4fDQ6o#}?$4+obz+eo_BkYYEu8*WY9XNbq@D*GxBES z@x8pLcv10;vKeI)DkfCavDL9{a{$*i7xxF$EBx#G*O!MbVV+rb1a|}*h8n{8a!klu z{y6+`cq$kL8UfD8?SR=Q{JWM$N+XlRlf=!W&4k|gaz(jfmTH!2GjdL;liLN@;nH8* zUrQY__q)_fu^*!&vPC;ZcS54*b4K4r9|N8!k8p;3V0>WYOus-^plhvdtzD*GrhbgV z#a_sh=T4iuSDvA$@Ay;vCzLVm#6Kb%8`eyr8+;Y=>L-RKhNwYckJo5)22b)%^5%MS zJ^zA+-iF@y;3=|=tNY+SpM1Dlhj@(jZsqkLtpzfgF4Q_%{fF40=8~Gk-B5xvZk38S*;_hPJmH9i) z`|DSMuLATL@xAcS`%v(w6{A>zmz@+a6rJIm-*ZPZ9sCSZoGH#70Iw$3L_qCSEq5(6 zF6>RsxMMNY>FP{m&btpa_7{_&@Sn68qQZi)a z{iTJyg+0}g>fn2ebHK~U58UkA?5iKBADD?QQ))O4f$QKN(1mqS4_yrxM~WlV+ANeV zl&+Vrms7LdN!>~4&l;c|fMnn=v~eI_6E9@AQ{S2=%aduO8tGT!uf#tvqZsh6HAXT< z(pT13c2#jz!8!cJ^D6FDTxmjSLc>Z8D;)$w!OFyyiCq%9Bs`0ICggK7 zM}m82>R;P~=^zh$7X4ZD_h1hAChD6gxk+yNS^u;Cp5~s0+WP9qQhOzOC1is<@;~x3 ze~lR`%p||&xW-SQBhi`Yq?e63Kg=9oIJJzo*}iJJmuwJh^4^X8%J=O$=` zxm0^!dmrDoeCEVO;v)YO|4-aq+Fe?V%q|7Kz5smzXT?bm!sZ&Jxw$$1rb zfBNsKN#%3UWpmk5Kn*lo(*u%Oky-KB{MdW|IDoanTCvx<*UHP@E!Qm<=g&U}e-5q^ ztrGEP?o>LJJkQe;jO(04K|v=`Kfsu9J^+a%<0 zHHvQ(KQ?h};=H7JNiC9FBri-^n39&7mRcE1NSTmgNH!$bPO6>sDB)2;YFuhuujpRU z>x}D+Y5FvMU-&KBYTEKwQu8ffPRStsApJ|jO9Ovbc-}b;sG(YATxGmtxMR?RiTa6p zdOfJqNk&&3GoFvDj;nMK_@>BHY=K8 zRQv-k5xtZBiux73E_ltyX929|`MU~s72GYnTiCt0d+~#k2PK^2)+(=sw3k21F8^&8dEjqE`XdMRtDb0yn({=O3Za&2cu#~#pZ)yal_(vfYD$tGRx}3 z)QK@f8KU|a`WRGNm6o$G>iWteWs#4A9|y6P@&#N0S93>m$2sdcp+AT7?JFf$N(L7V zF0$p@^3UX+$vvBMHb?nR`7SFvE4$yDes54q`|6XIpS)c8-^%~KeD>wDT~BvCEq+}5 z_?Jh&JW2;u0C&EdA8&rV?#a3*qo0m`8UVfj?fvg~FdOUyHn9KM{%0qipLm}3BJD-R z%ZitxH=;Ln-`0KGJEwO}hujXi^epoJe7o>=;gg~#MW>5T7xyXYQ*shK1W&*tP!5>W zLp_hITvk5PJkm^!F0(DT8<>qwwo~FL0zIpz6{+5B3fvJG=vW@WWbb8{P?r$jgFi%mh)_%U790ljEDQ_}49^SB3oUR9=RVOA$XyCH=uTq&z6_Im%dejRRNw4QP&pXJ%2bl2L6=(DJ_we$j-{o z%9RSG(62-f1!t+$_CFIp6Ed;+POlNJ5pIeO&(XorLHbvC&!P6AC-@w2E_e|=+lPaP zgX=@2H-J0jqkwm~v0ycr4%z{?*p0@6o8sR9EV_~-fPIV9iE*~i z&qOw0CI;_HS;%qpi~U09N_AvQ(4WA$0DaedzA|&GX0T?kUASFXDwc{l|KaRbhc9L* zwT)>TBafHIGe4SM-C;??l9mA}a3{JGS0t=RcpLXNZdmNFSnj+KHxNB7W?Ib8u|LNi zia!)jU*+7&b1O5y@Q1V?(roFr^c_`pRM`)zgWl=A)9a@CS`i^^kj8qb!BEu zGuwo@CLO_I@ED*HQ|K6uON>i&#k=A+#%+wl$S;=fPu_=~nx3K&eWH+k+Q!sI=q90{ zojPE8ROpeIshg==i|lu5)`!W5$-AR%f_rgEP!g=?tLHoBKIUHRT2vtT@{Q$& z^@gAqq?g?c0^lm>3I4JDg9-LjsO`E59qEs4k8L~cJMA|dHyqvJ-K^xP zA*W+cXphjh#Pe+92FfEp2e@iufo(angH)@Ja2~lA^(2B zS@(>mT4B;OC#0 z7t9OtbMZ^$mq;o~uK5{QAzdM4ZPt|6lwSs%cOC*Ql`WMFtfF>^`D_>?34R*pfKlK5 zDEd(}Gj6FxNJ~iLm?vRQ;+({7fH|AtgmA(x&>d6<{CAQ8>gUkDuqQqg7m8~RsKIX^ z(>^9DIx3pI5zOdL)+g(8HMyEaszpL?=vwJoDf3=oaf`%;VnZX5weR-1eboE51NrEw ze*(-v=hb;t;3WJrkKK>mGtl+9&#}+3+P2y@+A`WQ**w|Icksc|gQbNfg(aK7EU*Ib zKQ94Y!Q0}u#hC!oO2Mz*r>IX+H;@VT0S{PRyt=qwNxzaQrBg~Dlszb$Xr5?Juq0T{ zSkG9ccBx(L5Ic4O{+?|BTEMJG{{D>z-1~9H+6(jp{Ldb%$GQ{50A}vj1|rZ1P~XJ= zANS3h?3)CA>0IYr=VaGp7iW3w5`E)+aYP)cDyk~#Ebc6( zrn4hDWj$afG?*sBWF-K*KFd8mFUWNv?;{y@0zEzvB|F#nwY z-fIM9-!R-TOfgO|mV-&ANhS#jx9)(w(R-saV={U5ifI|!GByQVMMp|QKwqsj${IBZ z@I%Y9X*+Pmc*V#(1$I6((>2r4%g78kYC*~*Ws(b`3!;*6NtpX-&SOS^x*!IKfHU9> z#0BGmUxMDD-l3u4q2bMu&5_@b6Iju=8$! zet`b1;jN(&{E+pd>POuMX233k6`%#k08@cJT2F~^G|y`6`(6n;fCDiHVt$SOHTrDS z*{IJ=pPTFkyP>uoXlrX>_g5z?lLb9A{a>%7uLK?CD&#;emoJweM^^XW%D_Ac?{n^Rwg)}HJ#ZcRa*Po@E4?eda=%>Y z>Z5*%nM;$AG0l0xH82r82|W>Zk@SVovpC2<$UoLM);Hff-@DthTX?2)Ku%JHs{%KF zuZzF0)zPWOdBsHEMBgv|U;JTYf3gpYvkE@5?g4sUJBd5-ks#hE*@(%LU&0-46TqB} z(crT9GHt11{*L?tI5VMk{gL#M^iTPpa+yk|8lV}VVcy>2 zMSy2+dISD|ekKti#X5t|a8G+r%lT?MWjkdrc`x~o(jTSFZT(67lW;Gf7j8H>5BQ#2 z4qgIgrBF}EIoVgB1K2IuE%^bRiJX`1iR=+Hn|s51!><9eiJqf}o}PzfS+eYf{Dqu5 zv^}alDrVoW1T{b(RUZ|1=xdPo!q0MvxI}D^*dvaRL--j})A5D(3vV}1H_w;uFWn=+ zWiZ||-jnW4M+3=uZwQEdA|JC2H-T3Qk7>%HrplGGV)ERG31{yz&XGf?TB`y*i-DAY@2NJ z0aih_R*qJV7Ooa9YP!+`=>g8AEMkk8`H1_K`<3)W&8`pS^Bbc*rzk_imo}Q_MF;H>Ncs{x?bygJHY_3rtX@$ z9qM$bv%c2)TJvhmtC3tSx!RE`N2;_-YnR4{7W1qj*-B!LS~xK*^p0FjyqY*4aK6Gb z-=4TVaoI81F;AkNMD0O-KtFvyJ)~V)W=(EJ_C^;)7X`E6xfAUT#NaH{{G642Dfv>e zR=igHvFKxw8bwn#LpMXzBo9DuRWpAxe~K@~C-=&|dG0*-9oHS#ZRc$#>~W4YU?%t( zGX5ep&JF(n{M@8^Q@uZe1HJ=3-qC(VPveX5i*T|y zSv*WSOiHaxS7c#aR9#fvQQr}=a2}$cnws=H@E5oSo`YK2TH4Ei9;4a%*}`XJuW_&7 zJ-iZiC2C*vzUYoI9pU2M6tf)E2dAP>Me9JXs9sS+OhZi7jMa?vOfgrsL{p+UqCTSD zrP`(X2U$D=Kn?H#;Estth-h`RTBT8GwD_W5_`2@8u93cxejsQK_`slkeLbLWuNty# z`S}$YMMl2=w?u7;DvK_Q?v38z6LBZv*kk5P@Fko}JeTML{3mj6I}IAWM(~<1)h$Is+fO)@KVDyxg~Q1v zx()IkndSP2>JJrtIeeeILc(fIo+R;GF85Di3+Xcufla`Tpop_*wQdlA=Gsgs`u0 zJ{>O~FQ0;(@KwrHO71Rbu%rJzN0p=M4kjxnE2$A+m$_T&mOhj`l-x&l8Xmi1&Oy3? z9)L6F7hr^V1mk(cCnYB(Bc&syiO83I4X((q$nV0-Zd4gn+z<5D_SW*}!S9XAq%sA; z=TV;dxNAzvw7P`03q-DVBU4baG7G0(1;jilOR6`MdCaL0Vd{4t=`wrCtOrLx9;mIZtz$x0s5lb`(H3oJyFg1Eqw=^Z*Bs5onH4n;PYmsVWr`j@tJXK)YvG#lQA}m zdl3I1ep2Ejp-19L(vu|ibg}ONQR>OpQ?941O)Y$ZVIx`osEC=J?1q>PF~w2EQU4nMH4fJg*K?mouO2_E_+us1m|P283-KPudEzbqEhM2o z_V)?&3Fw1*r1zEyxf(sgJ)wmA|MUv?3ey8ijosql;vg5Q+rdXb4=(yIqS2+He}Qj- zu$#Ezx#F?FA2J(^2G_t8&lFF0Z+CBoFN2a`VFt0i=u z8~cWV(;yMUDE2F;18QMk!F);7Mg^yX*I-#_S%~lELy<#5J~1^y)Vk7F%p4r<6JSNq zbu)A`v@o{7Pw$zrwyCzMIS3g;#--qj;fmp={-!=lm!+Ggou;j?sjtaKk2SrD0eL{) zU)Eo?K(au>X9wr0%)q|wzwI~p3_j+fws*I8w|2F5Epsk&YQgW0-{D^UTG;)4>i86& zqH$15WjXXtJz5hEIy<^Ly0QT^H+#VMU?Ug`+5+yVc_F9n9#GqlDGf!<-ZC8Q4z)p>MyNY%dkcO0ZL$@@>!X=!q{0pc- zxLbC&j62K{Yl-zXy1kjne#v{uI}5(Nm4TIk0&o&gi}Tp`*tgTW)63t%z3^3h2>8#P zo}HdFbgEVlR1Yi-Ee%n>L(TL?p9q~0I<_AK9|XID^MUh$rhuBEj6g=f1DHw8+(haMsKsV@c8RJ))l}0I zTgZDzk36Gc|G{DO1_u-Y1;)X04uI>6>x=2NIUYJ5s*lcC{+ZPHY{qVOCg9nMTBR=j zF1Vcz^6S7D-xwdWs^)m+c)oCd;imSScVP+Ol9>kCbijQk|7myHomaqa@I8nC=3gyv zFK}~)$nW1#-%;NI{{jDa^eJTnWl$O9VD)!!2IPVj$YbA+&L-}Wazr^IYTu~YYp7_b zpuau`@T?UFo+8JjrL3iFtz@kv8ac-`MKwjL}A3GD9aS-EHBe#!lkUx8Av9{gGP&&t=5t|iT>G^dh2Q7`nnX2fO0 zF*}%h;A&CTqM}SuriR9bLKciy@73=CJ%L?k*R2I+tyyaXIqDqsMAbyqO~p+?OE^(F zQCde*M>1GESnL=1MLbjV0;d4?YCQiihb{vAGQW&{&wZ4Alyg*bRD7S|_@HSIc%I^! zt)Hr&DyRqwUX z&V$zFtpyKBt%_O|yDhsdnYK*9ukjAPnz7!oUVbj=`=_R2w0N`_YXQms&=tZtL=5`f zeg^bYv{bcJO;Arz>);5ir?02KW4vRe{^aBMkK>sQ^k>SSDFdnus4}bCtZIQ8ff|3+ z`m5Hx+V?1ttlb`LtGTTvYJIDhR4J)4ICXI9*`%{cEfQKJAU-B`X4K564D@`)>SOik z+H`FbbrW?jWiKW5R_rI?tiPGKnXn)2Eb5FT-7ccZ;25C3s*bo0n%IUR`D>~$C*iy# zUz9JLD@%|GKplGLaOZHfP_@uo+(Xy+*Z5nY1Iz32dhWXKy0ctauC>m!g8zS(eU|-8 z+n0jQGSixA9RpC?V>P4We2Zg?gEOnokVVdS?g!xygdQVyyfcxUz2}LK9X`IOPya-kHRQ61BO>;T$b;o{3(6~0THL@ME9f^h~X( zSX0r>+|A7QMa|NhrK^fp3G?aw1^Wv&G3e)DqVc^DZ?|Hc-Z&**}VZgj|FPstH2p9`#CtHG?%z0W*1cX5FvZuVFsLD%C1g zv7%T(U+3SFza?KHkMP6rhv8;YJ754xwyGjQw>3%{Tjs@1@}%4nFC6#Ml#+Z zIVb1&t18Gt&f5tv5pa)6&+(kdoCwdT;*dCW9sb&%{6F~-MdkYmTm^CdI3!w~^p6OP z2v9e6A50ES4iy4w^PniF6C*KKl2D<<~iKD}#!aEX@*QiJ`B2O#GPmV+qF+I4ho!G$V;(#4l35NU^3`Q|qSJ zO|M#|YL%B@T-9+^AAx!q^)jY{xu6ypT6JjEiu8)~;?&~QKFNKOn^kI7=}z38xcbrc zqxTv18UCmJpO(+GRCp<8%Vx_s7rZ06gH(x~lB1v;^hMVDuYfwesbCG@o&F!`KhoQh z+rnpR7V==Hgry`WL9`q`0L=;!7uz@_-DcE@vZw?A-|Fy>(}3l9p*{*N%wNka$)Yd(Yq1K(1%_J2!Ka`-mz2Y6Y`vL0#>ooWp zx0Y`$?_1WlEUz@LbR05&Zj|3Bzguxv&;av3dDV5*HN!K*v%|Z?Tf zU}>A~(1+Q>(!+8S&>y@DVC`n@Ve4UA z3cdo90ex}PtkbLqEC(#tDy~)V{m5ZgDp*#w3@rqyW$XYV_t8e6k!U3J+0Y-=NZv?(P;pSf z9a(dAbF~}rUe8P*m&&DLw%t#PpM>mizH69q^D&?&;24NS*VHjUUlR9Y?N#kneEwx2 zk2O!5r#0$ehFa!(=yJ;go6TSZ$%h-APUqFv-{_-wd0hy#$~hP#1tU}R)ugg)c( z;_>3|CErUNQiqheFAEe46bF?Dm1k6ER9~yVR`<~K(EI|}JIa6d2J{sMRY6s2Fh@B@ zxlgfAaY24T{-^9uS%I`bnhsV;R^g_cB!L7?%zthH%;e#@APym#Zvf}KS>S8HzYo21 z2EZ9E_o%DHtHh3oLpX=iqqW|@-oFMJcazHyL17V1}=laWrNE)ly@laZtiYozfKEF3rjv2VI5(;0xH`o3(tlr|JOyj9=(!$ zFYvr@3NS-@AJ_oSg4Ukao|fL0-s8UGzD0pW0cwQaBh!Ruge}O6yRW#f;P0wJtI#@7 zTztfE#2_+>OvQlNrXK_L8gZW06`7&`GyKmmSU*_LT|}X_5O3v~+6-XR*n}O*Sj|`s z{oF>NR4G*t6%Q3(z=7CU)>y`uCiMi30OX8FR&5N`^}4W4y%kkxO z0gV9SY;%_7F3Y`_e=mPk(W;`)N{=~+q&D<+1J^JI)*x)fhNu-Xbao! zgq6ni6@dNF-3xR9xyb$I9B-0ylJk(`ki!J%q2v6UJtmwpZGa~~)0OFJ>~73xF!w&s zK2K|JYb1!>^fJ%?H_#gyG&z8Nx8CT7tqM&TvtCjosgX9KHllIRs_c;L5c0skk$ofU zBkzMr$WtMAlfTQgl(i^NP$sAo)cZ91G&^-Wb@_&T!|bTpQS6`iJ^uIjZk4)K+E{sG z<*g}OQ%0qYO5+e`K-B?N7i28R7+h^|wF2M+3qbdb?ira?GON5veUn;Lxv27u#2bm{ z;?Bjfr-7!7tH!Iw`k))&E-25GXQ~xlD|&Ox<``7##x{#@7T+kLQNn#d@6sYLCw@+R zFg6%lFQ#5h)2OCV%=YB`gj)YM$e^T8iT4#|h#6%@*(=E_3H2RzkzLrm@P5-5Fq2^i z;Q8GI-iO{pDSaw59n=P#r*Z$v_f>z8@6Q)9CwazaZ$}Q`?1FdVO_5EJlcJNN4d^=L zth*(^l>ja1)5Ir4Cq$1Tk0R87Qis8LpCxDsZUVhP8lY}38Bk~ZJ6IW78Jdqy$zEz!3pAmcxZMAK+zW^^#=oC8YJjV_Xpt)x&^xhneoME(f^Rw2l>75PT}s*2e?0ct$dB!;t=7zaY}wlzFM|g zR#jS6%I7_I0h^F>z*&jU>+|k+?{^P!4s!DR)*rsG8x=PymYA2Ax0G)wr-y7K_zcif zMlB$_7iS$C+J7!`#E%htczV8T}oZ!A#*U9~+Jhw*rj;?~;7}F%zj@ zq+bN1bCFuC7T1&1lTa^nM|MZXT!%f%JxYaIp{95KH|=l2vzrj=Jb-Js>6#)oI=>hR_A3``FR)o zc^t6(2C{?ML24LP2#t|QCDLDHzX%RtP)ex$3!UgUX0asP z>gS@V_cs4p`o4y~1~Vuy78ui_(xPTZ&yJ>N2Ql`(SnpGB?un9!II&-&B}YzO@SXJekA z2Z~gY&<|eUU*EsPw?z2tQQt$Y-8#U#%?XeN=tbk7-vZ2a&vl=7o#%1ZHQhPgndiuZ z@^`eO$X;Zh2Iw7I3+e$A;B4hOSZ`l%U*}lo*yh~kT;y8hY6aci1JK^nUht(+Z^XMH z@4KA)WFv2j+Uh#?I`$XV7uM63)0Sry&no7F6JWVzxy53&Sl^(4mpd?iPlo!2`jP@k zfoZ{Mg2!=JXjf<|coKXf?7HcrR|D!ftAd(fJm6W6dvDHSsJ+KA#19)rpaJLw#{3`j z>zwtU^_zWWpUrFYKKDHL{N)C&zg$+Q7472_aLaD%+yn->2Dvu7H@m5uD*b;v-F1MJ z)%*AH>6tAScIlGtMnNeBR8Ro{r9oO6Md@yk`ii79(qWPk(w)-X&9ZFo&dkot^ZuM4 zKKuFuMA)5~`@TKfHGs&|&&StdnKivA_*FIkoUdq3uWj4Qh< zd(|9Ob9B$yJ?F?=BXhON-75E4T*i0!JJ;X2j^#X-^H7dMIreAYpZ!$qso3i=*JJKw zyO-@~)}vY5MYoHd7&S4fOhlQ8PMpi7`DJ;|VNy&%c>*iqI+&^@J^$}OS2npJT(>2A_lFttw}1?3Z#Of8w(IIVG-+A+#co4uRL ze^D;X^3ZYm|Ho{MD7FC28(h;Iab;CKh&VkN>e}n%9trn~0 zB(%1yuNj>Ct^TMC^ejFPJP*u;#;zJ8+k^IC7c7S|H8iem5NHrc@+bKfvKF6zrNlE)pSx2r9M_cF<9-5c!uIh#mzqaib)lTbmd4= zPAjF%5;ea3AL=F7OIE)+ka~jJ=T#=7OvXU(K=04g*k8bzYtu8QXATVv4Rj554Ymrk z3U#FZ?|AEY>rUHFn}aXKCl7PBQw>iIGmfqlQ7Jka2~_bY)i9s%i1k#w&-lp>Z{j8u8DLaGa@r$0eRBLqK-v% ziS81ueD~uq$76D5&z=1_D(9%IX|36Vs6D5j#C{SxE@oWJl59(|t>AoGJv*Og`8-P$ zU#}xxn|!8E!#@pI9o=`ak#lAgYpUn2=WgR_l+(th*; z>|cK`<-L@R$s3awAg4CzFox=u)-CN+`l)o%S502dDe51;=YP-Cb%yVUr>!MYf7=6)flm~zQ9M;YuMtWvA)RjyT> z#Mr{6`c6}vQ=FF_mmNA|QR^<0b+z^i^$P7}PkjN-x?AX5XzG9}(5Kj~_79tF zYG3wR_FAf8dT4rRV{l_obKPiat*J)Lnv69Wqz|UeOr4qfZOXSP%3TV>QucT^09{z( zRw%x!+N1vS270f3SqTSLagBr6_0WVEV!I>fY+!QJnFl zTnEx1GK=6Cd()Ng74n9>$2l`aXDNP{_FdWvYG=QLTG$T7(A%ZAOV6H>o!uBi_!RnQ zr1PaUpZC(l;UFEei(U~|b zX_z^G{#^1oDsOEw^{|>JHBZw1Ev-MRR^{M4`wquQ>QpyzoS*yhR%>uXc5&!6T`Yn0w7 z{WQk2&!V5VpSQEGv+r%{)t!g>O06?hhiajdvSIfAdP!0%omrYp)4wv;aMrNK-hC~7 zEsEQ=u(z=Hbo6u-a~30WbGE6OdBl0dc?g6WoaJ2QT)(3|weFNRIuEyS1#>{^wWpE0 zk*TZrIcM>zHo`5=dpT-7Y7JU~mW5Ehkk*3tV2f>w?YjNCJ&!YwIs1AD=U2D(wDxGy zt2Io`qm@&>I%0LiGV=X4L~V%rJ!y? zuSu5X!0aDlP3)T3IWcogK9TAOJc)V|)ibhZr0M{uj)3+`4)P4*gn}r~E%z-V7B}4% zkHzyANFVm>b?->Bb?85|eP~mROnrmqgUZ{Tg^^G!N_~XZ0mowz)Gs^+ zDR%T2HBJ4n6`>W38XlN)qwibpTa-80-`3w&#$JY*(>{9Yexv%41$0@dS^2Ny)WuU$GigBGs(HBKuY(k%xeO`8o>l8QY)u>k+ z;y1)!czxk@VnSkqz7O4C(w*cx$s1EPrnFCOpQ^8MY2(sVuSjclinXbx#vI=qpV}(L zJk&qWvBEybt~hvxE5lXQQ`L;e$ApbBYv&w|8df;GFuP{I2|tZe>|+>=&DaN>+1MD$ zk5>INt-TlW6!K(uXLsj!<#*M0)_2Z#%-7MIj%W5~oSJcg9d#uzB+pGmRJ3_G_)qdE+UYDNEp3aqM0L4G`j499H9(DPP28sqQ`7ik$*y`I#<&^Wj z+MGq9H2|HDGcYjFoWZHO{feV1pKJj2w^VEPd;9nHdX9Qzjhu62b7nJRZOw7Zq9=KF z+Kb8sLvQL|_Xd&CG|nDOs}zys4B&JE2q&t!Zk-kcdZIyBmRPxa4w9je#F zB?->v>~|+L7d^n$`q*n#A0$)>p1IhLicDBbLrsd;E1+I+rPJdZ(UCvjZ>UcuUuZ`*(!HL zedXh{$7zM2dC>Nh?I~)PZgWoJVa_j_%l_=Xulv6KF8;gt9j|u0ssWC}io1_%IF3!2 zi=S`-{a*EZrFg~T*NNnDaREO}URx72Q_4bmH=$9iMEH+(mIt20+;eox)XN|s8N z1J(o9oD`EQO5t@qOF79KR{!U9cpW$J3T>QioON7vTx;BG+#}dqu{dIJ#MP*)Q5>I| zHJnYJ9whb7d$W7Tq*!)2!XIb=y{}R~?S5PaeR@5x$`|rmRXn(}1$WyGE zskQym_R^*nD7T7I+s(PVyMntop{Fwy zQN9fR4DFLq%(V}m1fK+t2aX4{E~FTlJHwq(F|A^n;trKi2d|;)uUg!Lyo0s4VUP~+u)drmd z#7e(m`{oVdPEnCf!WFnXDRntFaIR@GkVAUP!)R z_EQW>9>l6{o8-@-dO6il4BAw!y8W}!8j1z7WhLkaZTf!#w%~9TynW&eFmq=vsQbpT#4D% z+15`SpE&lo_P8E-9(mLc=Z(x8shp8fP@de0$P(+X4rcu~`rqhEsF$Ul+25~; z1>H-(AvZ~_H(v_@68uh)(g}g-#-fz(q%7@fGpAmr(fsZ*OxDfmPm0La5 zGS;EOCK2swpg?Qr$0sBuwS}vQI*vgmPGNSdKus``TNt`AMwJ z9M{MRd>)&R`aSpXH?*IvBs31qhklH#_j3l3@^hyIrUYVeBJ)J%8tgy@It4lfu0w0t zx)0QjG=t9L(b_Yq&Q#T!Yzd){wGYwUzpUFa1Zs~uKz&RKwZ=cew7|5$@0{ti%D>95 zdAVZ8n(yvO-IMx3$_FWI*+_bj_#iP0MkkC;s0=GOitP0hJb?03C|CSCXF|?|_wYHi z_fQGo%F9=6%_dL{%{6gr;*PvL^3wmp|DrdlVK_8Lo*y?qu3db)c3^ju{ zXKc<;?(4U~Z-ZsXh5yz5t3A#c=e*#);BFq)+|-FFOl{JU&|bO`(C?KSWr?(KqTZ&+ z|3&>TYDShBS%yUqi>{rucGgoUnXP2DrlgS>m#=MJ>t=?ax>nzBXLB zU5nj|O&y6U)Q(<$kCd((n#Q@k|Fizjs{UWkLmAFEy@P01v}=cR zhx4N2qGJr_hCa4FwrUKsHMrHBL%o;tskKLZI5Z|>x*6=u83uW*d91PaSi8ax0&zoh;s(VobtWVWp&smai)QoMX=(!Q^6m0H@IElL{>ppH zQ#G@bHy($4hfIA?mTm*eb=<=F3%Z}R*XDQXJm}}_#{Uo`kenAft8Eqa!J3DfhulGT zQ2XVzo|^~beB-n=%y*vJFFWuLl2O-J*Ebu9Xyk8X>K$o(seMXSVaGE6GV?uVQG>7q zJZKEn$10Io!ko=fEmSRZ+H%@b$yUkMz}~>Fd^P3cy^p)(^EHO*bIrBRwQA0 zth!9gIK!eF`$s2oUWi_|=A2zQ*R3jb##9$Xdy_VBZlq!wEGsw$xCXfXa{uN2-SfMr zWmrpQRvT!ce>MA8wHI0ay7oHtLP4A(->NyLIj5PLW~w2j^}4~K!J!j@6DIGxmcN!? z`S~n?c-LYQT0&#xHqah6)kDZg$w)bxjHIJUZ{ZdDL_SLTC`spr%}tqWY5;D?*pN}u zU($aga3iq6vcaMp1g#tS$uS-tHazUB@UP6dTdLi!^F7K!bJv`lWukTDtB$LV`@~qY!QP9yv#r@*)SKMUe{`=?y#fk5NX@-~byBW8kb>EuUoxVFgJG7rwHA7Y7c?jp6#wW!m?L`_Eb0+o3 zl#wZ8Qpcof|EqGF3sJ{qCVqkLcg2X6JCXz1zc@c-eoAE&hVq?iq}E7PUe3kzi|Grz z3%sML+ukqGFQ9(6xV5-B+jXjAsu}wd zcq&oUH}wrlvp4Dnd0whp;GyuDJ~!=0o4~%B$DCWOeZqmrK;$><(Owe0BwFWGsj#(b z0%(8sy6AP$t+KSrqS_Fr!cUo8E>bSt&8TOf>pI#t+NM0fF_tlwlhgy!8jsEZ83n}% z^yjKixF7G>-k~aPS0aNSnplSF$7zqA<`)yFo16#XP&=>q@ygK3&`&x!fiog>R-T^w z7)OkwEh=EDeX5y@E6%JKqxP;S{;qaivGj%PNp6_hFjeccC6h}gt6dqKI5=@f!j1$N zG-kgPe<{8V6zpG%u^0pWJ_UW_`^Ho1=JoHGm@qLxHF31Zt!Hx2WbI!h{U@atC-E)E zV)Q{NXm9FEM5jhGn;w{&D=nAFvs4~|a(u3Fe#$l9HQy`$E5G_cjkOks7KdI_6zyHk zu*s1rm^p8&RkYblVTfMQ(YEX7J3+b80-(_YbpNHBh8}WmR9Z z%dyLm*Ok}R*4@^vx^qL>@A66bC*hRY4<8aSB;q)fpQ2pwjra`b!_S9*fbC)1O)ZO3 zVWq-a;|A7+uQM^{Um|~r93M44szR0uRMj4pr7JFT2Ij@ci;-GKTE@Qat?ZB1eHTel z*=e?EHpQ;Kv3z4W7COeO>=CMq#uyIm3rc{-mgP|qx;LtzBs@4m#HkUM2A2j;voGaR z=B3P?{+)i+6xAAmYMSd=?Vr{^Ej#qA>GwgXZeT~wo6lLDcQ6|oHD|jn7A~YgY)l$_GWsM>dlWFpE z_OriZykoo>pQ-l7yVP>~1%5PfH*wE{V#=?e{N*xGyL|!u!uo|32rm$R4U-}!MJN{V z0~AMi3eC5AK=D@95abQW%6{tr3E!0DJC-e@p^KUsZ_4`l_XdL^HVzd`C zFJ>n4Sncg$~T-v#`eo#(?;)vHUJAHP#+FsHoy_2aGT`5p0pngwt ztaF^f@|=2e2kZyT_^}jqP_IDeoz-^NruB?>Yi{^9=QV4tH#mH7c&>JIL3lG5KZ7+(s>~&HMewTHZbu9W~1b)FOyn+v!vub=ZAKg$6%GFm~Rkicx;CGNp zVjYFjoHMDhkj8PE=V)*56xS4&`nl7H^~9=M@@#N#aHqM_Tn=b$W}AJRU2`dop=+Zw zG$&SmkH&*eYP~4Vu++KKoCm#MIU^Li;7>_~-bQ zd(y$%!TTcpMY{I?ZAsaZqMG(QI2UO?`;%_IzWI7ORv}M9o`fsd!(OgUNt=?CC!}%3 z|8N@W$dn_dGjT^klS%E7RW2&S?+oQ(oZ$?H_c(`OT5wu$V`yVY>$18gQ?U%gQ3y+^ z+vN}WLmxu%?|sxndzSgk3u@11TsNEXatxPw*<#mu*87b(xi~slCej z*{aQy4CP1^gU)c!+PCKSUqPR(@{(OPm#N*X9OlQ+{CT}|z1jQN#ofiN3HV?v#&=+9 zOK;M|J(PV)KXRVdcFyT~Ma4?xVs5l;wB^Tg>vDGfzisyO>v{Sa%b?#M$31BLbQe3J zy=cmHITt!d&o;vB?M@CR2aiD4rXAGYXgx@IJk6jW@ZrqERFhelIUC!-HhVHL#+lDY z^INrdZ7prh`4xIy%1^rn&D#~{R}NKYXutkR$4Md}RUE_Z!|mIsO{{)ZZG_g7H80XV zxECxnTl+)v{pr-6EKhB1ea{~pKRC)e%R3K3&*lv5#1R~Z=C1*$9ZP`by~DzWnSFJN zbA&~NMdZZI@SEXZ;{<097r;1bk?K6jh2*`fpE&M1&Z=g9*W0YHC=dEy_Uz3fKT7L- zlgZ^xrS9jiSce0+k94SAI1W8)wV=GnQ7DE-nU6A$Li=NVXdP%BxP$SmlfN5!mzjHp zshPUKy1?4q*4?yW6FK|%56nYt9J3v>y^pQbyZjUdp?hvR)CbIfo`Vb=#^=yFmug$; zOEC=XZ`Ov~{?Ir}`${yYukEYtD@WaHZ4gQ0D?K$mH9M5ExSMknK7``l%3IXjNO>X4 zP>eIR)D}%oou1kwtw&n(^ycY}G8&n6=y*t@4OammP%k%yuVMNuX#`U#YO_XGN%6s|>Ii~b3{&>705 zyN<82ewCFJdUHO9a`AqP{VjG9XIt0HQ7^|s^vKyG=OvWMRVG*4H!9?+kn48N+d035 zk`jC1O!hO`OJiW{z}Pi0Yhr%Q_G>ns(WE%`A5niqsZP?6@FC#|)SaE~p6+hzYU|Q- zGtM#2ahjTny8oBkmYem=Mb<^uywE%$og$N(N9sOI4kS})xMH9K^?4`xCz-lgxv5RH zl)6RrksUTr!a=uMhW03^k6#$a>zI~*1r1c^ctJd13Vlg{m=S%CVn%|_MhNFg~2PR?=8bf=p6qlvcn3?naZ2j4~ z-LlJb(0aRK=bhfrzLtux;Rdyj{=pV#%zqAX z(7(}KR%_@dpmEw*JV875F`PvOTLm%z2HNIBHFJhQ^S2k)7uHo!-=(!P#ago?7TJ&$ z`m=YSJOYi4YEiFW`&Me&YufifF_xj24aH9*(B0nM>?hS;0NuxgD}t(nrgry7|Brsf zON(MV=V6b+5Uhd*UDHsNT230HFQAU7<~v%aQ2uQhybI+J==TMX6M3QbUVruu^#2>6 z3)B}XXQv})1!~@=M8X=J6{s8%H$|Zaxdyoox(~W zLidsS0ks+T@uTZUS50?K9i`zO=^5!!j8Msds_S@JxQBSix&7!(3RkBve zIuzeQUyY(0nY}PtPmGF)iqM?6g1dsdp0l2Flzo&v)tYMEVFB}4-8j3P<;3w=rif>?C)&lYGrEStMmTJ^Ajsz@t#;VQtC_d z&`GF>7o07%9rH0By-^FA%l?9@*iDXAHT>oH%jEVbH&$)-VD`2sXQdicTcsfipbYxq zF=n&I*qeNcF7__=?vCz`uc#+p#Z|?17De1e$kwXpW{azpbfm z2&Ng%A00oMoS@hC*HjyQV%PKB0^6Xq9L;GyrT)=1Xx?!Y5gZ<)bw)dsx7G>Cu4LCl zl!X?+E<-sEOh-8E7ZA>ssY;{2SBO>yQsUFJg!e8K8?7IK9PNNL~>-i zsCH3na2-j|T2(r3Vgp*?e&qegCRiJ>HbMs(e}wsA^TV{)vldpnSF`)KlvykIZ(sWc z>a9LPU3Xntg@f*no{paIu<)=wP>k0d;U=47aYW9@oRLGJXDuBn_^m^V9z{Ni{0WMQ zOo*6Z#%HQiynvdfMRDJA-*XPnQIa~UiluCWYM;G=e%*n=D2{`kgPwX=?q2SG;d)`t zUQ|w>o)OjKP+Out>XG%4*)!<1c&T8%jTM>sWNghfIh*>u#`#^L`}%U|a;O^=8`3kq zo-0IC(yAXz&I_~Q^ zyX_M&6{8}~zy5Ow&kQ&1Or1cTKuSyX zwLP*x_mg5Ed7(B~Yk3_|8I7`Pwb8xN)EwR8+2eT)UHi>wjLYuJ z=4?v^T4$p^vVi4B^K7(XZ^0=j7OlOotEro+wWlcd7#>Eih+Z0EntD8EBhN-UqnuGW zpxDcA&=~|jMEnr3Gkj%nl!5+^_AWkfKj783abIv(%^QId(i&f}=bPDEa9(CV#-&PHZrKq2J&H3+Y%er$m^zVV+ z16p70NgXWZI}SxrXkF@GTtEgY`zurRqoaQ$G)ZbITs3WRDecSKoiegBzCD~3ubB$r>3e82Q;1XJ}uBJk^4y&MNaxcE1hWayf_H_2Fz(O>_ zern~XxZq52UU6J;tR>gIudT1GJhe@=exZ4UYN#q!T@x>MIP?Ja1R*^WrrGcylW zyRNbOeCnu{vy?OOm>fDc5-V^Sijzj$qNxCp&E)jx-c&4Z7`j8T4_(*&Q0z$gpBfM9 znIU9luLxa>!B~p(P+(Noc`<^}XQy^c_i3yT-ILC$(r^zYR9Vp-;r6+F<_yTfod15+dDXOGJ;*0-0_Ap}Ku=dsGxjXO znOe#VR8H0kR`69HrXVhaUkI;^CSgs&s#7;pfnAMnE|J%tU{9ce;>Y$ItZn~+-=Ozv zA@TP^%)mk1!VR3lCX7IRkUD19cu#r38VhO?kx6_ht1YWJ&wPn(iA{0(sqjO&Et_x| ziYNbzMW}}pob6Ey8e^BhChI0D4t-)(TUfh-8bSj z3UIz+1!!-H{_zRN3CCEd{kcs(jp91(pn0L5dA-k0(0iJVAMq`UW4&#?LL0Vst?ybp zkcXvp*ww++!54uSftK)R`ZKTN1QsH)KKx8HM{;?EdB-{ia!HtEC zcEX^!-eS%}Q7&m(W*Vo-RL)eL;zaUh#z5<8soqph*Sk$N&jW8bXDZjjbZ|VNPdU!p zke#9{-Juxx4JhwSuT63AQ&@`j;I_(K?_cl#5O;ld&CjUstIr84g><|d8R2DoZSe~f zFl*^=Y3c)B^UD74cilG(C7{>05fktol=C_phmh5m)tpbJHQEoT z)2Y{>fpA~!gI;UCK)%3RQ2bu8`^L~d*xukV@gL``ybaib8_4F*=5LCb(3tNy)ECZ& z)*#=8*m@Rsl}<>g+GvrimZQXy(Ot3I`633tzq2ex+ z0+URPFqX5PzVv_T-$ac{jR78cA9?ShAUPN-(8b@yuQ{+{ngfCZg4#Qv^E?%wzKBn4 zpPKy-S8P`lg0d->OZR+d%!2YsNI^Dps5*{1CPu8d>lJcMet@1W{oCcX#MAw>z1n*t~;+&g{_iPHoKZ)-g2y)Y?-ADE6aRc2Nun4KRB+ zl>ZgX44N3hc>j36##}4$1GYnJB)Vr5>(P2?Woor3rreoazNMH2t;;C3TpZs9z71^6 z+^Xg+vz@=4|A_C1Ss&Cj`3Y@M3E9BZ#+#mzuB}5E&u|^bun$LY4SGn6Q?KM>bi_#f zjN{1S%R;u-*QS1ep20iNJ*L>P;*HvGG9B}wUk9QcG~c20dLSV)A@d(hgJP5KqZA6E z1XSn$Q*^~(jK@qYgzn+Lp`T?B*g4&~zS&>?jG|oCgVoLYz3yA(KPmpZ7s`P>fotF+ zH+yB&{@q3`OD#^wSwIEkN0u_=gZ6;p6pFhnz_(CL?}6okWh%5@ax`=_)E`Blc;q1{ z2CcPgU60o&PaS2&5??`Uz`6$%A5oh<(>~MQ+tJ%mi@I}~vuJ(wCPL7C`2#fOsDf71 zi~NSYl(THJY`d+yP0npgOH0fC(Ed;Z=;yD8o=?RseumZ|^xpNlWGCjJ1r+C>3bkVz zqwMhSF!R&NzR4!XaXEF_KZ0Vy`!N%$iSa(lp$H10Eb5^<7UL!gc?+2u6Z#$pu@Cd{ zDV|V(X$+K$^*H^p*{`Ymm{J*~O#W3}Z(XnIRXoH#&S{-NjjNi0n(SOT6;Q15N2pe< z@}b8pSTN8l)wlc7FrJpO>jRFq4wzGZuh6Du2$i8|7ZA5?oteZIz^bx{?1#<#NX zsygOb=ULBL&ROC@aUreUCGG86z{^_P%Y}=%K!$z7(ka zR)3_t#^vY+4TPrprkYyBeZ76XcgdC0_17Ndbx^)r8?;7$%)oja#S=tjL{V9yn)x@g zGiGxF*-^94y9Vd{4ukFqO+wzsAgsbcT*fWv`ai}?D4!+9A7joWXzy=t=Aj$?8~rDs zz58rQ^2g&ojzRx#B053+|62(8LR6EvZQ9iF)JUxbjaPa@_oVj1?WCr3As`V--46iY5 zUrlRGErVLGTdtd2QT5@PL*J+7qiQ{r!8z7YMnH3NEy7=ias_r`7Y;-HT?+ED#-JEi z8z>&p8XA-8|F?(QcI{OwjgG#Kz76aJ%!hw6{xS7>CTC1$q_oP^s8t`9i-W1kKx=IyK9E-S*=T|_N>kiQtg2J)I!mHy$srbplhu96K9dro74Lx zCgE3T+{V(UH$VHUT0(ud`fxo{o1r;iP3DA(vnc;VzbfBDIof-v_dOKvfzY~N_x*M( z#yIpuGt@yzsGU$;h3S^>EqsP)I1A-oHH6|bGw?r5MK64SaGav%g~sHK5R2=aWvzR5 zG}N~@f!gSH(EB@uD!wY_HE9g5uVtCbGOMxPwhg&B7*~5wm0#WiA3=Ziki0Ej@5Pvj z8Tc80LHD7qf8k(ZbM03JR|Ny;!+tgGjro>3`RUNu=_%^k>e@zOEwtXV7k@%AjczD{ z8`c{{iDsDk5QWJ*RUcam)1doUeP%v;KKl~59c~kU*SJm;UyH>aq6RJTlKrA%p}5IT z)*Cc8*IK&P|Mo%Sy!F_EV|WU!>wO62bZES=3mPX*fbway4<{#jkpH-mdKJo}$c~1Y z4b6J2;%$|&#k<9f=QTbn2A#K{@%?n{fyUOlp)5X&PjNQ2H7oHIbZ>8^zFc!~?5=5# zE2URTSH9i|6vo-qvz(4KjuU*|PmO?bRaM714pFI5sqdm6RI5UDJM=|bRhk>5HBh-c zIh9gZscIW5K>2t3pjuqRaRrq*_h$<3L4Du~gzyzH!mUtSUd3O9EVT~i-dAjV8iqq{ zyZ)d0o@2garZ&|VocCM+dcPOnctLHc2ww!5hLz0o(Z|=v%)(reN4tZOtA>NlQK>}erXlUr@l3-$qM z+^qI|KE~lY^u;$&TeTA!OR4SHiGs|J)W0$eGiSJJefIOr&&}BOFnKj+p*~;=G%kKh zzN+#jD?s%#w?XsY)zI(HAs$*|sEy80ymlFsqq!c7FbewY-$!A%k>*Py>igW(mcQe> zLsa)Bv(md{cRn%wul~PYr`izxn|c@kjTb^_O^s8{Ib0;zsD{&b7zwS@xDSoB)Q?ZcA5fov3rTPjC(vBsJ$!~Q zpt)vk=+9lqWYVrRk}4PseXivLx>+Zo zHTMpfhPBv?HJAatmb%D|L<(4GE$B~ZJ~bA7pn3I2C=G`4WJU8jJ@s{h z?%DsIgZ|V=RDOW^k^kXsYNTlVw2gCw2L%QNN>Za-^L^#EDQ2!Qu#=?E%uuG8D{TmE zFnf&igz|(A1`h_ifv{q5bzrp_r+72Hd}6!FuAXJ`AJy+I#ATESl;9MR$tI`zOZF^l zex|ut4RU_f2mA!pS~vua?H@xoMP5r@OJgj8!|E_?Yff8EGTt`Y6ysBzQ}N$jh;~L3 zf&SFl3yMSP_xYe$;slh#CHo~4ODjWN5v`j~fyVv!t@p|1n#JkjbAOxzt1W5|Q|u`Bf{t47@b!bXrsSG4n@ukd@EWx{Bgn8V4MO#$%r{pH<97aWvgq z`YisyY2~&&^~7$ZLVc+E&-zfVN?xQ`QcQoRG2G~h5AVKm-;((kxpKc?w?i&1w-`ytJoR)aqw~AF*{SIFjB1$xWk(MB6LH2 z==oM(sdMx6J|3Y=piH0_RzmOl2J}4Zv(!DD3rmS7Mnn5U?oroO<47-Ge`7H;Mn8yn zC~o#CxXEOY|xxR|6c9?aCAp2v_UV7g}$$zd)>G-s3WMelhmH7&0Pa$ zrqf)P--*E`LwV{wFc%s(={~p*A`RpOAfW~J(Vk`7_n^DJgAKs?Q$692uWHDz)X&iF{8Vg;(Dk$C@ z4z&|akWAj_B76$X0rWHUy$3+|o?f5!25bDNd%Rk(T5vM%;(gYx*CWOfW9}FI49!ne z`>O%8-onsF88^&6`Y?kjZ0bnuWKC}c*5Dt!hW3ysE~opsx3xDX?>w}&x3%Xqp;I=k zHECUF5|mq{xO!n6BZsmhlxH&q%Du_3WSIASoBHqy)HjCea%i5k7*X~p`v4pQVJLek zM=3{rs4dcZf!3Rp+q4o5aMyO%(nb= z0JW34Hd;d+&Y66QOREq57)yOi%|2I+xfHu`;$p@{le@PxV<{(Z%rWQ9{KUC4`tLn> z4#oF|;wC=k+#toSb8xQex6m9#U&S~pRr40LUwRhxT-Jf+s`|4IP&+>l>PK$C8E_K0 zsmY1YgUuY!7PJK$V8i^A~Wq2r-BlT7QA#h~0{tu@w$)<`usQT~X|y3d7Fa>VXI@8>l%x9$SvKxVgR zw-18Wl)@e1WtHTwhCxl2^r1YKOIh?w9$fffu0{=Kk-%8gMx{kr+%2 z#v=vlUn3|+k`szmmPb`oMp?XtY*1`K>yxjc81oI>hMwty)c@~};d^1%~1r(8!UhpP_ByNb8Db{)~%?_J~+kd)A2UB z*1Eo0Pt>~keaC%sFE9*nd`}&wJJj@Ph<~jASR3Lcx$PUFIPD~;&$^1T*0R!xS+E6jqPXVp-zk3m?DeYg!jl=GnV4~;#vzrU=#tXa!UvM1TK&sMJ~6T08^{@b7d zbe|_W63u=1wc~3}3(4)!n&$*Ggw{~>MVhOLaVoZ{`$+34+Ou;HTHn{_r#34dx{tN? zt~Fz|iE1BPp&7KE{58g64b;|Yo%Ip!<21D1s&#g)vlKz5Ez{(iYi#uZsnGpi9bZD< zzc<=KG1x>~BCD`V*e&{w?I8PlmEZ7~T)}Cm57ocW_*2v$seRX&$ev`h|Lk>j4|WEoa{l+SG*(MtnvQACps6}Ti+jjq33)gX5eS2 zy;y>2P#!@I=vh^MK^y2ZS8V?)6o#IEtw%irsSM^B9!!qpQK%o955*tmBQJSaKf}dW zYs`l7=aeTj5p|%vKaFS2`=OSa@;dZ$^js}tk4IMg8T!+#IZS3h!ghqyKaYcA?4bgL@ zc*|tyzE+&(cU(mnd8&1xbquY2DBo9YXJ2SdU3nm9Y-c!KWR9&9w4SFNAjM+z9^XS} z=zA&`#cH=wG3{-#NV}Ntr+ZM(sK)k}aTLEmc_4bWu95#a0!5*C=V(-izOJwjLThug zp}d;@=mw2(n?YmO;?Vtf1o~_>UQzqH2?Nmx%73p4&D%7moP{G$+xj8KVmCCWQVpkf zq3_=jU7`IlA0QvJX0!+YLtlJ>PoX_d-{BWLLIq0&%V22yt@SI7kw_)9yn@=jzp)fQ zKx22^3yY!kjr`X9CQcT^UVmMu4&?vkaO7~D!EpBNYp=vgM3AW25~DETTtj~zHJ**5jsc)f%+!p@*S| zW^AQ7s^-|epnEeb+|YbLV{fg=|ASndw>1>EP@D4|HJ`f&_0_E~0V|;X{uDHxi3ihN zv$vz9tt2M_d|+#ZZ!sQvPFF(jcLUT$YFah%3>Eud?mHhKYcuc;k-j8v%q%z*k!NrT35rO_Iy>v{~y$U(l^TgZhp^6vIQ zxq0eu4|D!WN2HTmseB{l-Rvb6-5N>c`Dk2G4KLWgq!_Wr9h&oM45IyjifL1x9S_H@78*A4U^8wb8@Ysy zp?+0ku{!oTW*nE38f$uH3NyFaf{$GvyDp@Sy^Ep^aE-QluP@mEo4N(}0u0&H) zxtpt-c@ED}OJWwP=XVG+=GA9a9Lb!CsQp74t0_kE9yGVm zI8F0%{rs2E_tV(wIR3y-PiN*YKs|A zzZPZ-GtaNal>3l^x9o43oJd`#e&_*>zdt}e#M|P{TH$Q!)ayN~Kh+++vMByWMO#HO zsq2u{^@ZuPX0S*0S7;2X_vIk*EEhCS)V-iwvy#XS<(}SQ-l={}eVv}K?9g2QFHDDW zhB`oPau*E4A{<5v)Mu)_(KY-T>Kpa*)n`sb7ii3@=U3x`3pj!UIE16n=c8ZMFRRU; z0R2q0-Pw@L9`xJLSWow)_LXUTsC%L-HbHaQcG!hH?6XqedkEpgBtC*-C3>#bV#^!9 zQrGDhsQpm;uC-LnmHI%xsz26qxE@FF0=cO<_ZcSPFw~$lz-auAt9Xfc+{B;w4n=U> zd7RVux;qu5SP9*uk+?<9ukKNe{nuhM_TvfEr>f813@>UsYn%NU>R)DHAU=fpmJ{UP zs?BHuJ!6^^pTeJ51=U#5+;y0kwbnS?ag$I_^5AKy#>d z_I1qoO54{E=O~50snw`wLHE4I?Wb`T8bj#M8bUFKU!nPm+HyThn&;}@E`|QTu6I4C z|5vPDdrmbz(DPLjdX~mQ{ei}riO@CIU{`IzBPgF-eSJ^Vf%4K5sRMQqYQuiUaHtPz z0QHFl5Q7M4-dPZuyC{yg6&jQ1`(1)!KpF$;nbKHzA`}x{jd>V~CeU-8Y)dx#K-O_C z>r5z~ruL*gl*9E7^sK$)Py;;+bD;TuUFbcloqY=*L;c_t=s8zxPS3EeLvCUwL!s+V zsTNZ&xhZp&_UMFWcpLgU<~ZgU0mbDsubhg{pms)IJ{AVl9w-)^ABtyu0>wL-(ofrCZS6Lj7H}{loDkO2N+@<6r2WpNw8mOhx^=#-$od zKeIhE?ca3vwP=j0TyY3Qt9BRMpgT}Mb z)TFD322d=xJzC;@=)Sy84wA;zrLd2)IGf`sXK^a;u^zOht2s^~D6dFss@X%?LlcmO z?w0N*HmCSwM`*ooJv2t1hhEUU=YZt^Cj@_D(Hy)8##4{sN#KdeVZF~P?ieWkofFxh z7`fJ;r{Nq51`3*W53TbmH+Lc)p&qr*6wAMd{FeNdM(BwFP~1UdyT(v#pb%WpJYQ=Y zT6@$w=|?DrEYLcdV!Rrk>c90`wRWSQ^BEK`=!!x35!$b;T${pNfi6(|QqOu-);k73 zeS+q9Y9k6j{iOO%%`=NYd1AT`)EBMBWPA^OZn}TI!4T-4(w}#O+A=+xev;KrLGuoc zbJbpChhiOvu?UK7D9%v=TBB4v`Wg;l8&@Bh|IjdmX}>vif0tK5EzX`Hq3+SeNkl4aLp&V<`rpHbT}A zv$}(3KBxYp2FgR@CbfC}u@*0&@xv@A-uEFRrWGK4$F4c1+P`J^4eHC)#=MLB#B>$Q z%?Z68wYwVYYVM@xqYE^?&~y5dSiAbI?O2c1SPRA96`S1*-Cv47O@Xeto~gWe!Z`@~ z+P#qq@Eatk#EiyQ68Fd3aTRyG6R`rEqxEQ z5|lIXEtH>97&a)M_ZF_>Chp-0UP0@!KIlsi7isXE4wY#3(CF_xz+LFyU%_b{d*e*z z8T0*;GLtf61F_~j%&*DapM}l%2g-}w04@pEKt(aYrKN?6I;pc z&wLGAw$YHD{zMkvF?X2Up7VqS2bSzlGVt+mT4(478x=5urX zHF;BBQ%g*RuH$*!!!4Y_1}F!rE_DAWpY?lGLK3-4%C}d3R!7uDS>%NBu}J&&J-`X9 z!C)wlAjO;FU5~aX7UxujYAS}M#zsiU!2Jw zU*=oJ4u;9*=Z>Tv-ZZSmF}#NUuKvwX=rtU}eI!87nDWUFVKMrkI<#1Kn*8bo=#3AM z2MOdPD$hgLWGebWxw9?N4dd_^Qt_ehLtfc3pBMW1^Pu-lI;TG?g;$kdCVG#0zV&); zL3u;JVm>B9pTFMs6s&+=Ydnf@u1g#IfIpzUs4t*4L+0F_6U0790W5}KPUS>D{Y&BzOGk1lVtW6zP^Up3@|^6r&W zcpUq&4@YqoNzgs7e8OS)6S@bAa#mMcOoeKD9KvyEuh3ddMn}921XPCEr)VKmDAJy&7KS0kGc*=kcfi*f+lyOFS&inG1PTm1^ue$^DF4RrjiS~6JyW_ zC7^t4?RAWX?uW9d3*~|9KGFV)argm0V%{6dxf_q~&=$3j8)+PjcMW^72^+BsH{kNQ zIJKfCRkOZlr`;yAKSI|*`IMue9M98u2~VbnPq1iaJ#@h&=$_C$kRy;I@EO!LDR)Z! zklL=xP=4WVEJA<03v~wi{FTe6&s;eml~5JRxzxS10#~8^3fhOIe)dPG4u*1yw&OP} z#Sc)MsvIV@pW4@;91-<@1)!V}^{)q@oWb6B2g-5L`&$a#E1l2=U7=@UB`!lbpUM~O z4E2l3pH+YQHIzpifs_7|=J`>(8}J28yD^LU?#d(9wQGu2=n35~`hU81Y9B{K*Q`AB zFdu!BU)+=Pb>BykH~S2fd*ea`azOh$>YzO);CCpOOnJ<;phl> zJf0}1O&pDPVZkNeCEpILhx()6py&8HlpCDgpWR;xpFqz`e++`Yhx!oRpZfg}=o#$+ zwG*G?L)3zPR!!)8=>L6>nb?3MP+O?BU%7LdZ)vVo8Wo`Xu^jYgxuE+$m3_dEq4#?R z`X1_Qls~Nd-jhNhU&AIVLsG{ z|Ae_v9^%qBl+!p5Q}7*HqXzQ9o8dL*%xhe53YU?H0-Qi>B@Klci`PbD zw19FMHD)S>NNCKZzq=U9FH@eG?o&O>webnsL;r6P)NaHfXCS8;cPk%u6y`wfk;ZC& zV;8g^WgQk`64d5>iCWMYIszGt`{VInUut9CkPq*nJ;q`M_CPtj+TZdI7DM^(Z{aLC z=fk1<>!JUl*`GF^y}lY>sQuFOpyx&7BDHVI7v2TkZ@OPK-qBb=?Vs-9zp&^{F2BZ) zb&wYtTU^I(=s8upH5Mb@n968Ped0l=?^8dopRH%?1=MG>#4xCBm<#=?JmOB!XI%{? z@D?;C(|f9c=1_j_|F9Ex;0m}*Ui!!6Ik$!8Bl?V`7xejbLPzMo$Gpi~JrFn$NI(H{ z48i~?|6TL-Wa>=n zv(vwGU^DdvS|JQ-e}6(hXuPQV_8ZK>K4{#hc30!l9vF`wF%KGhjDyAknis!=JkXdx z|4w7ro4Acf&=|-IwKp15t8K3Z{acNPG-lEF`|loC+p-Mm3zy<&=-$^ja}c^gdvkQ3 z>)zMT)|g#=hx#JTQ#97n>(=+uSg25-kh#xw&%^{{OiW`PwK(q~j5%gel*U_d<3aF& zxt247GtGXAkJwA6d3rg#i!Y$(K=+8QcLe#I)zKb9F%`2g6H_o6`g2j-b3T5>StKCZ z5^X7ls;K!!WlLo<*H(UAI(hncaR^$Uo`!Fr9PdiV0_B&U#DC9`UUPmZhg|oW?wLc- zv!Hx-edT4}r=A1dll?FXdLBkY_q5_VC7^p=F(0+1YPa`g`l5T5sLX# zKrZO#ABWm}wb5l@g~pZFq1ncMf~Oc#A${X4w}U4zq5+mV+TgRWH$sNGTg zu`kqK=x6Bp(AYJBS_XTeK4>CFL-QBi5C64?*{I^y0O~W;#yNvd^DHe1E}^Q`3sVDM z*XkJbRfc`-A3^cqI>-mbZIx@^4`qouRk3P@ zJfWL72*pKp-;G5NG=g%E71LE4rPsUw%AM-~wIgaDheGZB1?WEi2xIUUZX*Re`k`bf zF0>xKQ5ff`X)_$fp?wrHpnVc~-_)DXym${(gGOzO=0<~|wncqh2Xw_isD1biiVcPb z!p(f>zcz6idl+Uy@wI_y1GS$8;m`D&Jzgg`V@-SbG>6sCTZ4_zpXvYIhvrur1L?l_ z9?PKqL-%4q_G+ka(sQDi)B(gHUnrmXEXPs1;=j*CF)yvL)PQnGwC3^^x}qDtMqeoI ztUN%)Xcf2RpP6+t#l-GGacJdoD+V27k1=_f%Kz;E{rWzNKmpV%P<&WXR;#t(mw13DK=W`IcZp!Pth5OL6tzU0LKSO!vyP+7oVxWq&5 zhPwXBXVbdq80Z=u#0w|~x;8pv6qGxloCB?$E1%#KC~xOAbyN>vA%>t6nnCNay0>&+ z>A#!fQz)OX6tX}$=GUOS!)@3Ot*u;y@(zUp0hj*0@>AwwGyZ~pU5Y7Cj+$~;l*iH?dQbnu7AUtN z$`R$L3*}cR&)^BNlUMr=8lg2>;!|k7IzK!}CHL_q^!Fd)4pc+%40c1g9Lj0`4q8{P ziIT_#bYZJ2D+Bq5Klj@0AbL6S_a5q4lY)_yJv^`$}zx?zh8OhLPxm&!Dyc51<^K zuJ{2v5C^qAx`$>%uSfURUg+NZ2IX;&{7bE)Yc1_HdwA4Fj7A4E!RK07 zPK6Sil&4S#dWMvHq;^K%NB59ki|!}oCESJXKjkvF#R%vg{|#!#&fyLoL!WIDQjrYh zs;G^-ilb0omvRG?U!nU6RZc8Cpy1hYn~2XV`kw934c(#FrPo^p%4{*&};IwzB0M^Y?x~-~0LfUBBz^bzPqQJoo+C^FGd*I$!Gf8V0TdcWuZ& zasCN?m+8iO()A&hJC=X0o$CVQ$M^aj>Dce_BcdXsB0FIV80L*k%ind%ij;5=@hDs$ zH3%(H0XdNfk0Tz3t}A)xKi5gfp7?7(^~h3ni$pf9?j6FQ>{24D;pU=t4G3LfF* z$d_4-pFZ+cxYn}-{Qb&!8@2ErnxF+dK6&5g-$H(Pjz_uH@FZAfrGn+hM7Z|Q^<0%< zdixmDVcGI(#H*oeNG^_8%wK=J9+8f}YvwVyZmc5m;w9|kn%kpM2g%?X@bNHx6ocic z`Q{IpH@=1IW-N~^-z}?8U<0PXddzaX3#{L5BMih3ux+ylKf_xe56364O<~wuBCC^#3YP@Ye(H5_8}UgHfq5&FRsJs2iNxf4$B|+YPc5TZ8Sh5 z)Q4-MDxo6YLS1|akK46W*2%V;3c~uvb*`3mhKqUMyi*e`(Fvczy4UzIk2OalSQb=A zIlK<*<-{;w--hLp<F%GU59|E8EyDfVxBP`F>z;dA} ziXbU&@pnh9!*^jbtY>#%H%{ROY!@bslQ7g)v_5yumus@De~QA#wkNGK*nSae7o6tr z2<(AvR@($y;cpmbuEnsOX?xhu+BUGRwv4u}o&?KU%Q5edhR1C=V>#w~Ez@1!RteTu z9*bo{1z11Y9<{Et9-4=ZuzWs%-{HDs+Yqf`o7i*x7A5fyYeT2OIqiHfL;Mr#pU_^Q ztL($S1N(FK+ms3x$vtu1on7%P<`6VE;1>{$=gT4opTjyn}3b#y`g; z?9(lTeOmi0?)7y|$0GRJVc3thUzZzI(Hvdjn1y|sUg(4dD20r$FYefh<92@k7&vCo z9(7R$jvF}E^6cre&{~m8TvOm2oR{~$>qq>Th--V~MkTaBUrd9?cLFzHzgmu~`MZt> zY{Cl6hwG1K!ZDp?*a+Wa7+l2zI4+qChL2+=B~cmngI%-M5RK3bEztpngZ*W%gE0g4 z^;ZV$>n(xL{e;GHcl!qjdhyzVbCV zCgGTqeR1FKx%~kgmLVcjbkr<&M}{#F$%r#2|A$*9P@C@aXuXT@OSX|DcFDDo!d~nTIJs59}PdL^w9~)tR z&hfLGu#-=*8@f(HLe|Q<1|}{X!>|u{9>?KlcEYg}$KCeAv6MSV#NQWl&20nNhns|r zIE24(87Hv~)A2bfAvMgif57!^voRIsUrmC??YLoYIF4eTHZ083yWtp(;a3=O;Mn&X zOoQVqj@vt@Yh1U2b10Qj7#ZN$+f}ZCy%%dR3yzbGf^$KRm-R&tIET;zwGbX}b*$BO zA&&DpkL3J_He&`HL+SwMPCRbMiXB7pyjH+97$y8Wd$@?wtPdOo z*So#JKKw7S0midqe5LU&8p3fL*D^V-lM9XwM8LsG)0MYTv7$oHJD%&ffn$b#&ULO` z(HBE73S;mCEZ6&^3!1>Rk{_lQ$C4adyMfEN0&gz{PP0ew2pp$e2gmtb7v|Wdd7&D- zUV!T`x4`jK%UQ><&EJ;K?u#=2TP~ZQo$q;q1pF;v-(y*BIpr9*a~I}+=O3JBF@HOU zR0J_kVnXwSBbh5`59b$OhjUY|k#in50U}@=Q+#k$!H1-#M~|cN49*uPM@HmCeiVl3 zp*URY;5@V6XJKA3b52-5SoznvavhInZA*79Znn6hJ08cjG*Z^EbX`9(Q~*C)bj;Tv&x@6nR!8 zG{51PzjgR%^hYxkgmJtDj;q#2W|#-fZ;r1!j_Ul3@$I<`hWX4q=zYg*f5dbwgyqe4 zIPUA5r04wrW}c|0QK5XD_G#MC+LKI--CAB5F3t@+dh#eVmwb+Oo(JH$JC;8Wu1)cG zJEJa&z%+D+YmZx=EQj%B+Ayx)K{*tM>7)vL-g)4~IFA%uOWW}4iiz;pT~oRTzhh%C zZtXc*PS%0H>wJ{y`Z`X--`|7XaIM2Nn9hx(vS^C#aE@ycJg`;F2Hkj z?#}so%XZJzc=q$o5p;y*dMj8@e1y-@58uJLL&MW_YIvH~Y&f_s%5n# zU>$+H>-l%sZCVzJDf+)4a_4 z86NBK0J*rXo%4&%uXhPJkKF{$saxkfXHL^mFIK0pG(@gKKvo`H-gyn%Y zz~>IZxkbws5M`^oaz{O7+Ete1B_%zPosW9Qzi z1ALF=q2>Db@Va(2;de&i+~aehx^funI8EQKEi-Lr4-{rSQY{!J3*fO?XLW+#c?qdl zA6XLCJ;saiUlG}0ePA1Q5^QS}h3$)5tQ$TF^MGZqZG(HT{b73k43<3}zj0g#;d0Wx z*T1k`?fQkU1Z2-%$e6S2QTuk3pQ5u$OsbLyE1@njXSPxh} zSHqil9p+{4`<(gPvemR`y&kT+moWG0+^KQn+^J=_b*^=vb*|wbu5)cG8K<_7+MpWV zKn|oqVkE@Nuq~Dzd0_ch8(Q!J8}tv(C^wF^gPPLbZEI{ zezm;yoLq0>You~F!LU0XS8u)qh zU}V6wVEZT$lEe3e(?$8GdD!u40yiC5uzB$`E(=+B?Jo+LKx zdql(6Y*(1~9E0#ZNuDJMT_dqH{j;WU9l=!Wz!k)M9xt>Oq{QeAk?5(Q=`*3OC zn9l(?J~R;RPy?QyV=A_3Y~xthypPVX?fV0!1RSFngiqjm$|5Hc!SJ!qWc_bDU>Rm3 zoS#Rs=Gy&48Vko;j025^bO@&Mp~}!#-nX81Ak)stUuj1A1Z<9KYL+)9`rWvo_1$&4Ijd zoX7hfQ*xLFV#Bz0Y|!&@EsOqv-{E>g-Z7f+Cc z^;uqTssdVK09>>2JKS@ZfWHl!9qw%^g%WW5HVYEsKG&f53%jurvtYk}AbPcf$Dn0QL=@^3ODBT{sZt`=)4sCg_N-;p+zxmoY`l8S|KV z%XMnTk8zg_DFddhgfL!}05AVPd_D@MjfjBh)imj2UrPkjZgv!c=hFmVz_GR2SdTq$ zyzdrb;8=_MdlSI@c8>Fb?B7Qtc)tpYA_E*>biC$IIEJ_t+u<6p zzwiM5Mn>d=>;4=o^7}Kx{eF)59K$Beg=5ft@hRG%DNM`NQ5LTu9SjG<_9%XV<)3-0 z4?corX)RQSWoywFm@mz{mUE8BSBL9M>!KlC57r)Ez%teHaRD~L^=_^a`!jIx*}+g* zz5dzy&>X=GRwhn_#}Y1MT@$+t*I^oX3twRc%zuWD`%~R_=or~#xb{ZV;JTUb;CPzr zXv{N%;B$_xO~F!Zg==)os}3TkV&A%RGhU~`dA$zkiSIB43$PlS;5wr}up4`^A71~# z``#YHNnFMwxW=F;oCkECayp#D`V)WQ91gGgd4A4= zy7&Gow1ev@8lwe#>|XR<7!2QMSPjCL@O{M*AFf5Te6yS?4#!7NF>Y?0nug7T&G8N# zvo8kcV@$uf;2K=hLL?Zn3zh5VnKL;K*H)U&euMSIHh63KvfVo0qK*tP33bErr@}JzsZt?I-tF@5cjp z?IEw3&=t-t{|eW%8NWH;x-{pfTc9(X-|h$Jx<}wgOu%@Ih5N>xJMMuFXbk6^%c2-u z>*W2~aGu$8H5WVKx7Ru!@qcf_*_TGwQA{Ly7yWJxseA2;Jkei zl!J5WUN^(@`U3qi7|ywR8x9la-OD3C(jqRL_rHp>IF4iR)?@K`*UT9wnc#1Rf6x5e z8vbS*_}K7vt)Y3`&#r~*5uLAf-?Z(4@8KAJVI&1Z&Y}9{U*>(h@0?RM*p_Gw+Wr|6A8MFJK)a@Ba?lI%}{D ze%AKSYHWdRAnU{b;Bi`)<%V++d5{&(d00nAKab{&{(XKGmjdDWHS4x?col}jnOVhL3G1+hx`hUMFG(Ec?CQ z<}cU**K4{Kb1|H=Gwf|w*`{+|$GY8f%?^(<3p{_zu^MpwuI;nY!S%dWbDf1P@O!;= zP3S!Qh~99{$Ip4*hKF%ycv+S>r)c~w4z72xgt_FkFpf^cbM>EL*v_%NV0o(^FkEdDF2Gitgk_pxYF%qP(zOLuQ46+fcHQvM`^xw$(Dkbq=bDN+<^3n;g$#Jqukcz;zFX zt7{+3BU51;z*tWBsVHz|{ z3>(v5Z}f!WXF42@@LaO^e>#}*Uk80b@wp=9alg@%;3h%-3A;%Bw zt0#ox^^PZbU5#sSY+@grdvHE#O~7$fpL4#&_c$Nne5?PQdvzSbu?O!vHs#pYQEbLf zaQvu0zQE_`1;;Lz;S648PoZOIu1%N@`w9$KJ+<#>8`W`P+nBZ?Pl4frXZHQ<^S_TS zaG#CkpY7yBFfJ^IZsQKjM^|tbwnL03@0$-TgDk5u!L(l<=2zE*duv`O0P~yq%s4lX zS!PaxdCYlM(~J4bG~@kVu+L?msu>)Y@VIX=2kW`?hy7ps=YO*H!hU^s)JHKmrfAq2 z7>;ur=8j_JKh9nP1ghI5bMIfDI+3;%|#*n*un z49D@^tCbh;!8mjN(6QdXV45+mo$I{=$59W$F)qgjCt?`-p&J|*b`DZq(KFZwK7zf8 z&J9k1-yfdGTFdyoX>LEx!ZB6nv`o8(O92#yV`7edI))pCyIkMJaZZo(XZXF2zxjL4 zU$`E?`8>xd9cRvh3`hgV^P}*Xe^+5RY{mkN$8b27IS_;KJtkllmg84APkaT@@Vor( z0w{}j&=_se8HU4Ga4gm^>WDUIggS5>(S7sAo5z_Ji4YIQO++98bLlT52|NeqT~fig zPKRu8eA0PI$39I9b>Xo%-{7s`;u;CV#`k51EorLaOlt9nf?SV;5cp7 zfOA)M&>S7n3qvplhLdBcj<3$ZOgN^y5Ua5b$8ZC&p2P|rw{!g-mvf1Z?^_NTw+~>x zNRJ%I1#f-qxM(cgWPh;l-GQYD&l#EyEQcJIHEmiBIi78~_g}F0xfbK@-7poKaSjh* zKFy3gCrBM=ZAUD#(IfL-Hpk>)6%)@wmi~ewo*YP{&5*;HM4#)o|!ZL6+=EKif zE`;Z&e9!+z6aP1!ID;`(-?Iuk;To*Ja09O2&>j2(#{wN+^nFX=c%*X;j@J~0dCRap zfvqrH4EN!%{5I^23(JD9VZJhdEy5O<|DEHrtgp8=3Jv>jxl4(M)dL_aC9eZ>x z$9bIx%ssls=lH(zcT{ebet4+`lj+dAwa=|on zk8y45;sqFt7AOwK=`GhR<5s~rQrB^~2EcihX|OD{EZha>G0(yJ*ZSI9*K=6rZ-?cb zBBjV-S9ijCH(sOdG^jpk=6Fl}2NSdV9bzwP>qDzHrUH=Dq)4D<2(@R(}C_ZqI{;PLo5kMUzTUpoz! z>81zc+qEpO!0_kY6 z@U7$A&P!#1^BA^a9ha^H$K0EuIoiN>qvO1eh1&lZ2m2@XEsn!>t$lF&l=e>@cebrs z2KHg?t0%*K_U77OnTc+w4#&hj#(#sg)Q*jv#T7hwVV$(|EY1PEjTZPE-@q|E+rIWO zr@+3^cd*^t0rgM@uI07Q;vCEwIOe|*OW=C#>2N&Qb!Ves`7jg%&>MzxN0{d=V;jJ7 z*LbiDu7i58-1YTV_y}F$=Z9kg9G_l?9dHcrBs?BDUTyrXhW)7V@EH93=jenFVZ8er z{+7RK*&~m^9JL+K_HYdKTGc@WD=f5Z7Znz-N;#i2+3`m2F$OPvt9e44Xk9r+NQ9jt0;@EzB zbi>zhT-SJU?B8+TkKkBv8RSAr_|M=HXybhsOb3p^X%jp?=S2_0HS?ygTX5e? z)JsvJ@5{#Ze+$BEN;_WUShVBL#(j9tjMudFm^}{XU*AMYRD_>#tlIPNn4P@u8d{?#9CvqYd_Dfa5jcNy30L5_y7MvaS2}=Su^8jv7V`rVHAhs`OYKxTxvKU(em=9q|^t z2188jm{9s~j?TH4=5Q{-Ffv@Dz)}R4zSx!dznlw+#yz-q>o8~R}w+`H`Wc`V-g`ylh2 z7Ur|`hy|}wcRbod;lG@1rvE!n9{ z_F^ZT*EWuv`!${p!t&)LPQ&{L;Cqcz&6J}x@tZ$q{Z3TbBGSBqw+=6RsBH`Sd_1Y`Q z2J0{1>t~$LHZ7ZmJtxE2aH$8&_!-!Wvv>&OC^mt)~76EBB8XI+^QnUM~z@kj=*uVb3@*nO|hrAJnHzV4wehbjTX!L(NqrBDp7 zAs77q6!5$J=R}ZUW!?23Oh@BYViL4;I4pG3L*yFx|QqViJ7L zwGF204cLzTaE*;^v5UBhYY4Z~yp`<|_oaKi5z~a{?Kv{+6Z#vLQE{R|f6p%y>m)p8 zzC_t>VhE!Q6(!QbnXAM_Qx z7KGsuiOXEG;Sa2VZ6(V(+a}>}{mpQ%1!J4P77Y7|*ol9TlItiHLql}IPM$=yrbY(5iXy0tM)({fu^dP72w9@CL{&mt^u>=@fHl~N z4OorEn2MqJ06`!l>q>ajrf+&uXcmqD? zYZSv#H~9Nwd$9=L;S0mF`V=l}$J<$=3@h;4Jm0;LbM{Stq zK7jB00=;0q?2iF3?|Hu;e9idtdrb#}VA`32#n=eb!5RDm)0lCS0LkDnr$8c@UTwho zo*VG^{jA^dGfeyDfzj|>et?gE!aD57HTXT5Q5yB}F$Q5WmSQu0$DY8p$Ze4u@iS&& z0*0Y4zCt&2M^6lZVLug%u>pVJ2u{IxK7qq9u6}`O>?cgZXnYU9V+6*)=Y4%8wqig0 zF4Mgn zHixdoWIjELa{=SavcSCS=YGK|7!Q^^|9_T5{C_M%&Vuj-}@}`vrwAxyS{~G%y>+P zzhxY6fobC;F5@;V2b_qA&A`aB$Y+s{@gHvDB1{j5up7T&Cw9R!YTwrwh;Kq45(cIqETJ&wAE8@Pa@ z_#Nvp3*Vy)8leoV&mv%4nsz+4c`!W=K|h$@yTbCVH%zmZf2LLQifP02V;yEWBh#1Z z&T`FjwtTgHVR>%(u?W@&*43{e38LdhhuXTf4-X^UKKvu@AE7p)?L^zbwiEw`ZJ=;F zF+G2)GB0cg*fuad`Q4TiwnM7H*NjW!)bCh~zOZfOIOu(@x##t&Z2ymg{edoMi-xEL z$1Y0;*T1s=Rv1N40*+x+MP0POC+H2wAEsj|Hp2F!eUd+M5+`8)_!y4B=jG#5aO~p} zuEJ}b$@`9R_`09n{{lbfnDIR%;BTPjKxNoxu>H9mcab?FbEtmr9??BwI<~CE2!8H5PT>!%#0(5acYKKYsDjcc z5zN7qY_Ee;2Vs`0ysYH zxaJ|8fam2oUc@zc-kzUfa2I#rxj9yK6P~}}a1w{H7rU_s`{8)@Uob5ET%6c(Vkbpb z6v11lj}P!My1_B7zJdPC3-y7w{ordo@FhM)JG6k`Q3K`S_Zpws;qPP)_DkgAI;PIW zIA2r_Rq#%rCVM8{hR5S;&fEBY$KMje<9-s1+dXA`I38ns8BrLu&=CVM6^_R^KDQf= zv+To8Y{Cl6#gFiuI-zl}H>D)k!}GY)!?D8zh=d(O@25l-6olv50G%-alduF^;JD^t znAZJW$26zG_c@2)d3$c2m+93wG>-m+>A+j#(==clo35Y3WAQi=!Ot3x-hXjy(>!C^ zFx_0hahN7dV_UEp+i(D;HPe)NE+@=~@56KIg>PX#9gB(Z94FuhjDX{^!!Q&>;C1z#Lvy@_(J=IeVb=xS&>y2Q4~E@2Jb`;2^TM+8 zz2F+jp0CIEd7vZLMz>6D0Lx;3w@gm|u)m2LxPtRI1>e)I$}#f%IUzOz3YCxR1s)Nv+`Z z09+5_x*ym1xZcQhbM8BD1=set&dBQvxK6|MhD+f(je~G)*A2Mu!hdcoas7vbf!>d1 z&xWtNKf$#`uGMpo^Ve|gkZTmZ&OkcEgV#H_g)4A<@hP~r&~<4(z6jUw-bD;p;`7vo zdj$Nv>q=9=wQHH+nql&0nIaJ2ma6PKGmEdcxWy=fKGP_2SZdd3UJ08=2@HbsM z>$*v~cKA9x9&bHv-|Jwx$B_~42X|d;Q@HlZwOotgUd!_^d|U_Tx~04*4%dgdXSp;= zqA>CxD^kJrbM6g~c^32RE(~ASgnH{93fDP3hVOBWnd|CY*XFu9_j~)j72ukkY60)N z55wQ}_xvq?$M13-&lb#u>(ERet~+yWWevOq!_@Hfxews_FynY6T-)P%K-aUm2FUfQ zUJJoA=GrjVtyM*NxIWl;coU^j0j3eJo8Wpg*Pe}lYvf$(xd*P#GaRh63?KK&nyx)Z z*A2PmF1&uQb+EtRwS+BU9%u*G6ZXU~OvQ5i2KSA*kM9wf=7|*nZ+#rz!@i!q@~-vk z4u8wNy7BSiI^F54=lcP!yE7jdF5@u=u7`7vuHkGPx<<{tOn!%ZoXk%?=Nd%woa?Df zN3MZ&E$pi>{kvAzb+;?wTKVDV2iNR>2G@GZ$GtHSu1B5$KeHXKOEz7*);H<1q@in_ zn1+oDf6MiKt}(V;FrL*C#-p#99*jrhFF$g?yzMnX%ukP=J__X%ujO$W7vQbG8D3{> zel{;BL29^nz;&qR<-%}(f$74$>u;JiEUVhVvdXoFpTh8IkGAl2*IBzh(){RmcwVk& z&44s8&s%Po|MS6f@HhONYbQ;6hP!Jf-D7R(e-IVFcz+@n~oVUO}S=m z3`XEv41(9$@UgGWh3nbEdmLS#%5Yw29cv!etQLpYR;U&1J$#S-hPD&jk5~!?kP&|7 z`t$3dHF1mCKk1su4^a{3Ytxo%BF#6h`E*~nx28YO$uwxWune>O z%P2o@x#fCRzteT9#+T)=^@aK0w6_VCf9?TT2iFd}-_heXK9A!pJVrlv3GRzD{;V{u z^F8luaNVZmzH4c{#Vg2AbPt(IixOUib%(b27H|v93a1FWj zVtB95LjE?L*WWR1%z=;B!2JT2T`c_y8t46#O5o&|S=YRVIwnOj0*RSImydRCo zmm))LT-)UD!nWx!xGu=PmVGb#tM(%^z-uVT{%{&3gsrb z@F{GcJ09VE`!K#{JANYO!2Zn&tb^@zzt1-NJWRm1u)Y5g>_5~(W!MiY3CBSyqB?AI zw}QWCf55fNj-8By-(?@dHowo=?r(>B!QTN(!+KrY*7kpvU^qIUI`ShiqMt{H)&d`3 zpZs=gz&d!l4ekRti(9bao)&pg8a2@rwySMlhuhdbR~wa32&RdbVdZH$3Gb`54WV=J zxrd016&cz$Ynfdc&0%|f6g&s}bGML`^{a*9c#eIhp|DS7Kgf8uU+tKa{Z9Mfj!QWn zW&fS2gV6ffOkBGmA4Gz+3<36Sz z*9RNl_Qz&o8eB6wDd1zDpBtF<(yY+2+rKkjzsDdLpPt(XaE+zuq!R2~6@cSf_OCL+ zK9;xXVSm+rTM8tBgW`5N{)74FB1hPLzOY zt_d6y_!!~--G{-otxR{8J-OlMp7YPW+@>?Xdoz~8HS+G87!_PQ!ae)eMb=5K<(GAl zYwB$$jD~HInOFq#$QJCzpE!f_xPVJ=pTt$z7B=rZfaemQYc!=qHkiiWL`B$EsR8q5 zHP}D(JlvyWUiJLVN2y`HHJ_NDyyk}M`29`8>?mCCzY`wcTDW&(8GeTC9*^I0+i>tX zEyO(7*0OD8*m%yi#jKmH_pIltz`ob(upY48WLrVj$=01oV7tM#g?odnW8K$cJv9qM zU^~=(G4?TSZ`zi%U2VO?X+3=mD`fkO?x*xRaJHF?!9GzF*rx3T`(9HqAGS;EOWPN> zed6=>E9`e!cb10zPrv^Zeu3?(p>Qw#C$Md1zn~XJ!hN;B!uQ+XwS5(C3wu1}U_BY$ zU*zxD5464Q_`o-?eeAJ#T(*_%?l5-G_>3DfB)MD^L0NH?jJcG;`ccI;phH@?HJonwyB1oGu}ZyB*YE&4j;f;%)1$N^yqMk;D_OMptZ|b&(eZ;A7AN3A|+u$D8-|#ry_qhSnVLRS-eGc5^ zngd(lZ?%Mb_S1r9&J(Z4d=HP1kiT=E9hK1@9;5p(&%nXTOel#uXp9fgI^Z5lf6sn} zdr03vZups$co~s!g3EI=TzozY-2Yh$p6h#Pj&?9l*gx(M!_~Yo2ICOECawLH@O{Ha z#={(#k8Im6!E!8xk9}1R|NEPq?rnB2>UewuuMyG=Z^N+6 z0k3;-munWEzy{33P<(<0D2Z2*3=APW`WJuU5O!fbmSX{a!rXw5S70M{!uOxUb=*ZX z{1=1!@cEP2jg^>+Z_pVHQ4{6xCQ6_z-a>7(#K-7~?=S_6u?7C_-|#nGaO-(wKyDO4 z36w!8yaAt2g(r`m@Rv2tKH7xI=z|a7ag;_uYi*)wnW_ z#$YIV!0_#Ww&;ki7y#e15ZiGY{~`Y4_@QeF=X#v$aefp;0c1r|m>EqQJ1`sl;Q5zA zIvCk!upK{R5{6>{zCss#7Vy5hqFbPQO!t_cfj%*PV*0|{9`JpB_G5I$r}z^6Fc>2- z5wkEKOW`prhL5LXEQZ40@VnZf85*EI-bV|3fKKqZ{C>}29A;w?R%0`M!$JIsQ#gme z;H}|s9EY$2Yw#0(#Mk&7tx*S+@g`nF9%Mx(WI+z(MgbH-DO7-;sR-|vLviFsHl)SN zcur+@2UlukZw15J&-wj7U>c0Gl~{+3*n(f+eZz7YmcaKJFMh`OpAdNQ zzRyj?4ESE-VJ^Hs8K#S2@EkpMfZ=R77>DMsCNTa>qaaL!rl~}TKs5hu;0*R*3x38_ ze24C6i+U)JLdc5LNQ?wXf}}_TUn_u8sD?)9fUhtRV=x`_upDc#KCmWwP3X60N6(HP zhr##~ZO{O3qclpu<9O`_#iENvmxJ$l4}PW#dg5DzfA^>8pQ0CICDvgh{C$6WDP~~= z`r|V+M=kifd65=Txc~6}!;AP6zhetlV-ezJYGh-J;vUFs_c0$PJItxQPuD-Cf+q9eCg8e9d^vgx668jqx!& z_mP;088FP|U>bhJ5O^#tP!+~Q3V0Fvt2l-~upNfWR{VwoIDree0gvZF;MT)iq3}HN z@W{hou^2z158C1#ltO-FL&iY%huI(ILs3*lJ+wnF7~b<>_#TAE_6Uih6Gf*(9=w4! z1I43@M;C<8XMyS2_eR3-iUZ@`aC-&0V3^lLD;OU`F#(3z3Yed^<2USvdF%iV<4+t7 z9Em;>y+7c4m5j7>+?ewQYS!4 zm~L{ybo3hXA`h}69g>12^bfrd)@@wISscS*9Kvy&$3L+1ocv+(P#W}@I$#9W;S$Uj zm0*6Ef?x4BVlgP33b|l=KzZR~+YFY`$pgt^l7;U1{tWPawjHdy+QPcdde1s^Cv30W zf_0AdOLC+_N+d-jtbcsZCHVd$*bD2wZLof}U8MD}on+l&JIwZ&b+-3c1bl5dY@;oJ z_49a)hHU}cgSI1Vli6N)3ngGZY+J`V+1tYK`AVn;>u%c?&0$@xmhiD{y_yJrmtmL_ zwtZ3{DXiygKiMWqh{Q;OaG0iy`5)iwYi55v&ufbIeQW zVYy&Bw@eF{x!!+?1w)BonNk#%7v`5w@eTY=>)W|l2=lJ>kok8QEc2~H>!J+IQ|4F8 zGRw51unyXcHCPGrnC0(bnD0D>%%}kC63g%Gq6#-`EC0o%4=K4%&=R1I&_x$Rcdyk(tXX_;ufZ#%=fcp1X=@z&_Aq4Ml>^yyH$ z#P+OllO3jw^04jM6m4L8({_&ih>u{}Fn!sMHlLV>VxnV0ZDz~I`528p=#17dF1&4z za2akJ#bdO5y$0LgewXL{It-J_cpJ4)5B583Bbzoo4%?Nsx$T>HtUfmVng@K3Z8Lc; z-uhY7y6M{Q@;r?L!`^nA`9BWsN8gXWj*GDE@2zdPhcF&9;thCg9!D?OS24f-0sA!O z{U@;P7$3G#;~@?#8}8s5{>E9@C$bN80zS5HbOZNbIg{j3l1JHKpT90X#&9^c@H?&{ zA%Ev4KdRva^u%b)z{21fh`&7kC3FqRom_)+7xv-^PU1YS;SM;&(BE!~&))_UPE7 zQ}8qA;rN2%CKm(V4?lP1(Us76&7DVgEG`~}#~_k1wvq;!;IVj{9%d&>p2sctdu7lDL$Cmb-CuZs$S0AZYj>vO%9j~o zJSrQ)@#^!&tIzwK@tg|UzxaD6um{_)5i7A6 z3or}QF$In{PQz^Y+ET2+W;oU#=69@uV~?ZI7p}KxfXXP0Y;fE$3b6vupF9s;t1>=+ zyDKr$APe%K7~Ts0_Fqf>zK-Li127UEm&fAo?!qCQ!sTF%&mFEA=(#>bGz{NoFbonR z1u_Ne_Plmz36w>JKzY^{`JAsA9~qGde#bvJ4u5wY3^&i)aGQr^@VNfKF*u&?@jQp$ zkq$ZFJdN?=Z&t;-cn|NRKD<>u)Pn2YoEP!f%E99;1E2FfrjxE1hI!Zy*V#NqQvRMo z4!EYGG|Ix;5-5%$cmuxft&e@Z3hJU2x&+t68q1oaIaq;>*oqwi*RsjS+wdzkVGUlK zC;Xo4Mfb*s@Y;JGhjT9}5g*T=Jr5nX1-$p8SVxiq&W{yDB{V<>_&p;q8P3P8gLCiu za1vK>7mwg3jHGbhFDqQ{R2Z&na(?}7xYnsYTodiwd&@u@)<-)xukd`SbLp;?bq&T8 ztj1nkg=;Oc!L_D_rB?+6F(f4}OPx4U)%B9$L3ih`*)aZ&pPeI4|E2 z-qwZt7b?Kx$qV-+@afe*))l2`}zvanFWp+1&#W>NN4c z$K(PP*O0g;AsY-6f7|0~3HN67f$Q?W$2hnye>$eXeG;za9|_m_`(Cfn^Wu7g*SUs| z=iu*z!_@fr9j-MnoLpn#eb+v?*TlUHF7`>yHGm4kJt2Ol`w84LFat~BK8)2^g`cqy zbKvV9rzXQ=bg#yEc-+43-U8q6_xSk@*oe*W+8TdgH{5G*66bIcUQgo&Zo$Cct9T7XP!g3<9qvJMe^Y(D2k+NJdHCLJ@OzjR30*hEeJAdJm<7Yx zeGGAJFrM5$u^zi{9M@pyCjm$7vF3osSsW!$8gB;IFDV?_ z9rwTeaXw!K_0SGIFbcD=4({tZjVrhdy5lxsZD#&oKK8l@vEs&x8wW2VBl4ga-bM>_ z#W(m7bFds+u@@(B4p;Cm?%*D7;Tn9+eQdvBEq=le=m+=DH9$oaL;uh}V34G1>WP+coh4vVL>DY)F*n{-)<@Oc+1mxCw`OYOb~6vE@L16otQQcp9!A ze@k>icli6GF%6#QdhEm@oPlY~FpEZPF8uT|+$;GCvLg>(gJI`w0T_lEkPPwgB<>S- zL_Y{!Q^hd781TMn_Aw&(=le6m?=e0qqbBO2Ua$|=Th&5UxTm=+N}?!?PmjgxY52G_ zD#7k_QT3iz8Ii{J0}eSr>W2G7~B@O;a_H0!w*L|z!?Igu4vUXUpw zQz%T+v$t5rn^M8JWSe(rFR}4sT$@Ms!!%%d@RN!);Gz_>Mj>cH^yTqnW((5vA& zZO5>0xUa?yc2OJ;%^+q?=Vg_z;p1Jz1EDkYXZib*OUmK-(Idc;%86cB5vRw zp1@;DiuA~ZVyK9kXoNQS7@wmH+*jWLE#NVihM!A}yX;*)f>rndpTYEC7#Y8b;Kn55 z@IS=BLc;h>2h)aWr95ijJv4>ssv+Kmd882hKFi0O`u5|?1y81IRY7CG=5O2D|O1>>eQI-wi-2iLb4#dR~rVG^ce z_6uflEtMJY`Kg$Qu^9aVKd&D!CgAsJJiPU_?=cMDpbx%;$KrK5Ow*?2Qpg9>mg$40 zS7dZVbZC$JO|A=MI{XKw8=v=_Uq%{aMPXFNduWed@HZ!54t~ZOtj02UuAYy_WLhYq z(z4imFc6mImXWQ{0G1QAVOeQ9w|w!nwy><~9Ox9$DWW|rQ(D0MU|z6}@bL%my?(#t zo9ATRVEJ$WmK*;eUSzybIGB#iv(;g^nub1t;bl7N39mb0oO(S9)0OwT!!p3K-~$-8 z=KrcNO&ZRYYnC70FOM29EwqHc;phE+zjF|V<2!tdp%{n(@I77w!)urLInz`V)Pd=t zIP$=BVwy1xS-x4`SvQ93CG%Tr7~Wo^;w@MQTXvU#d9xfW)2qX>%J4O;KS5XYhIO3v zr*(q$q~AXbKGz5Sj`3hV50`b8Yt}=@VBKW9ZY6%k3arC69E9y)udiYI!V83Wtufmd z)|1wm`S3byFIe{3?#K_@g}yH}EJH1OZpXbH`abK%E%5hjm)mZd49l>&@cB(R0NXj1 z#|a`5gucsqIsBUiLp687(C_7n$Q7zn(?p~RT|>k=`Dxszq0id(vMiS8;_ZD{#@j|s z4D0o9nP~ZLxo-OIg&{C}EgNm`m~Xsq+hr&$H@|}E-0(Jj{A|Y;m`{uc%Ubi3?XfDb zzBbGZE04otwm)LHAHpvDf(@{2H*V~YtVa00&-g_Uo(zvpL%Va ziLgGh{`d;E%Ui*^XjD7ts{)YX`gD|b_!(p7lCEQ0`{-uO%FVkvy*tdQU zjbOTNjSpb@Hmx^+{bs|#&tydsJf)v`5&qU1%))q##4vn|5tx9PFq}5R2;ij-@gI#VHz8RZfFC?i3~r-U`)e>1Ku|de61c@q7%AfFh*f2 z7GNcQfxlyzdu-=mn8|azfHOD>!*@H@;wSuwzA*kAyYhFlB0lbLP1*A}i0v@nuD}v3 zgtyDF7QbK*j^iTy>`Pp@!hC1iG0m7iO;@j@5FDS%jciB-|J{v!mn$8g30)Ip72|h~ z>5YKnUtRGjIt6^(8^bUStFagUzU7Z;*K)zKsX4svljmyuj=`kh`k`~;%n8NM60XB+ zc$$8au{XG2M{}7jd z_BR~saSY2mUK7pG2|eMM$|%^s@H$RjPt9^-D0<;zSZCBhX%v9@&icSK>hCzdbTb%d zGEe!uWqm4SMSfU*Sm&6p%uk=A4=e-y&6%*?vTb5LXT2A$&z5lgH_J22vG3tn)n{#bc=Y5amwa45YhMULU z7nY^r+un>*^+5R6_ge4zoMGwbybbg9Zg4Ei@3u^q@9z)ez__psx1LxG$2Y@m1nYXA zvrT2(eG8Ap?{oaJ4Ll#~WN$6QeBReR{(cprVH!%)bO8a`CnMiUxBx#^Cw6^?>8MxkB+k$)}FKJ!1~JHvo5n;(Jk62-|0$!gjT7X!~A{H#v5( z11DhLFb@4H+xPiV4h``M>^InVU5YK(A6%RBZ?1=T3FmMOe_#`qU^47u*hg&(`w?Z4 z4;hdM_9N_r{)hYU_7P%5#)^!O6!5){breDQ7y38he)tz$yU#w;V1)ZN_E&uz?$_9- z@fbXx>L>%pdtQZOKKA!h!hU9I_?)l30e`b5>Z1(|5Bp_(Vc%&8{Jrln0;4e&js;AE zedc*E>{bQrJBRzwKJV*}5&Q_ltQR_?72bt$@ftEB0Su=L*bn1y2J9c%Ubn4o-_&-w zeP83f2kbYEgMILou)pmX)p4A`-}nnY-iK{)Jkl{x`?!9OZG8LB_UTM-MPM4VpJX4& zbZ8o^0^etUpe^h>^a}bLW9a*PypGYW$8Ma$6+D1x!njWc<02EXBL{NBKB#HPaSHpS zB~cMoQ47XXBQy&%e%yU&{j-+_H((}A~!udf@{A0eEc>?1qo;&_c|c?yhE$739$ z@pa?gG+_QP-i&+4NoK)#-H2T{gcC5Im}jowI&Qt-9@iOt7am zwRU4i#g6j0k7GML2E)j3Fzg&NGAx_JTOW6Wulqj7jJCn>xQ)1Uz|tT$iXePkZ%6%4 zwWw;LYjh7JzhLPWO4d-Dvd3^GB&cNp_tNy_Q7{0NhVns#5?@127^A#9Q z*^w88VHg-zhD{4}Mo$dE7|g&z{EWqzhspR3z0d)5Q4)ruapCV9j>hW+czoVB9Xv;p zs3f7|D9E+2{q08h1cNXU{>~Qc$6vUC`-nzNz{mgMJpRP**o@_vkD2hh#=l@f)P$%h zn2u?fgmD-F&$lnWfala4o|kE*B1)q;j7N|A^%t0i!jFw>!yyBb!Z^Gic|UZeUh9^1 zFfE&>EW4ZFEm#Lw4p=U{4F6eYS!Vbz9umT`!}9zUWQL!~3(Jd2FwZ+a_8A-(v)m5n z+r?bZ+WfNt)^)$aJiHqRV45-?UxjgH8cGb$#k^%4S4Ts%K^OFaX~A$^3ghhvuHYdY zB=8!yUhmfH;d<@cG)RsFaFf6BdK1@i6_??y@qQcs;SrvLOLc@k7>dBFT&{z!-?EKoDQS(cgCtoskb`rk5PGpyrm2h4|Y zX&Gu5TYg#&gzHAflMQFX*YCOk%RTd@`NVwStpfn&Tl0$VwH&d&w63&nx9l$k>j&#e z<3C9tDdWcBx}*Tt11}BB{>JDC$6ifqmg^p;b+N}MkJolZ543}6rxoDJ8UMhBE z>`+_9wvp`=+iQhjo5ps6VUQD9ksh{hJpWWL@UfrI1m9;Kv7Kez>UWvfO2GDydCxYG z^`zs_wt;Nd+3s@O-?ow$3l#m^Wwl~Do4k>TgDdhEuP?JnDVp4(YCcef66 z5N_9W4X%%F8^m^n?b;@2hSvBHhIPjm_}Fl_4e|k+!}ojJ7=F+DsEZn?8q68nhADw! zuzmd+@**c}f2Tzfm?)nzuIU_<<5GX&IBdu7$6oA#_jLp(a2{9jFPxWq6o_UX-S4vf ze-?hmet~_%`4|uTJNCcqi-h}vjy>A{b8NCIy!Ekt#KvfY&am%gA8QEw9@!W6`@TXa z*#CPEZ=)O>FD(G)@^T{|3Zf_+53Lc58~GddY3yG)?zRAq&pJ-$xp=M*;knwcaqQc% zztb?B)?+U0>w26Yq9LlGJp3)k-|Wvuc|zA{-OU0{i<97^iUD*0G`47=|9`fJSh=QWca#*+6;LDpf>P_`2`=0A0`v zj){%MOf1AotiwiZz$*NVS@3-W(G`v>`hAWqGd_jG-8TahQhrSdNX@f#2bGI_A6!ez&jBf}i^eAL8BM?^))3;kv%@gTDnvQ59O7 zmyE0Oq(e63K~YpdH8gIA&{HRzPX^y+r~=L!;zHLnDj+uH$Y6kP{i;7U^@6{xW>}?01n#qD@e+<>KXzdowqP?hVFT7-EmmV0=3^ShVkmm! zGju=;G(s)BjVh>w3h=fne62p32Y-jJ8`rxUfRUIAzu({5ia&4wf8rQU;51GleCz$Q zI2Ww3yvpAz{1m{;=MRrP*xyM$ko$9Q9M_$3 z?6=1GTpQ>1he+$+8 zz9)|9pK)B$?dDt)$6){R)qds2mt!9rX00rn#j{Z6&8(Rr4V_PZr9WnWHc#ZCJdg*+ z9&T>6$MR(UJ@(9KhTdmJuUYTT+?dOAc23PP**808!>pbUWx>pxx|yTjR(_&+W$w;j za&`Qz^*K2sr{yR4S$>{h=e%5!KjyaFAKQ2-(@dIXG#8TX&z3o2IaA)0sq@0CFO24Y zy03YeeE!e*LoSMK+xKsBR_qVYf0v8n@4~Omjk!H{#W6gX2gYpM-)-L%e@pJ1Y|r_e zk{`w2dY_P!=i?3z8YXZ(G-$GgPe(0?&oWz&2n_OV7*jeUGLOT^!~ z`zRkvCb-qj6jg z%WnBXK9kk6R2InF^V+yM?eW}~J92yelACfvZp_W`y8C;q_h_EV^O5NOSl2x*?su6r z?tOVz+}E;j-XF{NX2H1U#d*7?HNw#_^1`4-tI?n7BSE93)tciaOref%N(Gp{@|nmgNE zQ@7^kxCh75JuhB=AWu%1tJ-JXbF*;F8@5)=S+-@ik9^%D^4L-wY?sf)eK78GkXh zy1ewtOQUlc&h^G-JarG!AM(4npUnM7;@}54GT+G8vrBf&w%IP*kL~ozPNVy(ysun* zH6FXy%6eO8lYBbn{8}OIWBXth&3huQm7n=CZ^Swtd(HdvN1TiQh2pdB@3O6Bv-||h zy|Ucs^~IZG%euBbcibB`L;4f9S6+Gfm6u|o)710X&uLD>Abz~e3kL{ zjrlBIAC}&8f1EUx7Hj5{*)--x+d1-3UVbz3^{5;>o+nJb=6<*nBJY2aU*yb)3HRmU z9zUHKe9sNRt#_ea`3kVm4vb8n;j`QDV-;+&n&l98wCC-bI> zpAEB7EY-bUUn9#zefZ9(|GKTmaWN(1r2 z9GNT5%Q|9STjR6lf-}$D22sAYjJ&oVOY_5RkF`<_0^ ziab(Ar02cSrb$O_neuUUl#$DGan6r&qKurH<8pMqnfE_+?gqF z&TCTF@}(E^pFEXE^N-w_zvP-+n&0NM{4n3if!QNp%IC95*2}tCCu?QRc>L*j-+j(s ziFH5ZK-{tWT z_sXz%UM1^9-pSLwBBp+ti*tMa75AdfAN9TZU!O*w$GyIX=I}B1_3A6_8}DnYwTY|d zgPAw(Eq%UwUGIx~d(X|O`A&v*;A^9q6TddPKlk9~9Q2;LLw#{Uv?tnd_tM@KeJD$9 zt9Es`XV|*xlQW{e`SF>pd3k4*E4zu=RT%-%oORaot)TydOT;;q1M;d>q9#)ZN2tJIn*8~o0sLhsHaZK5Ay9CmO~;RI5>yq zJCUdAw9})G`(143s$3g&BI3aFYocCMC!C#M=EwO_Y)d|WH^)XjY1`I0HUNP#3FPyyx2DPZ{c9$E6;&9s4~ij#q!>j5z0?(Z)aV%0u^vk+ z$7>yV;Cvj5^t~vy|5WVI}r1u|>i z7;S-e>4j*U@Ne?VlV6@HugjaF4Vxiv$=jk`GOsR?cZ}vP^RsB zIQK`}cWZ8n_UYO&kIf5mUCiV0$6T39@|$QMe-v|<9F)DXYj(^IvGjbO9GYWtV$2uf z^B3mgTr_6xk+WjEC*{~2kppAfUyb&6+iac9vspIIrul5P%on2F-8V-@8-7OY&$&5Y z=Pn(juRM5bX3M-;Bp=S|k!Rav_b9u{?I}^N#Dcg`w#13@!thwTeMOXKWq62f*9GcG zm7ccSTodZ!*`xi@XPVe2*Ejc?Hpq31dQ2NN)JxNKjoz@|E9z%`VfB)Jsk%d%x-!GD zIVSCZ@_l`jnOkCgb-C9Zv+^#+#kI1#Yox!VzlM@1elot5K!-3Pe2$C9!{_#HE~PJJi+nQ6 z=L30H=FCi)K5rP$(e;}C0OQrZ1gJYZnp5`Q%~$(q{+WC8_uMvidvkW(k$duRp2_6C zWU{?EvS8ky4`su!nvaq4(&y1XfGiR1RU`7`We zwdT$KRJP2n`9{8*Q*uTw$c2&4mP1)6aM&ODm) zaK_OLh%=6kT^c$@=io6j z|HAVx{AYp}`Zp!h^oIa%jAQdTpZ`egL%M95Z6j^=%t1LS(n#z`r=O0Qdl>0vd0Kvw zlOnyu=CP4(N9M3GaVb_0iS4srr0s6mIbXmX89j}Yei%0vg-rR9a;z8`nBk8(k z*3J5HPM?qRwnv=1v^_az=J&ZO*N*32Q}%Dn4f$jK5bOLVr{`xmG16KYmsf{J8mk9( zk9f6Dd8>Ro9&shUr01epDAH6}k)F<7dN^;fs?0uDY5!LqjB@_B@tl0OzHsZPv|A44 zU77d(Uvo?Tl*@8newy#)pzNA$$MYtx|HAq&d@7$D+n~7!H_7JNCfjG{d^LMy&+ME1 zb4ZTNG5KLm%Wv|B+!S@v{dp*k|Gqf3t8;En&SCjV>~obYntAi~ye?CopYpta&%~UP zgQuVWum3#%A5Ho5lV6xTT7QP-jhrR(WT7mcrL#g-%^F!fE9E0uBy;8UvBf)bS$>}H z<)G}5ow9X4o6WL$K9|pDo9vLCvwQZ=!THvBKIN02KY29g<$295d3mnQUvm3|`P^@A zZr?xV!kihOIVuO_E3uzVvrbmaGWlTMn|U*5X3F%LE>mYxe3_-g<)8Vh2j(dC_&@R3 zKa&NH1|$04V-1bZdhDNd@j3H2n_v2|n2*%FxA)}U{5^N%wwR05Jj~a}eAniP=1;M_ zHr}`1-{SMO_jDZpn=?n=73aG`KAw#tO?J$#*)w}Z+T$_uPM&-RStd*616eE!k1hJ2MMtk&@8j7dJ7vFoH$Tp~xjfhBuem1=pr*cXb$QxKKI4vcFEWB^&FUQ#ysUejJe;mQQHLluU(9x~uPvfHDFe%A@ys9b`-b>~2jyM4 zG+({Bhm~cqdQrscSuub6&&SSq?u_St9q)-}Iup^W*!B`o-tX7k^#MFE8zfa$^2{`67P~i2O3o_*bHQ>=^mEP0TMpv8m3eC6gXH=nufo7;TDD3j|&xipu#{rQ}I zDub5FA)XKAbdBfM_`mY&b3VUuY*%^TAngAR%Eu;17>p8Ljg2gQ5ejXG;Mjx(P-bF>|E zRQr7Z^Hg(X%ws(qm$=eam^0q-`RxEPC-41+fH)9`${Iu4GqgLmjoTdMQHp{!QduRR&cyPhEa?k)ZQWSMx;`^&v;pe=p*8>)vi z`2{EQR36R)xihy#e+2!In{s0;ZPRP|Du2&Cc`)|TS6F>%vqVN1z{+(yXbk02X+Eekq^{oFu z^t&y+_DCMjGkGzt+g(S!HLf{a|GFl1UGmYmUU%(eY{E5@Yed(R#y(t|8xy%T#!LPk zV<@kA={5bj)tg6SEAzcH-%E>Sxfo;GBF3l>i}C5R$M-%D$KO>LlQxFjaLS02cs^e9 zp6_CeE&JScxir6t?VgzLW%$m^xbA-OeI@&6SbBZmSneIi$ev?f8`kw**^xOa$Bw_( zvM=9l{VcxY@x9Hj<9nH3jpOytjQ{@RV}19!YL?H3 z^MSlK^T(L~Oqns$$M=!Gznm?;+gv;=$M*bf)qeSIPRj+kDmRb6OTXupdq#hw_Q3f6 zd;9(J`(t@`?#OMqH8vD<~#Ub$E^Z|_@g z?;MyTBW;cw|E-d3;<)|&f#pd#CDPBiI_FE`Jfz1h`TO{9`W*M;c{&<^SM!=FuNnOf z#7zAS=sWVBd?3qa)qE_U%4f1cHj3r?W1CFbWc2rs+x9nnJ7m{Ka!c;aKl88nyWrP$`n%*O``gL;b4PBDV{k0a&#^hz zKgYS>okvsmel*YbjIYi(`dj09U!8Y!6pOyP=>N@6zDU25``#=N$MN>OF;nH`DKC%y z2KuS~rumULPaep9aXkNs*X-|!JRRvUxxZ(gE^m!=SSU-!-(-I#Tjk5yH%H`qIVC^O zIr-iA@7piwZ|g73MY%BN=e+znXXIz`xf60szLkTsPrjC&vwgmht+Qn;J^y09l&@s> z?2)gJ|F+y?cFiu?AwKiD@!ztq-){|@XMOdon2*N!eJG1Xx-J~~{?5o>`TF_^zdI~u z9*?wrFb_vMJ`?%=x>sK}iirjLt=uKEW;TfP*(=h`d7qYZb6IZ8-}7*uiGOZPbiaZ7 z4ra~l8SX`JKZ4iXqcBV6%sa9`-j^k^eAdeP**x22_w1i<=eYbVzs~P-Wv$shRb9prGN#P%{pF85* zuZ?~9tYdUuj{KyYkniQ_NW*XC@En#y@{JrY!9kM_nsjK6%y)8ZzCUI=?r-^KthZNo z%@?v+K9i4UwXB$rX4$ciO!~;^(aNJ=JzshByWZ}NStDy^?O5`$tQ*_=Y{bECah%TK zNBMcA*9DOuS4A3Jo#FBD{Ew6VI7*|NC*3?sGifIspUz8}+`nn_rp%a`GJEFCT$v~C z9a=E&iQk-me?FKGWtq6oXt}Hu_m8cSkLOcaKkhNxGGEM&aqrXaasSi)aSzmyaUYX= z)V`PRk9q9=DDNE=_ncYx@Ej43IXXUbd``~kIXmu$yCUx4a{rWj&7O`w(0apo&i=Wl zntQ5uWzl>%%Vm|Uo{zJL6tPkL}}qSu*zF zp2l^vK{m6Stj<4dnFgkLUHfpf@AjWvDX}%V_bav zyA8`uwe08|hI6$K_gQWj``;pt=?mF0U&&YV_3W1eb7&6Fx8fes@5cS4$LFM+n$z-& zoRMGU*JEdoe|zA9<~qAL?jOA_?&rKW59g`;C;e&rRMSj7&1kMP_jt~bH^<}G$G`q8 zaH=l*o7L>!Q#}@+e`w6($Mbah3U;)uH%|S=(L9B7PCe)7e$mCcbJIPcE5*H@8|Mqz zIeX`jd^^YGCpjZ$=bX47*W+Ks{krZ0K0fZv{Z_u2gL6=9ha>Wx4BIa(W4D1Xdt z`A5um<_4jrKpD*^XimO4GI!?5{A2SqPoLN3%uJasFHimQXpX5{roLsgUH1~ZH`zVL z?rB{)?p=LP-jTT@Ej(Ue!f!9QXW6=I^g*tc%a_(R?WGr(Y!RiWqS0;=&)^ zI@gDDPwt33zcJUxJc`%mhTIhI{WW*y-bgE-eIifg>Db=0W1gG8?q9LagYh}(Y`Ygn z?4Fuqb7=O8I8%Pafq45&++QsoJ{e2Ty}m)@skquC9$S7cK986h;>~tHAJ4apShNq@ zvu*JvW|d`eXNmjmSC99t=QCU6i*dYr#J%*&tFnGfluu=u6Y`@8JU=nc{ihL!>Hzh@ zx%quA%T@VP>|L3Sr#DI9PZ!z*vekAIJ zg)(nu$@I})JU7*Iqqza@u3ot%<|+6?E{b;Nw`1o|b^d7Xf-9%Ga;h7m4Z152#@q?d zM!R7yg{DoO`VG+r&6GJZUlxhE1sv0wabDumc{zu#WVh@d?TIq7PY#H7LEWsa&}N7= z>G;e1HkU>|-aMYC_5S8?ePldOW?#jP+6eWW{Lx0tnzfzxRwh-!97Lkni$bJ7P`*^C8R}Y3QGH z)h(5Cg!O4Wqz8I z^TYA)Fq!89eVF5NV$9E=|Kc;}M%;*>OJm!YM@*Ufg5Sk@`Z@OT^Vr6zu`m6i6QYk~ z9*d)+|D+#vaQ4rh*)3nmmt)=wcFpcFSA_M<&v8V)lVjr8ZP)f4`;T*a9E;<2oHypq zNM~s&p3T=hSG4=)tT5-Z{*ZDt%x_`oxfuUY%zdH1r2H+DWn(T4hPqb1n^$Aq=r^d- z)we^xN?F)9+6;Aux>X&j?z}L6h`3jGYHKXjGu|`*$w^U9e|^II*ydJI7nlcRx|j$+ z{D>9jEM6XtSku3d2I5dWD$n{E@6FON*N1vbKSnv$=lEJ2^F-Q>og(I)r}LM7wxyr> za(_@OzV&gW{q19ao9b^<-51BBAEZBIef=ZlM0t_M>bl`LhO|@G_KUPrZyX){N%e=N zGI?OEryg}|+BRWZK^g1%q>HAUFiaY&dZ8=_3uSrLJ0qN|x9jjxseKBpn;?4Q%+YV(#Il*f~ zIT`vP(nHah(>7=q?Emn{W5+FDor7}`_d^@$vtq;X=@WS@Ue(9L zxocyNidb>}1FzYx_w5tgciuysd%S-vhxSX{YuDtlK9n+I|H`<0)Mh&tuQ@*HhvORZ z-(#;iUZ2w!RA)$AZN?H&p2eH_vX$$%M?7jr#O`bvu3N0D?5U%q`EcDLoyDVAa1PE_ z{;NYy%jt1Vr_CK`<4(yBV_kKWJdpmb=WItFNC)vD#*rq{eOP+Ue&wt3h|ft|X{zm1 zR;9abyFT>T_QiqEDJ#l|vZ3$lI!J7p>qxnrHtM;5=CpV~zG)b^bmV*=mI0nx4*L(s16 z67AU@**E5$(gq$C?XP2Wyr)GQies|$+UfcKTmE$1raL#=(x&c}FJ<$5I;+OGi7^vn zGsbD=$gFwW*o^(&j!oChMdmGXVQJ#0$!XYrH2!4% zqL{y~jM*#_<3+}pR*o?!$G%Cn%yyB6`UB2y;+Tv+0mfvI4nsd&OpzfzJ-Ye9$-1$I)Mr&yM$N5exFg zxqLC(#(2}`H}R9eME7rKZF?e zTzq?9{}I;&;(q8$>f`-B`cu;8%<=DLibdxxJ-jBplo|7U>6f~e(3jO8F`l9Ba=oJb z8iUd2(En1$dC$0(n>O@Q^cNh5^p{8SP?=GVoc~5KR=G-+jhJDDcunlA7vp-;P~7a3 z!y+!^k@{gccE>;Dt^KJRtS4QK|LqWEY2Da|@kixI84|~@i`X__*ObXqCR-{C%Ev5G z-rgU_=-4)lxzF@<#l~=4>VTmx5^s)6oiy?I9Jlqvv2<~a`p05RJctYNfmqrp%8c@2 z{8Ig--jjbrKUtq%U3T+?-$#)T#vSfn5`kxO( zpAX|)`h@ppc1`hx~PA}j5JY> zHjO%Et*B#`i+a%*v9aX&GiTI!Z;CvWudh^#sl)ygW9pXAq(4U-y)M7idqbY9BW=g_ zY*)Sep@`L$B1Y{W&sQ8pSgQET)c+GW_ zytfX@k=GbLBQB&F+9Y*}$CjQCuMh7@W94J0OU2{KksskO1ZG49xHV>oW-In?{=T=}nTtJ|@EaUtd%yU*JGj**7S;ZToA^QEGk zzB}3_Wq10>S26Hhp3FaUPwvP~xjxtCnp~AD^T+&o%=>umb?aOj-`V^&zs}F|lbjUa z?f5?En0z}&=8zniZ{&a+6t5i--wFLFr;X<)yrS=cZplN@?m7qG(`aAUjB=n}kRI|; zSyH$APD1}i`E>ng+`+Y?Yc$tO%KTh0{$sw$CE}Vy|5cyfHR1j_Hu{$r#h9G&KVxUc z-;5{EoO!Zvj2{~}UMZ_*?R+X5XN!D3+h)61Zj;TkQP$0BA>FiU5dESD8xf0ip|`8b9pvsip~ffzq>tmZvcxxFy;3!|~3fAn32aiZ&US&Rd^ zj(1(<8e`)1#bM)duA{pKF}8YQPR&ooem3>bMtyFtd*6EB9AAU!M;jyDVtk$88f?wD z7IaPPT6q|oFis&qhHJ9Lx+d`0H5vNO#w}bU$g?%Fc0Q3$WrJ*-O{33kpRR9QLpTQ4 zE&Am8_4@z&L|z}9Bjdas|0!`!zl!gOd{1E<%{YcwFsAqS-2XpgdSYYpG?N>dn`Sgd zXROY+-JB6C@68gCf2-!>*&tg+YBbr0^TRCd%JN>@%cXMox9`oLj zIW*tMp80CNl-kqULO^kW*EzS}1%f|OLABgpB$2jTqnUsI` zeaOA}ON>dK6EQ0`4~%O)G2wdG_>cH8M(rA3T_C26V;DCOOIv05&O!XR9^5ys0}qKZ za_IOPQ#>6I@4IGno$1=yHM4!XZWfnYM{Ew)*~SGNmuts~v8gPHPh%V6)3vR#r@Sh+ z>Zq$T#HDfI$MbBSk1{_j|I@c*z8_MTJr?VVWA&SuRwvw+TjM*48)FR5nBL{NIOoNF zf0?1|D>KSJ9{)J5#j%d1*Sv46W~d{ild%c)g!5PbN~3}2(oVWabL&cTX)MhTkF@z# z)LGw-bTSqso$S}RqcSWG)OXI!cWL)UJ&1G=FJ2$gLF_pH8zOBzza@9%p7@+GeQ7D) zhVR{;oA4W0zUvW>7_YaS(&)d}t><&LW1H%hOLA7^?=ViUj*>p=FXIX7H8H84Q{NeP z!*gwzSQTSpOZrJyF*U@i^cw2&lNw90FL@+CrPZ(F807J}`EAZ0&t)yv)P-U}eTdkQ zuF^`{ilql5J=BSB=$kTS^F2{!wU63A_1ys(>YiWpo51Ro^TxlMHPka_^jl6pi@N3q zIVOka;HV?_k9udf>>Tx-`c%8SS=Nts)_zxw`U7=}dSs|uR_XiRwepEr|C1A}GtGZ# z-+fkFtA1K2zSEyOvqb$fZRE4^CqC|pxVbjc?ZPNS(pdX~H1_%xQSQXxqfu^OJI#N; z5BELM>`~X*r#3~sY2UME#@N5~*49gVpZERHlTqGn({kW-9IJZ5_etW@#enm8W8MXSGZZKLg~`?ZhyF18_!rS-=$ zu`i|Xr2X3Qe}2bIyQ$rg_ukj`$ousoKW%Hd*tUJ>Q`w(($oXhToQrs{uH4o(+s2l$ zy{*PR+x+tz#&*|?W3^q|aL(e~IXgG!DgFGtg8Y!q@<16;R@ANXT@0wtwNdJ=??)dL z^?>CMqW+)AYu2@nrMlH?!_vB*A2S{Y)%IzV)T!DZ?VJ9Xaa(<@1>-vq;~B&E3%*bA z9fRktm-V52hdTW2iSZBpX=5SAMSRDg@1{TJI~m&^`fbMEhv)i!`gPXznRmx_^v~_X z{`A|8llmU_mHw{eKlyha&!b}x_g%~*@%)MWE3V&N_xr44_Wg%_=xeSL?YsV>I#VA& zT4Gy7~mGM!(fLI3MRW^jD2x8yAumj@?*;@2C1Ho2h+YH~e!v&dFG~ zad2tqGscy8M~s)x7~h3CZ|7nx;vX^2FpM!=(FoV?b8dbf*RQT0UF+@>V=2ZRKN;8H z#%`9#!f{Ri-Wao7Jj1p9ie1OA9@kiF=VS5M=T{nE=exciuJNt!J?k2maBXj&uFYH* zyZ+sGe9e2n=xXi1|9fq}>>by}9`B!n#=l{3c-OkF>zvOCIVnHR>G@@TopW+QF3jb* zGOqvrICkB5ywDh-$A5}(8S6^7vtoO$vyB5tH^*f>!nl^PC*zf_HH}+Hi&Y~Xjh{)w zd1DOPSh8zu<0!^fp2&l_H+SW4xg*2UYxl(ac#PMr_m|v|KgG576}c$C&v|3#_uB!U zUy{pWy=&vM_H%dckK=eakHv9e4B+YUIM9oeUmT71RppQ7?l*>R{Ajk!mHA?PTf7)s zaPHzoI!KRo#(#%soLhQHw=ZRv4Bs1wMKR$$@nPNdB2CxG%2{PRrX>D`@gnP3_j550 zYP<4hpNN%jMT{6TIW@-BjDv~|d3<7)Cj+_6QB#jD@ekGf91DxZwMssB({ieGuBd>F5KU(^%E;_TaataJNU z9*y&shkuWNJHtrZ+6YL*({&V$Hu=AvV6Y{vUEO>g|a~2 znb|UP-jX-wHF025CQUK*(WK|{Y@W_DvBYct$@6(>%=$0KXJ5^v$&)6(Hq&K>*w5^l zC-djMSvZT0Ejf9~$sZnDVe$&2ze`_p@|vUg*?98C{}(%7@3&Bl7ao&SA|2F!(ndN- zH+ASg@<^18$H%`VBCekLAKpXV_+ZqP>SA@Uc$6RfHMd3Hs8_vzUwlSgDj(&iGASmF zyDO(}k33hGdTb0+*%gb%G}XWMZC{RG*;L+s9_M##j+`)Vs+`H|{c^x~{8U+z9zV>_ za#ob{E2CW966xZ&EtPd`g!V-HaYpP*SvDTKd$!A_SvM<1KFK#R^M<@K>6KATJlee; z_vfzsJ%7#L;_=|letX3G+>u-Jr(Be?^5c9jhh?99IooB6Y>;)bMn0Ow^PbF+H^sd? z?&)!F&po*#w~pOD{_T%{y!wyP?~gQ<*QX={Kb3 zecdzk&q(usN10Pzr;T#0OyC^85{PBiVoQSniE@xh~h_>Rg%2 z@`qdzOT2b@hI{VLe)a6p@4TGc@53CQqjOmHi+ktX%ePHF8~69QS8dsRAn%F$9cPLA z0cXgY<334C_dL!P_sO|G(!F!;cl$_Ij(hCZ$l9@8&sT}}R?Kp7|J{e<9=xTp#F%>> z-FxU5+(+j)+;i!EyqV(ONXLQu9^Id3>ACkD^PKTn+p_%?;&?upP2-$DH|D-ZHqS=+ zR2;Wsb&QV7`MC$waX5GTnSuJbE=hlwLURxpV8~$+IL%dLI$9=`KXU3RseVV+|zozhc<&oSM z_i?*l+5O+{qrNN`=hC>h`lh(&`(No6n<+D7?ktj}vr^W`I{8G_%_qmdAL9OH&n<`7 zKHYDM4EHcwy1&`d>(;Ry=VqJkgI*;o$8+ax{Vnpp_dFjuo`3$E%{_le_RDS=ev@Ur ze#gW%KAJ@%eWcA>GHs;GGm$R$$9?G6N4i`X_m}@FKZ|?UPtJ)sX?!2}sm&!nyyrFd zxw{Yj@a&)6vQxGm|3-=X(B1p*p8mBnaryD)jQ5iWm$Pz7#QNVNpI^%Br@Vg3tWowpl-1)t z`)%^o9FTA4g#0+eee&l_IcIcVyL;Qu%o+JvPR$SF-uol+jfh3%p1rbfZ1> z937u?zy5dQxjMsk4vOvgynFq(&*!sA#P(WIN2mkD_kx)tZ_Vo>zRf>iE(P;C+!ON? zU_J$ubFu%An15lIgJGC=VR+p-*0l|vvyD3=T?fNGIh*HqTCL3oceO{4E5YR{qE3QnQctD_T1~z;k{WbOGf(Go;uaG z@%mD+-C^6dukQ8wu-@=lpZA*g9OL`rSk&3`MZGKSXO6meBK7CnV%`UFH%qK1pS<_R zsE^du(q+mkQ%1jgU?5$rzB$%)uJ4Tf*)Qgh7#`2tZ)^<5VITJCbB;xw=dt}d4(~e_ ztY;nju|NAYUxk0l%ggakTOh6+uk~$1-Z>`wR-PQo(5A_Up>6Y;V@0~jACE1qV;i<7 zJrapc&2mg(a)Y5LkYA8G157|v$H|ucE{{5MgKQXesO6^FESryguHP21uBF$u$nf5<9M;)p z^b0@RjDDwNyZ+yP?2F^y{;{2n@`aZZkHXb*PjcfZv8>VI{=bl5FkcbtxYldPXl#qrtB(5`IToG)L^0ntut zzoqj<zeCDjH)B`uO`k@^ZQqRKl*(u zd28Mnd42krJeKcX_t?@gd2PslF(qb>%@G;;7VYNvIADtTWCVfBVQTlGo*JNI(<1@^uWG<)EGt8G{&Ls0I@$;B->8JTgEIl{x z(mDBEE{VC4?0c9y>6+$Dx^ny*1Q+$Y8s=WQAm_(tymnc9#+*yH=AJwpeT*s5A2Iil z7@I%(EBZ9%OOp3uK`ehcVr9QbJIj5dPaz(p<5p2_^uK&wOpD9KV!LA7a?vsUmZhQ} zWnL$-s}HqGlnMD^zM+jHk3Jv!QEqq5?h(tDJH>H2Uhyg)?c2Oj%8Yz`ZB$UsUBBzW z+?&7s&u{LSuWBH_|C+mEjxO_34Qcn9S6=hV8)Dn&qYeE#>xh>dB46aCm^eIp=gZk9 zTV#`Llnt`}1YX}b-t+jg*(@GgdT-NsJ}f=9{)YK<*3N2KHs&~cU*^wTnK?6NhP*Xz z8UOyttoqTe`W@Y=8NzlvQG%Yvf~Nj$_TNnw7IcmWj^} zeBS%k{Y<3IPT3;|#av~|)G1M(lpEzoSsLafQ+AZelk&q@U)l5<7|Q06`DPA@xzN6z z-Lp&VYrC=S`<x;ODy?nb|3rNOJ5s3^4hNP8K0MipNnmNCZCRd zt(~>Tzgf4&OaG78@V@ns4(2RGUJS?ST%EUL*)Q_$d-+Lzl?!rFF3n|Q7x%j-;^pjE zN6eg(A4Xh=1Fw&hXgtZ;go??|JTZarXU)s~<&7a&k_LW3>J^BCWoV z4IBW~ub2>iq;v=K^9sM50ZMiYm@T(^qiVga#B40Svv@OOq*Ha_l;hcm-^@RMPh!_dE$NRYuo3{V$nWpqc)HB z>Z|#7&W(PN{*FG9ex&}ZcGp~|myYN7)Gz%-eiVII>*=5VI@;^KvO~7cm$Og47SHW> z=>L4;9UQ<6>YFWjp*bz(eMqT{d{4%FUOv_L2{U)CO zEZ(z!`@CaJIaHREL;Jrw{^=L!n+&B*i zW!h0cf9n3wZ*pGh2f3cgLvbFif9{Sxz3ZWyfABpQ5 zY3mq#&M}+oSX%hJs_#Cz=#$MBP)l6}mACBw6)ndH=<5?%- zXx)gbjUvXjj&Tml&qiEX4zF+DwWGM(F=Eg4>*4ucj1L$u@EwkE2jj5DZHMs)^XC2~ zx5sa-s9T%?!$Pj)7^AoDZuv^Sl0R-7p1d=b#z~!%_bt6XYox&&GF7TBN8|SL@2(h6`g5+x?{fZ_$L4V! zmh#IOlRQH{4C6?~l)Nureb0AgY}4504UzY@FW>v<-Rg`xe^}6XIp~jz*k_8@@N@I~?nnd)aq3 z-<%;QxQ{FyWPpm5oK4+X?EQvA1 zlGkU8bbMo8n`tt2EXCI3|Dh~O{}-Zc$`fT){owl>OV5qLd++%e54Anz&vDx4?BnlW z9HZlwpSEcn-Dhn>40!B&tlXfx5waL;aw9czsycxvDGF6ANe2EE12s zCVi~y^Y%04l_{h1vu|BJHS?fb&$+1AoQL!s>LdG; zCJe_b|2&s2>aJ)6MzeR(Xc=Ztz&EU0UIx1ugw zD(b?C-=ix}Vo;ssyTetZ-V%?}%{FY;G1;%QQg$DTI8Ya<)72Nl_aVL`SFfmN)Cof! zqb;(Ic1N1pmbh{J;zeDk3@jGM`=K~y-@!Q+F>M{^C+3Hxb49%==B?+P8RB5+zNb@v zI8Swi^0#M{&ExZnn7{m@Tsd~tl&hv(ooixwMJ^k=bToVUrBg1B&-{Muf+_#c??yA7 z|8De(b?~`A#P